工具栏不会以Scrollview作为CoordinatorLayout的子项折叠

我正在尝试关注使用CoordinatorLayout的Google文档,但是我在CoordinatorLayout中的ScrollView遇到问题。 基本上,当向下滚动时,工具栏通常会与一个RecyclerView或Listview崩溃。 现在用ScrollView它不会崩溃。

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

ScrollView CoordinatorLayout 。 你必须使用NestedScrollView而不是ScrollView

使用NestedScrollView作为协调器布局的子项折叠您的滚动视图。 用下面的代码replace你的代码:

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

你可以保留ScrollView并添加这个XML属性: android:nestedScrollingEnabled="true"所以它知道CoordinatorLayout是一个兄弟姐妹,并记住这个属性只支持棒棒糖版本及以上

实际的答案应该是CoordinatorLayout不适用于ScrollView ,因为ScrollView没有实现NestedScrollingChild接口。 NestedScrollView是一个带有NestedScrollingChild实现的ScrollView 。 如果你想了解更多关于嵌套滚动,我做了一个关于它的博客文章 。

使用NestedScrollView ,请使用NestedScrollView而不是常规的ScrollView

要使CollapsingToolbarLayout滚动,您可以通过将NestedScrollView的子布局的最小高度设置为* 1000dp来触发滚动行为

 android:minHeight="1000dp" 

布局:

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

* SupportDesignDemos示例: https : //github.com/android/platform_development/blob/master/samples/SupportDesignDemos/res/layout/include_appbar_scrollview.xml