ConstainLayout CoordinatorLayout AppbarLayout CollapsingToolbarLayout 我擦座舍,有點(diǎn)蒙扎拣,穩(wěn)住腌歉,我們能贏依痊。
1. ConstainLayout
約束布局避除,和后面幾個(gè)沒有任何聯(lián)系
2.CoordinatorLayout
CoordinatorLayout 是一個(gè) “加強(qiáng)版” FrameLayout, 它主要有兩個(gè)用途:
- 用作應(yīng)用的頂層布局管理器胸嘁,也就是作為用戶界面中所有 UI 控件的容器;
- 用作相互之間具有特定交互行為的 UI 控件的容器瓶摆,通過為 CoordinatorLayout 的子 View 指定 Behavior, 就可以實(shí)現(xiàn)它們之間的交互行為性宏。 Behavior 可以用來實(shí)現(xiàn)一系列的交互行為和布局變化群井,比如說側(cè)滑菜單、可滑動(dòng)刪除的 UI 元素毫胜,以及跟隨著其他 UI 控件移動(dòng)的按鈕等书斜。
其實(shí)總結(jié)出來就是 CoordinatorLayout 是一個(gè)布局管理器,相當(dāng)于一個(gè)增強(qiáng)版的 FrameLayout酵使,但是它神奇在于可以實(shí)現(xiàn)它的子 View 之間的交互行為荐吉。
3.AppBarLayout
AppBarLayout 是一個(gè)垂直的 LinearLayout,實(shí)現(xiàn)了 Material Design 中 App bar 的 Scrolling Gestures 特性口渔。AppBarLayout 的子 View 應(yīng)該聲明想要具有的“滾動(dòng)行為”稍坯,這可以通過 layout_scrollFlags 屬性或是 setScrollFlags() 方法來指定。
AppBarLayout 只有作為 CoordinatorLayout 的直接子 View 時(shí)才能正常工作,為了讓 AppBarLayout 能夠知道何時(shí)滾動(dòng)其子 View瞧哟,我們還應(yīng)該在 CoordinatorLayout 布局中提供一個(gè)可滾動(dòng) View混巧,我們稱之為 Scrolling View。
Scrolling View 和 AppBarLayout 之間的關(guān)聯(lián)勤揩,通過將 Scrolling View 的 Behavior 設(shè)為 AppBarLayout.ScrollingViewBehavior 來建立咧党。
AppBarLayout + CoordinatorLayout使用
<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:id="@+id/toolbar"
android:title="AppBarLayout"
app:layout_scrollFlags="scroll|enterAlways"
android:layout_height="wrap_content"></android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:id="@+id/recycler"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</android.support.design.widget.CoordinatorLayout>
4.CollapsingToolbarLayout
CollapsingToolbarLayout 通常用來在布局中包裹一個(gè) Toolbar,以實(shí)現(xiàn)具有“折疊效果“”的頂部欄陨亡。它需要是 AppBarLayout 的直接子 View傍衡,這樣才能發(fā)揮出效果。
CollapsingToolbarLayout包含以下特性:
- Collasping title(可折疊標(biāo)題):當(dāng)布局完全可見時(shí)负蠕,這個(gè)標(biāo)題比較大蛙埂;當(dāng)折疊起來時(shí),標(biāo)題也會(huì)變小遮糖。標(biāo)題的外觀可以通過 expandedTextAppearance 和 collapsedTextAppearance 屬性來調(diào)整绣的。
- Content scrim(內(nèi)容紗布):根據(jù) CollapsingToolbarLayout 是否滾動(dòng)到一個(gè)臨界點(diǎn),內(nèi)容紗布會(huì)顯示或隱藏欲账÷沤可以通過 setContentScrim(Drawable) 來設(shè)置內(nèi)容紗布。
Status bar scrim(狀態(tài)欄紗布):也是根據(jù)是否滾動(dòng)到臨界點(diǎn)赛不,來決定是否顯示惩嘉。可以通過 setStatusBarScrim(Drawable) 方法來設(shè)置踢故。這個(gè)特性只有在 Android 5.0 及其以上版本文黎,我們?cè)O(shè)置 fitSystemWindows 為 ture 時(shí)才能生效。 - Parallax scrolling children(視差滾動(dòng)子 View):子 View 可以選擇以“視差”的方式來進(jìn)行滾動(dòng)殿较。(視覺效果上就是子 View 滾動(dòng)的比其他 View 稍微慢些)
- Pinned position children:子 View 可以選擇固定在某一位置上耸峭。
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="256dp"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="#30469b"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@mipmap/ic_launcher"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.7" />
<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.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"></android.support.v7.widget.RecyclerView>
</android.support.design.widget.CoordinatorLayout>