Android Design - 可折疊的ToolBar

先看效果

demo

開始使用

1. 引入

compile 'com.android.support:design:27.1.1'

2. 布局結(jié)構(gòu)

<android.support.design.widget.CoordinatorLayout >

    <android.support.design.widget.AppBarLayout >

        <android.support.design.widget.CollapsingToolbarLayout >
            
            <ImageView />

            <android.support.v7.widget.Toolbar />
            
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView >
    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton />

</android.support.design.widget.CoordinatorLayout>
  • CoordinatorLayout :用來(lái)協(xié)調(diào)UI中 View 的滾動(dòng)曼追;
  • AppBarLayout :AppBar
  • CollapsingToolbarLayout :折疊布局
  • ImageView :背景圖片
  • Toolbar :最終被折疊起來(lái)的 Toolbar
  • NestedScrollView 頁(yè)面的主要內(nèi)容
  • FloatingActionButton 右上角的懸浮按鈕

3. 完整布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_collapseParallaxMultiplier="0.9">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/ctl"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorAccent"
            app:expandedTitleMarginEnd="15dp"
            app:expandedTitleMarginStart="15dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/iv_cover"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/ic_launcher_background" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin" />
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="15dp">

            <android.support.v7.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_marginBottom="10dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="1" />
            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_marginBottom="10dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="2" />
            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_marginBottom="10dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="3" />
            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_marginBottom="10dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="4" />
            </android.support.v7.widget.CardView>
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:id="@+id/faBtn"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:src="@android:drawable/sym_action_email"
        app:layout_anchor="@id/appBar"
        app:layout_anchorGravity="bottom|right|end" />
</android.support.design.widget.CoordinatorLayout>

4. 幾個(gè)重要的屬性

  1. CoordinatorLayout 的屬性
  • app:layout_collapseParallaxMultiplier="0.9" :控制滑動(dòng)時(shí)的視覺差,取值范圍 0~1
  1. AppBarLayout 的屬性
  • android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" :可控制返回按鈕以及 title 字體的顏色
  1. CollapsingToolbarLayout 的屬性
  • contentScrim : 折疊后剑辫,Toolbar 的背景顏色
  • layout_scrollFlags :CollapsingToolbarLayout 滾動(dòng)的模式包斑,layout_scrollFlags 有如下幾種選項(xiàng):
    • scroll :想要 CollapsingToolbarLayout 滾出屏幕流礁,必須設(shè)置該值,否則 CollapsingToolbarLayout 將被固定在屏幕頂部
    • exitUntilCollapsed :上滑罗丰,折疊在屏幕頂端神帅,繼續(xù)上滑,CollapsingToolbarLayout 下面的 View 才會(huì)退出屏幕萌抵;下滑枕稀,CollapsingToolbarLayout 下面的 View 逐漸進(jìn)入屏幕,繼續(xù),CollapsingToolbarLayout 才會(huì)展開萎坷;
    • enterAlwaysCollapsed :與 exitUntilCollapsed 類似凹联,但是折疊后不會(huì)固定在屏幕頂部;
    • snap :與 enterAlwaysCollapsed 的最終效果一樣哆档,但是沒有漸變過程蔽挠,上滑,逐漸滾出屏幕瓜浸,中間沒有停留澳淑,下滑,逐漸中展開插佛,中間沒有停留杠巡;
    • enterAlways :上滑,與 enterAlwaysCollapsed 一樣的效果雇寇,下滑氢拥,先展開 CollapsingToolbarLayout,之后其下面的 View 才會(huì)進(jìn)入屏幕锨侯;
    • 常用組合
"scroll|exitUntilCollapsed"
"scroll|enterAlwaysCollapsed"
"scroll|snap"
"scroll|enterAlways"
  • app:expandedTitleMarginStart="15dp" :展開時(shí)嫩海,標(biāo)題距離屏幕開始的位置,此外還有:
app:expandedTitleMarginStart
app:expandedTitleMargin
app:expandedTitleMarginBottom
app:expandedTitleMarginEnd
  1. Toolbar
  • app:layout_collapseMode="pin" :Toolbar 的折疊模式囚痴,有3種取值:
    • pin :固定模式叁怪,在折疊的時(shí)候最后固定在頂端;
    • parallax :視差模式,在折疊的時(shí)候會(huì)有個(gè)視差折疊的效果深滚;
    • none :隨著滑動(dòng)滾出屏幕奕谭;
  1. NestedScrollView
  • app:layout_behavior="@string/appbar_scrolling_view_behavior" :通知布局中包含滑動(dòng)組件,很重要痴荐!如果不設(shè)置血柳,View 的滾動(dòng)的將會(huì)出現(xiàn)混亂
  1. FloatingActionButton
  • app:layout_anchor="@id/appBar" :錨點(diǎn)
  • app:layout_anchorGravity="bottom|right|end" 在錨點(diǎn)的位置

源碼:
布局 activity_002_collapsing_toolbar_layout
_002_CollapsingToolbarLayout

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蹬昌,隨后出現(xiàn)的幾起案子混驰,更是在濱河造成了極大的恐慌,老刑警劉巖皂贩,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栖榨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡明刷,警方通過查閱死者的電腦和手機(jī)婴栽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辈末,“玉大人愚争,你說(shuō)我怎么就攤上這事映皆。” “怎么了轰枝?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵捅彻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鞍陨,道長(zhǎng)步淹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任诚撵,我火速辦了婚禮缭裆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寿烟。我一直安慰自己澈驼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布筛武。 她就那樣靜靜地躺著缝其,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畅铭。 梳的紋絲不亂的頭發(fā)上氏淑,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天勃蜘,我揣著相機(jī)與錄音硕噩,去河邊找鬼。 笑死缭贡,一個(gè)胖子當(dāng)著我的面吹牛炉擅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阳惹,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谍失,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了莹汤?” 一聲冷哼從身側(cè)響起快鱼,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纲岭,沒想到半個(gè)月后抹竹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡止潮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年窃判,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了放椰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片设塔。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖杆融,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唆樊,我是刑警寧澤宛琅,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站逗旁,受9級(jí)特大地震影響夯秃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痢艺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一仓洼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堤舒,春花似錦色建、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至国撵,卻和暖如春陵吸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背介牙。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工壮虫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人环础。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓囚似,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親线得。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饶唤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容