2009-07-16 4 views
20

J'utilise un slidingDrawer dans mon application qui a son gestionnaire placé en bas en mode portrait. Lorsque l'utilisateur passe en mode paysage (écran large), j'aimerais que le gestionnaire se trouve sur la gauche. Lorsque je change l'orientation de verticale en horizontale, le gestionnaire est placé sur la droite.Comment faire glisser une diapositive Android SlidingDrawer à partir de la gauche?

J'ai défini mon XML de mise en page comme ceci:

<SlidingDrawer 
    android:id="@+id/l_drawer" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:handle="@+id/l_handle" 
    android:content="@+id/l_content" 
    android:orientation="horizontal" 
    android:layout_gravity="left" 
    > 

quelqu'un a une idée sur la façon de le faire glisser de gauche à droite?

+0

En fait, je trouve un code qui implémente quelque chose de similaire. Blog avec Captures d'écran: http://androidblogger.blogspot.com/2009/01/sliding-drawer-again.html Discussion du forum: http://www.anddev.org/viewtopic.php?p=16622 Code d'achat de SVN: http://code.google.com/p/android-misc-widgets/ –

+0

Je souhaite également implémenter le curseur HORIZONTAL et j'ai vérifié le lien SVN, mais il n'y a pas de projet/code disponible –

+0

Cliquez sur l'onglet 'Source' en haut de la page puis l'option 'Parcourir' pour afficher le code source. –

Répondre

6

Je ne pense pas que vous le pouvez, sauf peut-être en saisissant le code source SlidingDrawer, en y apportant des modifications, et en utilisant votre version modifiée. De même, vous ne pouvez pas faire un SlidingDrawer qui descend du haut.

+0

Après plus de googler autour, je n'ai toujours pas trouvé d'exemples ou de façons de le faire, alors oui, je suis d'accord, il n'y a aucun moyen de le faire avec l'android sdk ... –

1

J'ai réécrit une classe à cela et l'ai fait partie de ma bibliothèque open source. Il m'a fallu près d'une semaine pour bien faire les choses. S'il vous plaît consulter mon SlidingTray en Aniqroid bibliothèque open source pour Android.

http://aniqroid.sileria.com/doc/api

Trouver le lien de téléchargement et la documentation pour la classe SlidingTray dans le lien ci-dessus.

(Divulgation:. Je suis le responsable du projet)

+1

Je reçois une exception nullpointer lors de l'invocation du SlidingTray. 11-13 16: 41: 51.980: E/AndroidRuntime (23438): Provoqué par: java.lang.reflect.InvocationTargetException – vandus

+0

Je reçois également une exception de pointeur Null. java.lang.NullPointerException: com.sileria.android.view.SlidingTray.onLayout (source inconnue) – Sathesh

29

J'ai trouvé un moyen simple de le faire. Tout ce que vous avez à faire est de définir la rotation de 180º pour le slidingDrawer, le contenu et le handle. Vous pouvez également faire un SlidingDrawer qui descend du haut, comme je l'ai fait here.

Regardez mes exemples ici, d'abord de droite à gauche, pour voir les différences.

<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="horizontal" 
    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 ce que j'ai changé pour le faire glisser de la gauche.

<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="horizontal" 
    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 aussi créé un LinearLayout définir comme poignée, et ne pas changer sa rotation, mais je l'ai changé la rotation de celui-ci est enfant. C'était pour éviter un petit problème que j'avais, mais tout fonctionne bien et c'est simple.

+0

Vous êtes un homme incroyable! Ça fonctionne bien. J'ai cherché plus de 3 heures pour trouver la meilleure solution et enfin et heureusement trouvé votre solution. :) – Hesam

+4

Notez que la rotation est api niveau 11+ (Honecomb) –

+1

Notez également que SlidingDrawer était obsolète dans l'API 17 (Android 4.2), il est donc probablement préférable de se prémunir contre les futures et de migrer loin de SlidingDrawer. – spaaarky21

0

Vous pouvez utiliser le code affiché dans cette réponse: Android SlidingDrawer from top?

La solution proposée comprend la mise en l'orientation du Slidingdrawer en xml aussi est simple ne nécessitant que 1 classe et quelques ajouts dans attrs.xml et stable car il est dérivé d'Androids Slidingdrawer de SDK. Je discute également pourquoi je n'ai pas choisi d'autres libs/solutions populaires trouvées sur Internet/SO.

Quicklink à l'essentiel: MultipleOrientationSlidingDrawer (source & example) @ gist

Questions connexes