CollapsingToolbar no funciona con contenido no tan alto
Estoy bastante seguro de que esto es un error, así que estoy pidiendo una solución. Mi diseño es como:
<CoordinatorLayout> <AppBarLayout> <CollapsingToolbarLayout> <ImageView/> <Toolbar/> </CollapsingToolbarLayout> </AppBarLayout> <android.support.v4.widget.NestedScrollView/> <!-- content here --> </CoordinatorLayout>
Estoy recuperando contenido de la web, y no sé lo alto que será – podría ser pocas líneas, puede ser muy largo. Sin embargo, descubrí que CollapsingToolbar
no funciona bien cuando el contenido no es lo suficientemente grande para cubrir toda la pantalla. Casos:
- Android: ¿Cómo trabajar con CoordinatorLayout y barra de navegación translúcida?
- ¿Cómo restablecer la posición de la barra de herramientas controlada por el CoordinatorLayout?
- Eliminar etiquetas BottomNavigationView
- Establecimiento de la escucha de compensación en CollapsingToolbarLayout
- agrega onClickListener al encabezado de vista de navegación usando la biblioteca de soporte de diseño de android
-
content.height > screen.height
: funciona; Deslizar la parte superior / inferior se expande y contrae la barra de herramientas, así como el contenido de desplazamiento; -
content.height < screen.height
: no lo hace. Eso no es bueno, porque la mayoría de las veces(content.height + expandedToolbar.height) > screen.height
!
En otras palabras, cuando el contenido no es lo suficientemente alto, incluso si el contenido + extendedToolbar es mucho más alto que la pantalla entera , no reacciona a los gestos de desplazamiento y muestra algunos bugs – puede llevar diez gestos para contraer la barra de herramientas un poco. Así que apenas se puede llegar a la parte inferior del contenido, que se oculta en la parte inferior porque la barra de herramientas se expande.
¿Alguna solución?
Si desea probar, simplemente tome el proyecto de ejemplo cheesesquare y elimine (o reduzca) el contenido dentro de NestedScrollView
en activity_detail.xml [API17 aquí]
- Icono y texto de la pestaña utilizando la biblioteca de soporte de diseño de android
- TabLayout dentro de la barra de herramientas
- Biblioteca de soporte de diseño de Android con Theme.Material
- ¿Cómo crear un diseño de barra de herramientas doblado?
- Eliminar el foco de recyclerview dentro de Scrollview anidada
- Infla el menú en el tema de CollapsingToolbarLayout
- CollapsingToolbarLayout falla en los dispositivos 4.4 (java.lang.IllegalArgumentException: el radio debe ser> 0)
- Color FAB para el fondo No cambia en los dispositivos de versión de Gingerbread
El truco es añadir android:layout_gravity="fill_vertical"
al NestedScrollView
. De esta manera la barra de herramientas se derrumba y se amplía suavemente y reacciona a los gestos de desplazamiento para cualquier NestedScrollView
no vacía, sin importar su tamaño.
Por supuesto, si la vista de desplazamiento está vacía, la barra de herramientas no se contraerá desplazándose en la parte "contenido" de la pantalla. Pero eso no me parece tan malo.
Actualizar
Parece que esta solución tiene algunos problemas con contenidos más grandes, ya que la parte inferior del contenido permanecerá oculta. Podría encontrar que la parte oculta es (parece ser) tan grande como la altura de la barra de herramientas contraído. Esto facilita la definición de una solución: simplemente agregue un margen al fondo del ScrollView, para que se mida y libere la parte inferior oculta. Así:
android:layout_gravity="fill_vertical" android:layout_marginBottom="?attr/actionBarSize"
O el tamaño que le haya dado a la Toolbar
de Toolbar
en su vista. Tenga en cuenta que esta solución se ajusta bien con contenidos pequeños y grandes, pero el desplazamiento no es tan suave con los más pequeños.
Actualización2 (julio de 2015)
De las primeras pruebas, parece que este error se ha solucionado en la versión v22.2.1 de la Biblioteca de Diseño de Soporte.