AndroidASD完全解析05之AppBarLayout

前面我們介紹過(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,猛戳這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 在2015年GoogleIO大會(huì)上,Google除了推出Android L之外,還推出了一個(gè)全新的支持庫(kù)Andro...
    張文文同學(xué)閱讀 1,024評(píng)論 2 1
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,167評(píng)論 25 708
  • 滑動(dòng)菜單可以說(shuō)是Material Desgin中最常見(jiàn)的效果之一了,在許多著名的應(yīng)用中,都有滑動(dòng)菜單的功能...
    AndYMJ閱讀 2,783評(píng)論 2 4
  • 搬進(jìn)一間小小的屋子。在一番打掃,整理完以后,獨(dú)自坐在木椅子上,那么幾秒鐘,覺(jué)得以后真的只有自己了,一個(gè)人住的感覺(jué)原...
    芝士從未走丟閱讀 758評(píng)論 0 2
  • 俊峰淡愁,翠色微寒。
    何典閱讀 210評(píng)論 0 0

友情鏈接更多精彩內(nèi)容