pie - android versiones
Android SlidingDrawer desde la parte superior? (4)
¿Hay alguna manera de hacer que el cajón se deslice de arriba hacia abajo?
Estaba muy insatisfecho con las soluciones proporcionadas aquí:
- La clase
Panel
de http://code.google.com/p/android-misc-widgets/ era muy intuitiva de usar y también tenía fallas visuales y fallas visuales (inutilizable para uso productivo) y ningún documento en absoluto. -
SlidingTray
claseSlidingTray
de http://aniqroid.sileria.com/doc/api/ estaba anidada en una lib que necesitaba demasiada dependencia y para mí no conseguí que funcionara en absoluto - Usar
android:rotation="180"
requiere API Nivel 11, y mi objetivo es 10.
(sin ofender a los desarrolladores respectivos, tratando de ser objetivo aquí)
Así que mi solución fue extraer SlidingTray de esta SlidingTray http://aniqroid.sileria.com/doc/api/ (de Ahmed Shakil) y la refactoré un poco, ya que tenía algunos caprichos necesarios para ser utilizada dentro de la lib de Ahmed. SlidingTray
se basa en el propio SlidingDrawer
Androids, así que supongo que es estable. Mi modificación consiste en 1 clase a la que llamé MultipleOrientationSlidingDrawer
y tienes que agregar declare-styleables en tu attrs.xml. Aparte de eso, tiene el mismo uso que SlidingDrawer con el atributo de "orientación" adicional.
Échale un vistazo: MultipleOrientationSlidingDrawer (fuente y ejemplo) @ gist
Aquí hay un ejemplo de uso (también provisto en la esencia)
<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>
Descargo de responsabilidad: Todos los créditos van a respectivo dev. No probé esta solución exhaustivamente, funciona muy bien con TOP y BOTTOM establecidos en XML. No intenté usarlo programáticamente.
He encontrado una manera simple 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 mira los cambios que hice, configurando 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 para establecer como handle, y no cambié su rotación, pero cambié la rotación de su hijo. Esto fue para evitar un pequeño problema que tuve, pero todo está funcionando bien y es simple.
Tuve que hacer lo mismo para uno de mis proyectos y terminé escribiendo mi propio widget para esto. Lo llamé SlidingTray ahora es parte de mi biblioteca Aniqroid de fuente abierta.
http://aniqroid.sileria.com/doc/api/ (busque descargas en la parte inferior o use el proyecto de código de google para ver más opciones de descarga: http://code.google.com/p/aniqroid/downloads/list )
La documentación de la clase está aquí: SlidingTray
La clase predeterminada de SlidingDrawer
no permite esto. Puede usar la clase Panel
desde aquí para obtener algo muy similar: http://code.google.com/p/android-misc-widgets/