J'essaie de suivre les documents Google sur l'utilisation de CoordinatorLayout, mais je rencontre un problème avec ScrollView dans CoordinatorLayout. Fondamentalement, la barre d’outils s’effondrerait normalement avec un RecyclerView ou une ListView lors du défilement. Maintenant, avec un ScrollView, il ne sera pas réduit.
<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>
Le ScrollView
ne coopère pas avec le CoordinatorLayout
. Vous devez utiliser NestedScrollView
au lieu de ScrollView
Utilisez NestedScrollView pour réduire votre vue défilement en tant qu'enfant de la disposition de coordinateur. Remplacez votre code par ce code:
<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>
Vous pouvez conserver le ScrollView
et ajouter cette propriété XML: Android:nestedScrollingEnabled="true"
donc il connaît le CoordinatorLayout en tant que frère et garde à l'esprit que cette propriété est prise en charge uniquement dans Lollipop version et au-dessus.
Utilisez un NestedScrollView
au lieu d'un ScrollView
normal lorsque vous utilisez CoordinatorLayout
.
Pour faire défiler le
CollapsingToolbarLayout
, vous pouvez déclencher le comportement de défilement en définissant une hauteur minimale de la disposition enfant duNestedScrollView
à * 1000dp.Android:minHeight="1000dp"
Disposition:
<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>
* Exemple de SupportDesignDemos ici: https://github.com/Android/platform_development/blob/master/samples/SupportDesignDemos/res/layout/include_appbar_scrollview.xml
La réponse réelle devrait être que CoordinatorLayout
ne fonctionne pas avec ScrollView
, parce que ScrollView
ne met pas en œuvre NestedScrollingChild interface. NestedScrollView
est un ScrollView
avec NestedScrollingChild
implémentation. Si vous voulez en savoir plus sur le défilement imbriqué, j'ai fait un blog post à ce sujet.