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 是展開狀態還是折疊狀態,默認有動畫