內(nèi)容同步于我的博客:https://blog.bigrats.net/archives/android-dev-appbarlayout.html
AppBarLayout常與CollapsingToolbarLayout以及Toolbar一起使用,這三個(gè)View其實(shí)都是用以替換我們以往常用的ActionBar的。相較于ActionBar,Toolbar能夠?qū)崿F(xiàn)更加自由豐富酷炫的效果,例如隨Scroll隱藏等。
Toolbar
Toolbar的主要作用即替換ActionBar的功能,自然也就能完成ActionBar所能完成的所有效果。使用Toolbar時(shí)需隱藏ActionBar,在style.xml文件中的AppTheme標(biāo)簽中加入以下代碼:
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
或者也可以選擇將AppTheme設(shè)置為.NoActionBar來(lái)取消ActionBar。(在最新版的Android Studio中,已默認(rèn)采用Toolbar替代ActionBar)
然后將Toolbar放入布局文件中:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
與ActionBar不同的是,我們可以自定義Toolbar的位置和行為。下面引入的AppBarLayout與Toolbar結(jié)合能夠做出更好的效果。
AppBarLayout
當(dāng)某個(gè)ScrollView發(fā)生滾動(dòng)時(shí),可以通過(guò)AppBarLayout定制你的Toolbar的行為,例如跟隨滾動(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/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>
其中app:layout_scrollFlags有四種取值:
- scroll:跟隨View的滾動(dòng)事件一起滾動(dòng)
- enterAlways:當(dāng)ScrollView向下移動(dòng)時(shí)則向下滾動(dòng),不關(guān)心ScrollView是否滾動(dòng)
- exitUntilCollapsed:向上滑動(dòng)時(shí),首先是ScrollView跟隨Toolbar向上滑動(dòng),直到Toolbar達(dá)到最小寬度ScrollView開(kāi)始滾動(dòng)。
- enterAlwaysCollapsed:向下滑動(dòng)時(shí),首先是enterAlways效果,當(dāng)ScrollView的高度達(dá)到最小高度時(shí),Toolbar停止滑動(dòng),直到ScrollView不再滑動(dòng)時(shí),Toolbar繼續(xù)滑動(dòng)直到結(jié)束。
此時(shí)Toolbar還不能與ScrollView一起滑動(dòng),我們還需要將它們關(guān)聯(lián)起來(lái)。在CoordinateLayout中我們可以自定義behavior以達(dá)到此效果,但是較為麻煩,好在Android已內(nèi)置此函數(shù),我們可以直接調(diào)用即可:
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- Your Code Here -->
</android.support.v4.widget.NestedScrollView>
暫時(shí)就記錄這么多了。