2010-09-12 11 views

Respuesta

7

La clase predeterminada SlidingDrawer no permite esto. Puede utilizar la clase Panel de aquí para conseguir algo muy similar aunque: http://code.google.com/p/android-misc-widgets/

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

+1

¿Obtuviste los paneles funcionando? Estoy teniendo un momento muy difícil para integrar ese Panel, que parece ser muy bueno. Mi problema está aquí, si alguien pudiera revisarlo http://code.google.com/p/android-misc-widgets/issues/detail?id=9 El error dice "Archivo Binario XML línea # 15: el atributo de contenido es obligatorio y debe referirse a un niño válido ". – OneWorld

+0

Tuve que envolver el widget del panel en un diseño de marco para que funcione – OneWorld

+1

El cuentagotas superior tenía un comportamiento no deseado: el contenido de abajo se movió a la parte inferior. Lo arreglé de esta manera: OneWorld

6

que tenía que hacer lo mismo para uno de mis proyectos y terminé de escribir mi propio widget para esto. Lo llamé SlidingTray ahora es parte de mi biblioteca de código abierto Aniqroid.

http://aniqroid.sileria.com/doc/api/ (Busque descargas en la parte inferior o utilizar proyecto de Google Code para ver más opciones de descarga: http://code.google.com/p/aniqroid/downloads/list)

La documentación de la clase está aquí: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/SlidingTray.html

+0

Probé este, pero cuando lo implemento utilizando el ejemplo xml, obtengo una 'excepción de nullpointer' en' com.sileria.android.Resource.getIdentifier'. Me encantaría usar esto. – Peterdk

+2

Vaya, parece que olvidé 'Kit.init()' ... ¡Funciona muy bien ahora! – Peterdk

+0

Además, si copia/pega el ejemplo XML de la documentación, es 'com.sileria.android.view.SlidingTray' y no' com.sileria.android.SlidingTray' – Fr4nz

30

he encontrado una manera sencilla de hacer eso . Todo lo que tienes que hacer es establecer la rotación de 180º para el deslizador deslizante, el contenido y el mango. Es más fácil de entender con un ejemplo, así que mira lo que he hecho:

Primero, te mostraré mi viejo SlidingDrawer, de abajo hacia arriba.

<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> 

Ahora vistazo a los cambios que hice, el establecimiento de la rotación 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> 

Tenga en cuenta que también creé un LinearLayout establecer como mango, y no cambió su rotación, pero he cambiado la rotación de su hijo. Esto fue para evitar un pequeño problema que tuve, pero todo está funcionando bien y es simple.

+3

Nota 'android: rotation' es API Nivel 11 (Android 3.0). – azdev

+0

uno bueno ... pero ¿qué pasa con

+0

No pude encontrar una solución que funcione bajo el Nivel 11 de API – Leandroid

7

yo estaba muy insatisfecho con las soluciones proporcionadas aquí:

  • La clase Panel de http://code.google.com/p/android-misc-widgets/ era muy poco intuitivo de usar y también tenía errores y problemas técnicos visuales (inutilizables para el uso productivo) y no hay documentos en absoluto
  • SlidingTray clase de http://aniqroid.sileria.com/doc/api/ se anida en una necesidad de depender demasiado de lib y para mí no conseguir que funcione en absoluto
  • usando android:rotation="180" requiere API de nivel 11, y mi objetivo es
  • 10.

(sin ofender a los respectivos desarrolladores, tratando de ser objetivo en este caso)

Así que mi solución era extraer SlidingTray de este lib http://aniqroid.sileria.com/doc/api/ (por Ahmed Shakil) y refactorizado un poco ya que tenía algunas peculiaridades necesitaba ser usado dentro de la lib de Ahmed. SlidingTray se basa en Androids propio SlidingDrawer, así que supongo que es estable. Mi modificación consiste en 1 clase a la que llamé MultipleOrientationSlidingDrawer y , tiene que agregar declare-styleables en su attrs.xml. Aparte de eso, tiene el mismo uso que SlidingDrawer con el atributo adicional de "orientación".

Hay que ver: MultipleOrientationSlidingDrawer (source & example) @ gist

Aquí es un ejemplo de uso (también proporcionado en el 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> 

Soporte Todos los créditos van a la respectiva prog. No probé esta solución exhaustivamente, funciona muy bien con TOP y BOTTOM establecidos en XML. No intenté usarlo programáticamente.

+0

Es bueno, pero ¿has visto un problema con la animación? ¿Has encontrado una solución para el parpadeo de la vista mientras se mueve? – Vetalll

+0

Tenía animaciones parpadeantes con http://code.google.com/p/android-misc-widgets/, pero no con este apporach (hasta ahora) – for3st

+0

¿Es posible hacer que 'FrameLayout'' content_c' no ocupo todo el espacio disponible porque veo que lo empuja todo hacia abajo incluso si configuro 'android: layout_height =" wrap_content "' – Erik

Cuestiones relacionadas