由于RecyclerView,Toolbar现在都是CoordinatorLayout的子控件,而CoordinatorLayout又是FrameLayout的加强版,所以RecylerView会覆盖Toolbar可使用AppBarLayout来解决
- AppBarLayout
Design Support库中的工具,实际上是一个垂直方向的LinearLayout,在内部做了很多滚动事件的封装,并应用了Material Design的设计理念
使用方法
第一步,将Toolbar嵌套到AppBarLayout中,第二步给RecyclerView指定一个布局行为
<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"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways|snap"/>
</android.support.design.widget.AppBarLayout>
app:layout_behavior="@string/appbar_scrolling_view_behavior">
当AppBarLayout接收到滚动事件时其内部的子控件可指定如何去影响这些事件,通过app:layout_scrollFlags属性来实现
RecyclerView发出滚动事件(通过设置行为),AppBarLayout接收到滚动事件,指定AppBarLayout的子控件发生怎样的变化
app:layout_scrollFlags="scroll|enterAlways|snap"
scroll:RecyclerView向上滚动时,Toolbar会跟着一起向上滚动并实现隐藏
enterAlways:RecyclerView向下滚动时,Toolbar会跟着一起向下滚动并重新显示
snap:当Toolbar还没有完全隐藏或显示时,会根据当前滚动距离自动选择隐藏或者显示