天天看點

android滾動标題欄,Android 使用CoordinatorLayout實作滾動标題欄效果的執行個體

在Material Design裡,CoordinatorLayout通常用來作為頂層視圖,來協調處理各個子View之間的動作,進而實作各種動畫效果,如Snackbar與FloatingActionButton的配合顯示效果,就是以CoordinatorLayout作為根布局來實作的

CoordinatorLayout提供Behaviors接口,子View通過實作Behaviors接口來協調和其它View之間的顯示效果,可以這麼了解:

CoordinatorLayout讓其子View之間互相知道彼此的存在,任意一個子View的狀态變化會通過Behaviors通知其它子View,CoordinatorLayout就像一個橋梁,連接配接不同的View,并使用Behavior處理各個子View之間的通信

效果一:

android滾動标題欄,Android 使用CoordinatorLayout實作滾動标題欄效果的執行個體

想實作這樣的效果挺簡單的,主要是在xml布局檔案中進行設定

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:layout_width="match_parent"

android:layout_height="wrap_content"

android:theme="@style/ThemeOverlay.AppCompat">

android:id="@+id/tb_toolbar"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:navigationIcon="@android:drawable/ic_dialog_email"

app:title="Title"

app:layout_scrollFlags="scroll" />

android:id="@+id/tab_layout"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:tabMode="fixed"

app:layout_scrollFlags="scroll|enterAlways"/>

android:id="@+id/vp_tab_pager"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

首先給被AppBarLayout包裹的View添加app:layout_scrollFlags屬性,并設定相應的值

• scroll:讓該View可以滾動出螢幕

• enterAlways:不需要滾動到頂部,隻要有向上滾動的事件就顯示該View

• enterAlwaysCollapsed:定義該View何時進入,如果你定義了一個最小高度minHeight,同時enterAlways也定義了,那麼該View将會在到達這個最小高度的時候開始慢慢顯示,直到滾動元件滾動到頂部時再完全展開

• exitUntilCollapsed:定義該View何時退出,如果你定義了一個最小高度minHeight,那麼這個View将在滾動到達這個最小高度時消失

如果不設定layout_scrollFlags屬性,那麼該View就會固定在螢幕上

enterAlwaysCollapsed和exitUntilCollapsed屬性主要是在搭配CollapsingToolbarLayout時使用的

注意:布局的時候,AppBarLayout裡面滾動的View要放在固定的View上面

然後在CoordinatorLayout布局裡放一個可以滾動的View(不支援ListView),這裡使用ViewPager裡放置一個RecylerView,為該ViewPager設定app:layout_behavior屬性,這裡可直接使用Android自帶的值

app:layout_behavior=”@string/appbar_scrolling_view_behavior”

設定該值的作用相當于告訴CoordinatorLayout,此View是一個滾動控件,如果該View滾動了,那麼設定了layout_scrollFlags屬性的控件就可以響應滾動事件了

想實作效果一,總結

使用CoordinatorLayout作為根布局

使用AppBarLayout包裹頭部View,并給需要滾動的View設定app:layout_scrollFlags屬性

給滑動元件設定app:layout_behavior屬性

效果二:

android滾動标題欄,Android 使用CoordinatorLayout實作滾動标題欄效果的執行個體

想實作這個效果,需要使用到CollapsingToolbarLayout布局,我們在效果一的基礎上更改布局代碼

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:layout_width="match_parent"

android:layout_height="300dp"

android:fitsSystemWindows="true"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

android:id="@+id/collapsing_toolbar"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:contentScrim="?attr/colorPrimary"

app:expandedTitleMarginEnd="88dp"

app:expandedTitleMarginStart="66dp"

app:layout_scrollFlags="scroll|exitUntilCollapsed">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scaleType="centerCrop"

android:src="@drawable/bg_image"

app:layout_collapseMode="pin"/>

android:id="@+id/tb_toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

app:layout_collapseMode="pin"

app:navigationIcon="@android:drawable/ic_dialog_email"

app:title="Title"/>

android:id="@+id/rv_data"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

一些屬性的作用

• title:設定Toolbar的标題,注意:如果在CollapsingToolbarLayout中指定了title屬性,那麼Toolbar中的title屬性将會變得無效

• expandedTitleMarginStart:設定下拉伸縮完成後,ToolBar标題文字左邊的margin距離

• expandedTitleMarginEnd:設定下拉伸縮完成後,Toolbar标題文字右邊的margin距離

• contentScrim:設定Toolbar折疊到頂部後的背景

• layout_collapseMode:折疊效果,有兩個值,pin代表從底部拉出,parallax代表從中間展開

看文字可能不太了解collapseMode的顯示效果,兩個值的具體顯示效果如下:

pin:

android滾動标題欄,Android 使用CoordinatorLayout實作滾動标題欄效果的執行個體

parallax:

android滾動标題欄,Android 使用CoordinatorLayout實作滾動标題欄效果的執行個體

想實作效果二,總結

首先我們設定一個固定的高度給AppBarLayout

然後給AppBarLayout的子View包裹了一層CollapsingToolbarLayout,并設定CollapsingToolbarLayout的滾動屬性為scroll|exitUntilCollapsed

最後再為CollapsingToolbarLayout裡的子View設定layout_collapseMode屬性,指定其展示效果

以上這篇Android 使用CoordinatorLayout實作滾動标題欄效果的執行個體就是小編分享給大家的全部内容了,希望能給大家一個參考,也希望大家多多支援腳本之家。