天天看點

Android CoordinatorLayout(一) 初探CoordinatorLayout

相信很多人用過CoordinatorLayout或了解過這個控件,這次我們來聊聊這個讓人又愛又恨的控件。對我來說,愛是因為它的“協調”功能灰常66666,很是因為有時候滑動真的是卡。

一、布局說明

好了,簡介什麼的我也就不想多逼逼,我們直接來看布局,很多人第一次接觸的時候不知道使用這個控件的布局為什麼要這樣做,我們來好好的分析一下。

1. 直接使用的情況
<android.support.design.widget.CoordinatorLayout android:id="@+id/main_content"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@color/colorAccent"/>

    <android.support.v7.widget.RecyclerView
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:id="@+id/rv_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
    
</android.support.design.widget.CoordinatorLayout>
           

現在我想單獨用CoordinatorLayout 來實作折疊的效果(注:CoordinatorLayout 的意思就是折疊布局),這個你會發現上面的代碼實作的效果如下:

Android CoordinatorLayout(一) 初探CoordinatorLayout

image.png

瞎JB扯淡,這哪有折疊的效果,這頂多就是一個FrameLayout,沒錯,如果僅僅單獨使用CoordinatorLayout ,它就是一個FrameLayout的效果,是以它要配合AppBarLayout和CollapsingToolbarLayout使用,這就是為什麼有CoordinatorLayout 總有AppBarLayout。

這也證明了CoordinatorLayout 的一個特性 -> 協調,它單獨拿來用沒用,他就是一個協調的作用。

2、CoordinatorLayout + Toolbar

額...... 雖然我用的都是自定義的标題欄,不用Toolbar,但是還是寫吧。

<android.support.design.widget.CoordinatorLayout android:id="@+id/main_content"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:fitsSystemWindows="true">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:id="@+id/rv_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>

</android.support.design.widget.CoordinatorLayout>
           

先不用管AppBarLayout,你就當成是需要折疊的控件都放到AppBarLayout中,然後RecyclerView中的 app:layout_behavior="@string/appbar_scrolling_view_behavior",你當這句話的意思是從讓view在AppBarLayout下,不加這句就還是FrameLayout的效果。

效果:

你寫按照這也的布局去寫,你會發現一個效果:

滑動前:

Android CoordinatorLayout(一) 初探CoordinatorLayout

滑動後:

Android CoordinatorLayout(一) 初探CoordinatorLayout

反正就是RecyclerView在Toolbar下面,但是滑動時Toolbar不會折疊。

這就需要說道一個重要的屬性了:

app:layout_scrollFlags

<android.support.v7.widget.Toolbar
            app:layout_scrollFlags="scroll"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
           

在你想要折疊的地方加上這個屬性之後才能折疊,這個屬性的詳細之後會講。

還有個屬性:fitsSystemWindows

這個屬性之後會講,這裡不設定也行。

繼續閱讀