27 votes

Android SlidingDrawer depuis le haut ?

Y a-t-il un moyen de faire glisser le tiroir de haut en bas ?

32voto

Leandroid Points 710

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.

7voto

Computerish Points 5219

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/

http://www.ohloh.net/p/Android-misc-widgets

7voto

for3st Points 2727

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.

6voto

Mobistry Points 2902

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X