Material Design (五) CollapsingToolbarLayout的使用

CollapsingToolbar可以實(shí)現(xiàn)這樣一種效果,在界面頂部顯示一張圖片(也可以是其他VIew),往上滑動(dòng)的時(shí)候圖片滑動(dòng)至消失,ToolBar出現(xiàn)在頂部顯示,往下滑動(dòng)則相反。第一次看見(jiàn)的時(shí)候覺(jué)得很 眼前一亮很酷的感覺(jué),然而現(xiàn)在只需要使用一些控件便可以實(shí)現(xiàn)這種效果

1.新建一個(gè)FruitActivity用來(lái)展示水果的詳細(xì)信息
新建布局文件activity_fruit_detail.xml

根布局還是用 我們的<android.support.design.widget.CoordinatorLayout/>,為了使圖片的位置可以達(dá)到系統(tǒng)狀態(tài)欄的位置,在根布局即這里的CoordinatorLayout控件中還是要添加屬性 android:fitsSystemWindows="true",而且把狀態(tài)欄的顏色設(shè)置為透明

和 Material Design (三) Navigation Drawer的使用中一樣,在values和values-21兩個(gè)文件夾下面的style文件中寫兩個(gè)名字一樣的style,把values-21下面的那個(gè)style 多一項(xiàng) <item name="android:statusBarColor">@android:color/transparent</item>

如果項(xiàng)目中多個(gè)地方用到同樣的設(shè)置,我們可以添加一個(gè)公用的 AppTheme.StatusBarTransparentTheme

這里的

<style name="AppTheme.StatusBarTransparentTheme">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>

相當(dāng)于

<style name="StatusBarTransparentTheme" parent="AppTheme">
<item name="android:statusBarColor">@android:color/transparent</item>
</style

在設(shè)置主題時(shí)要設(shè)置全名

<activity android:name=".FruitDetailActivity" android:theme="@style/AppTheme.StatusBarTransparentTheme"/>

在CoordinatorLayout中先放置一個(gè)<android.support.design.widget.AppBarLayout/>控件

在置于頂部<android.support.design.widget.AppBarLayout/>中放入一個(gè)<android.support.design.widget.CollapsingToolbarLayout/>控件

再往CollapsingToolbarLayout中依次放入<ImageView/> 和<android.support.v7.widget.Toolbar/>兩個(gè)控件。

<android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:fitsSystemWindows="true">
 
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">
 
            <ImageView
                android:id="@+id/fruit_image"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax" />
 
            <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>

app:contentScrim="?attr/colorPrimary" 設(shè)置toolBar顯示時(shí)的背景色
app:layout_scrollFlags="scroll|exitUntilCollapsed" 設(shè)置折疊方式

在一個(gè)AppBarLayout下放置<android.support.v4.widget.NestedScrollView/>控件

NestedScrollView中放界面展示的內(nèi)容,為了整體的Material Design效果,這里也用到CardView控件,NestedScrollView和CardView都是繼承FrameLayout

<android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="35dp"
            app:cardCornerRadius="4dp">
 
            <TextView
                android:id="@+id/fruit_content"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp" />
        </android.support.v7.widget.CardView>
    </android.support.v4.widget.NestedScrollView>

同樣在NestedScrollView中需要設(shè)置 app:layout_behavior="@string/appbar_scrolling_view_behavior"

我們可以在CoordinatorLayout中添加一個(gè)FloatingActionButton

設(shè)置app:layout_anchor="@id/app_bar_layout",是對(duì)FloatingActionButton的范圍的限制

<android.support.design.widget.FloatingActionButton
        android:id="@+id/float_action_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:src="@drawable/icon_share"
        app:layout_anchor="@id/app_bar_layout"
        app:layout_anchorGravity="bottom|end" />

完成后效果如圖所示


Material Design的學(xué)習(xí)暫時(shí)告一段落,雖然各家公司都有自己的app設(shè)計(jì)風(fēng)格,Material Design 不一定能用到所有的app中,但是這種設(shè)計(jì)風(fēng)格給Android帶來(lái)了風(fēng)格統(tǒng)一,動(dòng)畫(huà)流暢的良好視覺(jué)體驗(yàn),實(shí)現(xiàn)起來(lái)簡(jiǎn)單易行,在應(yīng)用市場(chǎng)上很多比較成功的app都已實(shí)現(xiàn)Material Design 的設(shè)計(jì),如印象筆記、隨筆記等等,所以我們可以多多嘗試Material Design給我們帶來(lái)的新體驗(yàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,598評(píng)論 25 708
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,991評(píng)論 2 59
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    wgl0419閱讀 6,360評(píng)論 1 9
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,579評(píng)論 2 45
  • 可悲的生活 就是我這樣的吧 該努力的時(shí)候沒(méi)有努力過(guò) 結(jié)果庸庸碌碌, 一切的煩惱都是因?yàn)槲翌櫦疤?猶豫不決 我知道...
    心想榮閱讀 132評(píng)論 0 0