layout_collapsemode coordinatorlayout collapsing appbar_scrolling_view_behavior android toolbar android-scrollview android-toolbar coordinator-layout

android - coordinatorlayout - layout_collapsemode



La barra de herramientas no colapsará con Scrollview como elemento secundario de CoordinatorLayout (5)

Estoy tratando de seguir los Documentos de Google sobre el uso de CoordinatorLayout, pero tengo un problema con ScrollView dentro de CoordinatorLayout. Básicamente, la barra de herramientas normalmente colapsaría con una vista de reciclaje o una vista de lista al desplazarse hacia abajo. Ahora con un ScrollView no colapsará.

<android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <TextView android:id="@+id/tv_View" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:gravity="center" android:text="@string/filler" style="@style/TextAppearance.AppCompat.Large" /> </ScrollView> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>


La respuesta real debería ser que CoordinatorLayout no funciona con ScrollView , porque ScrollView no está implementando la interfaz NestedScrollingChild . NestedScrollView es un ScrollView con implementación NestedScrollingChild . Si desea obtener más información sobre el desplazamiento anidado, hice una publicación de blog al respecto.


Puede mantener ScrollView y agregar esta propiedad XML: android:nestedScrollingEnabled="true" para que sepa que CoordinatorLayout es un hermano y tenga en cuenta que esta propiedad solo es compatible con la versión de lollipop y superiores .


Use NestedScrollView para contraer su vista de desplazamiento como elemento secundario del diseño del coordinador. Reemplace su código con este código:

<android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_View" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:gravity="center" android:text="@string/filler" style="@style/TextAppearance.AppCompat.Large" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>


Use un NestedScrollView lugar de un ScrollView normal cuando use CoordinatorLayout .

Para realizar el desplazamiento CollapsingToolbarLayout , puede activar el comportamiento del desplazamiento estableciendo una altura mínima del diseño secundario de NestedScrollView en * 1000dp.

android:minHeight="1000dp"

Diseño:

<android.support.v4.widget.NestedScrollView app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!--to trigger scroll behavior--> <LinearLayout android:minHeight="1000dp"/> </android.support.v4.widget.NestedScrollView>

* Ejemplo de SupportDesignDemos aquí: https://github.com/android/platform_development/blob/master/samples/SupportDesignDemos/res/layout/include_appbar_scrollview.xml


ScrollView no coopera con CoordinatorLayout . Tienes que usar NestedScrollView lugar de ScrollView