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:

  • 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í]

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.

  • Android - El menú de desbordamiento y el botón Atrás no aparecen en la barra de herramientas de despliegue
  • Barra de herramientas "Oculto" visible debajo de la barra de estado
  • Personalizar el relleno entre los elementos del menú Vista de navegación
  • AppCompatSeekBar eliminación de relleno izquierdo y derecho?
  • Cómo obtener la posición del elemento seleccionado actual usando TabLayout en Android Design Library
  • No se puede usar srcCompat para ImageViews en android
  • TabLayout pestaña de pestaña seleccionada
  • Cómo cambiar la posición de etiqueta flotante de TextInputLayout en android
  • BottomSheetDialogFragment - Cómo configurar la altura expandida (o el desplazamiento de la parte superior del min)
  • Cómo mostrar el indicador de pestaña en la parte superior de las pestañas
  • El texto de error en TextInputLayout está cubierto por el teclado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.