Y a-t-il un moyen de faire glisser le tiroir de haut en bas ?
Réponses
Trop de publicités?J'ai trouvé un moyen simple de le faire. Tout ce que vous avez à faire est de définir une rotation de 180º pour le slidingDrawer, le contenu et la poignée. C'est plus facile à comprendre avec un exemple, alors regardez ce que j'ai fait :
D'abord, je vais vous montrer mon ancien tiroir coulissant, de bas en haut.
<SlidingDrawer xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/slidingDrawer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:handle="@+id/handle"
android:content="@+id/content">
<ImageView android:id="@+id/handle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<ImageView android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FF0000"
android:src="@drawable/ic_launcher" />
</SlidingDrawer>
Maintenant, regardez les changements que j'ai faits, en fixant la rotation de 180º.
<SlidingDrawer xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/slidingDrawer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:handle="@+id/handle"
android:content="@+id/content"
android:rotation="180">
<LinearLayout android:id="@+id/handle"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:rotation="180" />
</LinearLayout>
<ImageView android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FF0000"
android:src="@drawable/ic_launcher"
android:rotation="180" />
</SlidingDrawer>
Notez que j'ai également créé un LinearLayout pour le définir comme poignée, et que je n'ai pas changé sa rotation, mais j'ai changé la rotation de son enfant. C'était pour éviter un petit problème que j'avais, mais tout fonctionne bien et c'est simple.
La valeur par défaut SlidingDrawer
ne le permet pas. Vous pouvez utiliser le Panel
d'ici pour obtenir quelque chose de très similaire : http://code.google.com/p/Android-misc-widgets/
J'ai été très insatisfait des solutions fournies ici :
- El
Panel
classe de http://code.google.com/p/Android-misc-widgets/ était vraiment peu intuitif à utiliser et comportait également des bogues et des problèmes visuels (inutilisable pour une utilisation productive) et aucune doc. -
SlidingTray
classe de http://aniqroid.sileria.com/doc/api/ était imbriqué dans une librairie nécessitant trop de dépendances et pour moi, je n'ai pas réussi à le faire fonctionner du tout. - en utilisant
android:rotation="180"
requiert le niveau 11 de l'API, et mon objectif est de 10.
(sans vouloir offenser les développeurs respectifs, j'essaie d'être objectif).
Ma solution était donc d'extraire Plateau coulissant de cette lib http://aniqroid.sileria.com/doc/api/ (par Ahmed Shakil) et nous l'avons un peu remanié car il avait quelques particularités à utiliser dans la librairie d'Ahmed. SlidingTray
est basé sur les propres Androïdes SlidingDrawer
donc je suppose qu'il est stable. Ma modification consiste en 1 classe que j'ai appelée MultipleOrientationSlidingDrawer
et vous devez ajouter declare-styleables dans votre attrs.xml. A part cela, il a à peu près la même utilisation que Tiroir coulissant avec l'attribut supplémentaire "orientation"..
Regardez ça : MultipleOrientationSlidingDrawer (source et exemple) @ gist
Voici un exemple d'utilisation (également fourni dans le gist)
<your.app.MultipleOrientationSlidingDrawer
xmlns:custom="http://schemas.android.com/apk/res-auto/your.app"
android:layout_width="match_parent"
android:layout_height="match_parent"
custom:handle="@+id/handle_c"
custom:content="@+id/content_c"
custom:orientation="top">
<RelativeLayout
android:id="@id/handle_c"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="#333333">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Handle Text"
android:gravity="left|center_vertical"/>
</RelativeLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@id/content_c"
android:background="#555555">
<ListView
android:id="@+id/listview_credits"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</your.app.MultipleOrientationSlidingDrawer>
Disclaimer : Tous les crédits vont aux développeurs respectifs. Je n'ai pas testé cette solution de manière extensive, elle fonctionne très bien avec TOP et BOTTOM définis dans le XML. Je n'ai pas essayé de l'utiliser de manière programmatique.
J'ai dû faire de même pour l'un de mes projets et j'ai fini par écrire mon propre widget pour cela. Je l'ai appelé Plateau coulissant fait maintenant partie de mon projet de source ouverte Aniqroid bibliothèque.
http://aniqroid.sileria.com/doc/api/ (Cherchez les téléchargements en bas de page ou utilisez le projet google code pour voir plus d'options de téléchargement : http://code.google.com/p/aniqroid/downloads/list )
La documentation de la classe est ici : http://aniqroid.sileria.com/doc/api/com/sileria/Android/view/SlidingTray.html