Android開(kāi)發(fā) - AppBarLayout的使用

內(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í)就記錄這么多了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • 后來(lái),我總算學(xué)會(huì)了如何去愛(ài)可惜你早已遠(yuǎn)去消失在人海。有多少人真的是在后來(lái)才學(xué)會(huì)了愛(ài),可是那人卻已經(jīng)走遠(yuǎn)…...
    我叫林小小閱讀 679評(píng)論 0 0
  • 每天上班閑時(shí)間也多,不如在空閑的時(shí)間寫(xiě)寫(xiě)文字吧!還能提升一下自己 寫(xiě)這些文字的時(shí)候我應(yīng)該剛剛經(jīng)歷了一場(chǎng)成...
    a2fe3d8f488b閱讀 179評(píng)論 0 1
  • 我們?cè)谧顩](méi)有能力的時(shí)候總想干一些了不起的事,來(lái)證明我們的了不起……
    沐沐木sing閱讀 218評(píng)論 0 0

友情鏈接更多精彩內(nèi)容