AppBarLayout簡(jiǎn)介
- AppBarLayout是繼承LinearLayout實(shí)現(xiàn)的一個(gè)ViewGroup容器組件擂煞,布局方向?yàn)榇怪狈较蚓瘛ppBarLayout是在LinearLayout上加了一些材料設(shè)計(jì)概念,它可以讓你定制當(dāng)某個(gè)可滾動(dòng)View的滾動(dòng)手勢(shì)發(fā)生變化時(shí)茬底,其內(nèi)部的子View實(shí)現(xiàn)何種操作
- 簡(jiǎn)單來(lái)說(shuō)就是當(dāng)某個(gè)ScrollView發(fā)生滾動(dòng)時(shí)征绎,可以定制頂部欄應(yīng)該執(zhí)行哪些動(dòng)作
AppBarLayout子View的動(dòng)作
- 內(nèi)部的子view通過(guò)在布局中加app:layout_scrollFlags 設(shè)置執(zhí)行動(dòng)作
- scroll:設(shè)置為scroll的view會(huì)隨著滾動(dòng)事件一起發(fā)生移動(dòng)
<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時(shí),當(dāng)ScrollView向下滑動(dòng)時(shí)昔善,子View將直接向下移動(dòng)元潘,而不管ScrollView是否在滑動(dòng)。注意:要與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 是對(duì)enterAlways 的補(bǔ)充君仆,當(dāng)ScrollView 向下滑動(dòng)的時(shí)候柬批,滑動(dòng)View(也就是設(shè)置了enterAlwaysCollapsed 的View)下滑至折疊的高度,當(dāng)ScrollView 到達(dá)滑動(dòng)范圍的結(jié)束值的時(shí)候袖订,滑動(dòng)View剩下的部分開(kāi)始滑動(dòng)氮帐。這個(gè)折疊的高度是通過(guò)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
當(dāng)ScrollView 滑出屏幕時(shí)(也就時(shí)向上滑動(dòng)時(shí))洛姑,滑動(dòng)View先響應(yīng)滑動(dòng)事件上沐,滑動(dòng)至折疊高度,也就是通過(guò)minimum height 設(shè)置的最小高度后楞艾,就固定不動(dòng)了参咙,再把滑動(dòng)事件交給 scrollview 繼續(xù)滑動(dòng)。
<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
意思是:在滾動(dòng)結(jié)束后硫眯,如果view只是部分可見(jiàn)蕴侧,它將滑動(dòng)到最近的邊界。比如两入,如果view的底部只有25%可見(jiàn)净宵,它將滾動(dòng)離開(kāi)屏幕,而如果底部有75%可見(jiàn)裹纳,它將滾動(dòng)到完全顯示择葡。
** 解釋:可能這段話有點(diǎn)難懂,解釋一下剃氧,就是說(shuō)敏储,比如在屏幕的頂部有個(gè)View ,高度200dp,我向上滑動(dòng)40%后停止朋鞍,也就 40% 滑出了屏幕已添,剩下的60%留在屏幕,那么這個(gè)屬性就會(huì)自動(dòng)將屏幕外的40% 滑回屏幕滥酥,結(jié)果的整個(gè)View都留在屏幕上更舞,相反,如果我向上將60%的部分滑出屏幕恨狈,然后停止滑動(dòng)疏哗,那么這個(gè)屬性會(huì)將剩下的40% 也自動(dòng)滑出屏幕,結(jié)果是整個(gè)View都在屏幕之外。這就是上面所說(shuō)的滑動(dòng)到最近的邊界返奉。**
<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 的幾個(gè)重要方法
介紹一下AppbarLayout幾個(gè)常用且重要的方法
addOnOffsetChangedListener 當(dāng)AppbarLayout 的偏移發(fā)生改變的時(shí)候回調(diào)贝搁,也就是子View滑動(dòng)。
getTotalScrollRange 返回AppbarLayout 所有子View的滑動(dòng)范圍
removeOnOffsetChangedListener 移除監(jiān)聽(tīng)器
setExpanded (boolean expanded, boolean animate)設(shè)置AppbarLayout 是展開(kāi)狀態(tài)還是折疊狀態(tài)芽偏,animate 參數(shù)控制切換到新的狀態(tài)時(shí)是否需要?jiǎng)赢?huà)
setExpanded (boolean expanded) 設(shè)置AppbarLayout 是展開(kāi)狀態(tài)還是折疊狀態(tài),默認(rèn)有動(dòng)畫(huà)