1. 程式人生 > >CoordinatorLayout+AppBarLayout實現聯動

CoordinatorLayout+AppBarLayout實現聯動

CoordinatorLayout簡介


CoordinatorLayout is a super-powered FrameLayout.
CoordinatorLayout is intended for two primary use cases:
1.As a top-level application decor or chrome layout
2.As a container for a specific interaction with one or more child views

也就是作用就是作為頂層佈局,排程協調子佈局。
下面主要講Col和AppbarLayout組合使用的方法:


一、AppBarLayout巢狀TabLayout+viewpager


這種組合是經常使用的,一般就是使toolbar能跟隨viewpager裡面的滑動狀態實現聯動,達到隱藏的目的,需要注意的是:

  1. CoordinatorLayout作為佈局的父佈局容器。
  2. 給需要滑動的元件設定 app:layout_scrollFlags=”scroll|enterAlways” 屬性。
  3. 給滑動的元件設定app:layout_behavior屬性

佈局程式碼:


<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context="com.example.zhouyang.news_product.News_all"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView app:layout_scrollFlags="scroll|enterAlways" android:text="hello" android:gravity="center" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> <android.support.design.widget.TabLayout app:tabMode="scrollable" android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.design.widget.TabLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager app:layout_behavior= "@string/appbar_scrolling_view_behavior" android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v4.view.ViewPager> </android.support.design.widget.CoordinatorLayout>

app:layout_scrollFlags:在AppBarLayout中想要滑動的view裡面設定這個屬性
關於這個屬性有以下可選擇(可以組合使用):
1. scroll: 所有想滾動出螢幕的view都需要設定這個flag, 沒有設定這個flag的view將被固定在螢幕頂部。例如,TabLayout 沒有設定這個值,將會停留在螢幕頂部。
2.enterAlways: 設定這個flag時,向下的滾動都會導致該view變為可見,啟用快速“返回模式”。
3.enterAlwaysCollapsed: 當你的檢視已經設定minHeight屬性又使用此標誌時,你的檢視只能已最小高度進入,只有當滾動檢視到達頂部時才擴大到完整高度。
4.exitUntilCollapsed: 滾動退出螢幕,最後摺疊在頂端。


CoordinatorLayout包含的子檢視中帶有滾動屬性的View需要設定app:layout_behavior屬性。例如,示例中Viewpager設定了此屬性:app:layout_behavior=”@string/appbar_scrolling_view_behavior


總結:
為了使得View有滑動效果,必須做到如下三點:
1. CoordinatorLayout作為佈局的父佈局容器。
2. 給需要滑動的元件設定 app:layout_scrollFlags=”scroll|enterAlways” 屬性。
3. 給滑動的元件設定app:layout_behavior屬性


二、AppBarLayout巢狀CollapsingToolbarLayout


CollapsingToolbarLayout可實現Toolbar的摺疊效果。CollapsingToolbarLayout的子檢視類似與LinearLayout垂直方向排放。


程式碼:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:layout_width="match_parent"
        android:layout_height="256dp">
        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:contentScrim="@color/colorAccent"
            >
            <ImageView
                app:layout_collapseParallaxMultiplier="0.5"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@mipmap/ic_launcher"/>
            <android.support.v7.widget.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.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:paddingTop="24dp">
        <TextView
            android:text="helloooo"
            android:layout_width="match_parent"
            android:layout_height="200dp" />
            <TextView
                android:text="helloooo"
                android:layout_width="match_parent"
                android:layout_height="200dp" />
            <TextView
                android:text="helloooo"
                android:layout_width="match_parent"
                android:layout_height="200dp" />
            <TextView
                android:text="helloooo"
                android:layout_width="match_parent"
                android:layout_height="200dp" />
            <TextView
                android:text="helloooo"
                android:layout_width="match_parent"
                android:layout_height="200dp" />
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

d