前面我們介紹過(guò)ASD庫(kù)中的其它幾個(gè)控件,我們這一篇介紹另外一個(gè)控件--AppBarLayout。APPBarLayout繼承自LinearLayout,布局方向是垂直方向,我們可以將它當(dāng)成垂直布局的LinearLayout來(lái)使用。不過(guò)APPBarLayout在LinearLayout的基礎(chǔ)之上加了一些材料設(shè)計(jì)的概念,它可以讓我們定制當(dāng)某個(gè)可以滾動(dòng)的View的滾動(dòng)手勢(shì)發(fā)生變化的時(shí)候,其內(nèi)部字View實(shí)現(xiàn)的動(dòng)作。
概述
AppBarLayout是繼承于LinearLayout的ViewGroup容器,支持手勢(shì)滑動(dòng),它將包裹的組件都作為AppBar。AppBarLayout里面的View都是通過(guò)設(shè)置app:layout_scrollFlags屬性控制滑動(dòng),Google提供了4種滑動(dòng)表現(xiàn)類(lèi)型,分別是:
scroll:表示向下滾動(dòng)的時(shí)候,設(shè)置了這個(gè)屬性的View會(huì)被滾出屏幕范圍,直到消失
enterAlways:表示向上滾動(dòng)的時(shí)候,設(shè)置了這個(gè)屬性的View會(huì)隨著滾動(dòng)手勢(shì)逐漸出現(xiàn),直到恢復(fù)原來(lái)設(shè)置的位置
enterAlwaysCollapsed:是enterAlways的附加選項(xiàng),一般跟enterAlways一起使用,它是指,View在往下“出現(xiàn)”的時(shí)候,首先是enterAlways效果,當(dāng)View的高度達(dá)到最小高度時(shí),View就暫時(shí)不去往下滾動(dòng),直到ScrollView滑動(dòng)到頂部不再滑動(dòng)時(shí),View再繼續(xù)往下滑動(dòng),直到滑到View的頂部結(jié)束。
exitUntilCollapsed:值設(shè)為exitUntilCollapsed的View,當(dāng)這個(gè)View要往上逐漸“消逝”時(shí),會(huì)一直往上滑動(dòng),直到剩下的的高度達(dá)到它的最小高度后,再響應(yīng)ScrollView的內(nèi)部滑動(dòng)事件。
其中,我們最常用的就是scroll和enterAlways
注意:如果Toolbar和AppBarLayout一起使用的時(shí)候,ToolBar需要作為AppBarLayout的子View
google官方推薦的是AppBarLayout需要與一個(gè)滾動(dòng)的視圖一起使用,Android給我們提供了一個(gè)滾動(dòng)的視圖NestedScrollView,在v4包中,NestedScrollView繼承的也是FrameLayout,但是我們可以把它當(dāng)成ScrollView使用。AppBarLayout要與NestedScrollView關(guān)聯(lián)起來(lái),需要設(shè)置一個(gè)屬性: app:layout_behavior="@string/appbar_scrolling_view_behavior",其中它就是指定Behavior的,appbar_scrolling_view_behavior對(duì)應(yīng)的類(lèi)的名稱是:android.support.design.widget.AppBarLayout$ScrollingViewBehavior,關(guān)于Behavior,我們會(huì)在后面詳細(xì)講解,現(xiàn)在知道需要設(shè)置這個(gè)就可以了。
使用
上面介紹的都是一些概念性的東西,下面我們通過(guò)實(shí)例體會(huì)一下AppBarLayout的使用方法,這里實(shí)現(xiàn)一個(gè)簡(jiǎn)單的例子。
首先是布局文件代碼:
<?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="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
app:layout_collapseMode="pin"
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/custom_text"
android:textSize="18sp"/>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
這里面的話也沒(méi)有很多可以講的了,基本都是在上面講過(guò)了的,下面看一下Activity的代碼:
package com.example.adsdemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
/**
* Created by Devin on 2016/8/16.
*/
public class ABLActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_abl);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("ABLActivity使用");
toolbar.setNavigationIcon(R.drawable.back);
setSupportActionBar(toolbar);
}
}
這里也很簡(jiǎn)單,不過(guò)需要注意的是,需要在清單文件中調(diào)用沒(méi)有ActionBar的一個(gè)Theme,不然會(huì)出錯(cuò)。下面看一下實(shí)現(xiàn)的效果圖:
在這里例子中,只用了Android提供的四個(gè)Flag中的兩個(gè)scroll和enterAlways,有興趣的可以使用其他的兩個(gè)體會(huì)一下。這里就簡(jiǎn)單介紹了AppBarLayout的使用,等我們學(xué)完了其它的組件的時(shí)候再一起總結(jié)一下,最后附上AppBarLayout的國(guó)內(nèi)鏡像API,猛戳這里