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 可以用來(lái)實(shí)現(xiàn)一系列的交互行為和布局變化,比如說側(cè)滑菜單、可滑動(dòng)刪除的 UI 元素,以及跟隨著其他 UI 控件移動(dòng)的按鈕等。
其實(shí)總結(jié)出來(lái)就是 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() 方法來(lái)指定。
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 來(lái)建立。
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 通常用來(lái)在布局中包裹一個(gè) Toolbar,以實(shí)現(xiàn)具有“折疊效果“”的頂部欄。它需要是 AppBarLayout 的直接子 View,這樣才能發(fā)揮出效果。
CollapsingToolbarLayout包含以下特性:
- Collasping title(可折疊標(biāo)題):當(dāng)布局完全可見時(shí),這個(gè)標(biāo)題比較大;當(dāng)折疊起來(lái)時(shí),標(biāo)題也會(huì)變小。標(biāo)題的外觀可以通過 expandedTextAppearance 和 collapsedTextAppearance 屬性來(lái)調(diào)整。
- Content scrim(內(nèi)容紗布):根據(jù) CollapsingToolbarLayout 是否滾動(dòng)到一個(gè)臨界點(diǎn),內(nèi)容紗布會(huì)顯示或隱藏??梢酝ㄟ^ setContentScrim(Drawable) 來(lái)設(shè)置內(nèi)容紗布。
Status bar scrim(狀態(tài)欄紗布):也是根據(jù)是否滾動(dòng)到臨界點(diǎn),來(lái)決定是否顯示??梢酝ㄟ^ setStatusBarScrim(Drawable) 方法來(lái)設(shè)置。這個(gè)特性只有在 Android 5.0 及其以上版本,我們?cè)O(shè)置 fitSystemWindows 為 ture 時(shí)才能生效。 - Parallax scrolling children(視差滾動(dòng)子 View):子 View 可以選擇以“視差”的方式來(lái)進(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>