使用AppBarLayout重叠滚动视图

我想从材质devise滚动技术 (如本video中)实施“具有重叠内容的灵活空间”模式: 灵活的空间与重叠的内容GIF

我的XML布局现在看起来像:

<android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="192dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v7.widget.Toolbar android:layout_height="?attr/actionBarSize" android:layout_width="match_parent" app:layout_collapseMode="pin"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <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"> <....> </LinearLayout> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> 

有没有简单的方法来完成这个使用devise库? 或者我必须build立一个自定义的CoordinatorLayout.Behavior来做到这一点?

实际上,使用AppBarLayout覆盖滚动视图是Androiddevise支持库的一个附加function:您可以在NestedScrollView (或使用ScrollingViewBehavior的任何View)上使用app:behavior_overlapTop属性来设置重叠量:

 <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:behavior_overlapTop="64dp"> 

请注意, app:behavior_overlapTop仅适用于具有以下app:layout_behavior="@string/appbar_scrolling_view_behavior"视图app:layout_behavior="@string/appbar_scrolling_view_behavior"因为它是使用属性的行为(不是视图或父视图组,因为属性通常适用),因此behavior_前缀。

或者通过setOverlayTop()以编程方式设置它:

 NestedScrollView scrollView = ... CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) scrollView.getLayoutParams(); AppBarLayout.ScrollingViewBehavior behavior = (AppBarLayout.ScrollingViewBehavior) params.getBehavior(); behavior.setOverlayTop(128); // Note: in pixels 

除了接受的答案之外 ,还可以在CollapsingToolbarLayout上调用setTitleEnabled(false),使标题保持固定在顶部,如示例中所示。

喜欢这个:

 CollapsingToolbarLayout.setTitleEnabled(false); 

或者像这样在xml中添加它:

 app:titleEnabled="false" 

否则,标题可能会消失在重叠的内容之后,除非当然,那就是你想要的行为。