一文徹底搞懂CoordinatorLayout 和 AppbarLayout 聯(lián)動

ConstainLayout CoordinatorLayout AppbarLayout CollapsingToolbarLayout 我擦,有點蒙,穩(wěn)住,我們能贏。

1. ConstainLayout

約束布局,和后面幾個沒有任何聯(lián)系

2.CoordinatorLayout

CoordinatorLayout 是一個 “加強版” FrameLayout, 它主要有兩個用途:

  1. 用作應用的頂層布局管理器,也就是作為用戶界面中所有 UI 控件的容器;
  2. 用作相互之間具有特定交互行為的 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使用
demo1.gif
demo1.gif
<?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 可以選擇固定在某一位置上。
demo2.gif
<?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>
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容