1. AppBarLayout类
AppBarLayout
是5.0版本出现的控件,是一种支持响应滚动手势的app bar布局。
与AppBarLayout
组合的滚动布局(RecyclerView
、NestedScrollView
等),需要设置
app:layout_behavior = "@string/appbar_scrolling_view_behavior"
配置文件,
<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="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:minHeight="25dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="title"
android:textSize="25sp"
android:gravity="center" />
</android.support.v7.widget.Toolbar>
</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="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="item1"
android:layout_marginLeft="15dp"
android:gravity="center_vertical" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
2. layout_scrollFlags配置
在AppBarLayout
的子视图中配置不同layout_scrollFlags
属性,会产生不同的效果。
- 不设置
Toolbar
在顶部不动,滑动只发生在NestedScrollView
内部。
- 设置为
scroll
Toolbar
随着手势一起滑动。
- 设置为
enterAlways
enterAlways
必须和scroll
一起使用。在向上滑动时和scroll
一样,但向下时,Toolbar
先进入屏幕。
- 设置为
enterAlwaysCollapsed
enterAlwaysCollapsed
必须和enterAlways
一起使用,且Toolbar
设置minHeight
。在向上滑动时和scroll
一样,但向下时Toolbar
先进入,但只显示minHeight
高度。
- 设置为
exitUntilCollapsed
exitUntilCollapsed
必须和scroll
一起使用,且Toolbar
设置minHeight
。滚动效果与scroll
类似,只是Toolbar
会固定在最上方,但只显示minHeight
高度。
- 设置为
snap
snap
必须和scroll
一起使用。向上滑动一小段距离,Toolbar
自动滑出屏幕。向下滑动一段距离,Toolbar
自动滑进屏幕。
3. 代码设置
可以通过AppBarLayout
的LayoutParams
设置滚动效果。
AppBarLayout.LayoutParams lp = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
// SCROLL_FLAG_SCROLL
// SCROLL_FLAG_ENTER_ALWAYS
// SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED
// SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
// SCROLL_FLAG_SNAP
lp.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_xx);
toolbar.setLayoutParams(lp);
4. 多子视图
AppBarLayout
可以设置多个子视图的layout_scrollFlags
属性
<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="50dp"
app:layout_scrollFlags="scroll"
android:minHeight="25dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="title"
android:textSize="25sp"
android:gravity="center" />
</android.support.v7.widget.Toolbar>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"
android:text="ToolTips"
android:gravity="center" />
</android.support.design.widget.AppBarLayout>
效果如下