ConstainLayout CoordinatorLayout AppbarLayout CollapsingToolbarLayout 我擦,有點蒙,穩(wěn)住,我們能贏。
1. ConstainLayout
約束布局,和后面幾個沒有任何聯(lián)系
2.CoordinatorLayout
CoordinatorLayout 是一個 “加強版” FrameLayout, 它主要有兩個用途:
- 用作應用的頂層布局管理器,也就是作為用戶界面中所有 UI 控件的容器;
- 用作相互之間具有特定交互行為的 UI 控件的容器,通過為 CoordinatorLayout 的子 View 指定 Behavior, 就可以實現(xiàn)它們之間的交互行為。 Behavior 可以用來實現(xiàn)一系列的交互行為和布局變化,比如說側(cè)滑菜單、可滑動刪除的 UI 元素,以及跟隨著其他 UI 控件移動的按鈕等。
其實總結出來就是 CoordinatorLayout 是一個布局管理器,相當于一個增強版的 FrameLayout,但是它神奇在于可以實現(xiàn)它的子 View 之間的交互行為。
3.AppBarLayout
AppBarLayout 是一個垂直的 LinearLayout,實現(xiàn)了 Material Design 中 App bar 的 Scrolling Gestures 特性。AppBarLayout 的子 View 應該聲明想要具有的“滾動行為”,這可以通過 layout_scrollFlags 屬性或是 setScrollFlags() 方法來指定。
AppBarLayout 只有作為 CoordinatorLayout 的直接子 View 時才能正常工作,為了讓 AppBarLayout 能夠知道何時滾動其子 View,我們還應該在 CoordinatorLayout 布局中提供一個可滾動 View,我們稱之為 Scrolling View。
Scrolling View 和 AppBarLayout 之間的關聯(lián),通過將 Scrolling View 的 Behavior 設為 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 通常用來在布局中包裹一個 Toolbar,以實現(xiàn)具有“折疊效果“”的頂部欄。它需要是 AppBarLayout 的直接子 View,這樣才能發(fā)揮出效果。
CollapsingToolbarLayout包含以下特性:
- Collasping title(可折疊標題):當布局完全可見時,這個標題比較大;當折疊起來時,標題也會變小。標題的外觀可以通過 expandedTextAppearance 和 collapsedTextAppearance 屬性來調(diào)整。
- Content scrim(內(nèi)容紗布):根據(jù) CollapsingToolbarLayout 是否滾動到一個臨界點,內(nèi)容紗布會顯示或隱藏??梢酝ㄟ^ setContentScrim(Drawable) 來設置內(nèi)容紗布。
Status bar scrim(狀態(tài)欄紗布):也是根據(jù)是否滾動到臨界點,來決定是否顯示??梢酝ㄟ^ setStatusBarScrim(Drawable) 方法來設置。這個特性只有在 Android 5.0 及其以上版本,我們設置 fitSystemWindows 為 ture 時才能生效。 - Parallax scrolling children(視差滾動子 View):子 View 可以選擇以“視差”的方式來進行滾動。(視覺效果上就是子 View 滾動的比其他 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>