AppBarLayout简介
- AppBarLayout是继承LinearLayout实现的一个ViewGroup容器组件,布局方向为垂直方向。AppBarLayout是在LinearLayout上加了一些材料设计概念,它可以让你定制当某个可滚动View的滚动手势发生变化时,其内部的子View实现何种操作
- 简单来说就是当某个ScrollView发生滚动时,可以定制顶部栏应该执行哪些动作
AppBarLayout子View的动作
- 内部的子view通过在布局中加app:layout_scrollFlags 设置执行动作
- scroll:设置为scroll的view会随着滚动事件一起发生移动
<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="?android:attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll" />
</android.support.design.widget.AppBarLayout>
![Uploading 2154124-3be36f546d6f5bbd_167511.gif . . .]
- enterAlways
子View添加layout_scrollFlags属性的值是enterAlways时,当ScrollView向下滑动时,子View将直接向下移动,而不管ScrollView是否在滑动。注意:要与Scroll搭配使用
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="AppbarLayout"
app:titleTextColor="@color/white"
app:layout_scrollFlags="scroll|enterAlways"
/>
- enterAlwaysCollapsed
enterAlwaysCollapsed 是对enterAlways 的补充,当ScrollView 向下滑动的时候,滑动View(也就是设置了enterAlwaysCollapsed 的View)下滑至折叠的高度,当ScrollView 到达滑动范围的结束值的时候,滑动View剩下的部分开始滑动。这个折叠的高度是通过View的minimum height (最小高度)指定的。
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="200dp"
android:minHeight="?attr/actionBarSize"
app:title="AppbarLayout"
android:gravity="bottom"
android:layout_marginBottom="25dp"
app:titleTextColor="@color/white"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
/>
- exitUntilCollapsed
当ScrollView 滑出屏幕时(也就时向上滑动时),滑动View先响应滑动事件,滑动至折叠高度,也就是通过minimum height 设置的最小高度后,就固定不动了,再把滑动事件交给 scrollview 继续滑动。
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="200dp"
android:minHeight="?attr/actionBarSize"
app:title="AppbarLayout"
android:gravity="bottom"
app:titleTextColor="@color/white"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
/>
- snap
意思是:在滚动结束后,如果view只是部分可见,它将滑动到最近的边界。比如,如果view的底部只有25%可见,它将滚动离开屏幕,而如果底部有75%可见,它将滚动到完全显示。
** 解释:可能这段话有点难懂,解释一下,就是说,比如在屏幕的顶部有个View ,高度200dp,我向上滑动40%后停止,也就 40% 滑出了屏幕,剩下的60%留在屏幕,那么这个属性就会自动将屏幕外的40% 滑回屏幕,结果的整个View都留在屏幕上,相反,如果我向上将60%的部分滑出屏幕,然后停止滑动,那么这个属性会将剩下的40% 也自动滑出屏幕,结果是整个View都在屏幕之外。这就是上面所说的滑动到最近的边界。**
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="200dp"
android:minHeight="?attr/actionBarSize"
app:title="AppbarLayout"
android:gravity="bottom"
app:titleTextColor="@color/white"
app:layout_scrollFlags="scroll|snap"
/>
AppbarLayout 的几个重要方法
介绍一下AppbarLayout几个常用且重要的方法
addOnOffsetChangedListener 当AppbarLayout 的偏移发生改变的时候回调,也就是子View滑动。
getTotalScrollRange 返回AppbarLayout 所有子View的滑动范围
removeOnOffsetChangedListener 移除监听器
setExpanded (boolean expanded, boolean animate)设置AppbarLayout 是展开状态还是折叠状态,animate 参数控制切换到新的状态时是否需要动画
setExpanded (boolean expanded) 设置AppbarLayout 是展开状态还是折叠状态,默认有动画