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