亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

玩轉AppBarLayout,更酷炫的頂部欄

2019-11-09 18:05:16
字體:
來源:轉載
供稿:網友

目錄(?)[+]

我的簡書同步發布:玩轉AppBarLayout,更酷炫的頂部欄

上一篇文章《CoordinateLayout的使用如此簡單 》對CoordinateLayout的使用做了講解,今天我們再講解常常與其一起使用的幾個ViewAppBarLayout、CollapsingToolbarLayout以及Toolbar。一下子出現3個陌生的View,是不是覺得很慌張~,很多人都寫了這幾個布局的使用,但是他們卻沒有有針對性的單獨講解每個View的作用以及如何使用,我看的很多文章都是一上來就把AppBarLayout、CollapsingToolbarLayout以及Toolbar寫到一個布局里面去,然后一個一個布局屬性去說,一下子感覺好混亂,本文是從Toolbar開始說起,最終讓你把這3個View徹底掌握下來!

其實,這三個View都是針對我們以往常用的ActionBar的,就是針對我們的App的頂部的Bar玩各種花樣~我們往下看,看看他們把我們的App的”頂部欄”玩出個什么花樣!

1 Toolbar

Toobar主要是用來替換ActionBar的,換句話說,ActionBar能做的,Toolbar都能做。如果你對ActionBar的使用比較熟悉,你會發現Toolbar使用起來非常簡單。ok,既然是替換,當然用Toolbar的時候就得先去把ActionBar給隱藏掉啦~

隱藏ActionBar的方法有很多,可以通過代碼的方式隱藏,也可以通過配置文件的方式,我們主要是通過配置文件的方式來隱藏。在我們的styles.xml文件中的APPTheme標簽中加入如下兩行:

<item name="windowActionBar">false</item><item name="windowNoTitle">true</item>1212

當然了,你也可以新建一個<style>標簽,將上面兩行代碼加入,并且將這個新建的標簽作為<application>theme。還可以選擇通過將AppTheme的parent設置為Theme.AppCompat.Light.NoActionBar的方式。方法很多,可以自己隨便選。

接下來就是將Toolbar放入到布局文件(沒啥好解釋的):

<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:background="?attr/colorPRimary" android:layout_height="?android:attr/actionBarSize" />1234512345

最后將Toobar作為“ActionBar”來用

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle("這里是Title"); toolbar.setSubtitle("這里是子標題"); toolbar.setLogo(R.drawable.icon); setSupportActionBar(toolbar);123456123456

可以對Toolbar設置Logo、標題、子標題等等~還有很多其他的設置,自己去慢慢玩,這里不提啦~。當然了,也可以在布局文件中設置這些,在布局文件設置就不寫啦,hongyang大神有篇博客寫的挺好的《 Android 5.x Theme 與 ToolBar 實戰 》可以去參考一下。

看看效果:

Toolbar

如果Toolbar僅僅是用來對以往的ActionBar做一次替換,那也太沒創意啦!完全沒必要去替換了,因為它們表現出來的都是一樣的,而且并沒有讓我們覺得用起來比ActionBar方便。那為啥要替換呢,總應該有他的理由吧:ActionBar是固定在頂部,并不能移動,我覺得這是最大的不好,而我們的ToolBar可以讓我們隨便擺放,就就可以帶來很多靈活性和效果啦!

正如你所看的這樣,Toolbar根本就不夠看的,一點都不復雜。接下來我們繼續學習在Toolbar上面再套一層父View,讓Toolbar更有互動性。

2 AppBarLayout

AppBarLayout繼承自LinearLayout,布局方向為垂直方向。所以你可以把它當成垂直布局的LinearLayout來使用。AppBarLayout是在LinearLayou上加了一些材料設計的概念,它可以讓你定制當某個可滾動View的滾動手勢發生變化時,其內部的子View實現何種動作。

請注意:上面提到的某個可滾動View,可以理解為某個ScrollView。怎么理解上面的話呢?就是說,當某個ScrollView發生滾動時,你可以定制你的“頂部欄”應該執行哪些動作(如跟著一起滾動、保持不動等等)。那某個可移動的View到底是哪個可移動的View呢?這是由你自己指定的!如何指定,我們后面說。

2.1 AppBarLayout子View的動作

內部的子View通過在布局中加app:layout_scrollFlags設置執行的動作,那么app:layout_scrollFlags可以設置哪些動作呢?分別如下:

(1) scroll:值設為scroll的View會跟隨滾動事件一起發生移動。

什么意思呢?簡單的說,就是當指定的ScrollView發生滾動時,該View也跟隨一起滾動,就好像這個View也是屬于這個ScrollView一樣。

一張gif足以說明:

scroll

對應的布局文件

<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll" /></android.support.design.widget.AppBarLayout>12345678910111234567891011

(2) enterAlways:值設為enterAlways的View,當ScrollView往下滾動時,該View會直接往下滾動。而不用考慮ScrollView是否在滾動。

看個動畫片(Y(^o^)Y)(ToolBar高度設為:?Android:attr/actionBarSize,app:layout_scrollFlags="scroll|enterAlways"):

scroll|enterAlways

(3) exitUntilCollapsed:值設為exitUntilCollapsed的View,當這個View要往上逐漸“消逝”時,會一直往上滑動,直到剩下的的高度達到它的最小高度后,再響應ScrollView的內部滑動事件。

怎么理解呢?簡單解釋:在ScrollView往上滑動時,首先是View把滑動事件“奪走”,由View去執行滑動,直到滑動最小高度后,把這個滑動事件“還”回去,讓ScrollView內部去上滑??磦€gif感受一下(圖中將高度設的比較大:200dp,并將最小高度設置為?android:attr/actionBarSize,app:layout_scrollFlags="scroll|exitUntilCollapsed"):

scroll|exitUntilCollapsed

(4) enterAlwaysCollapsed:是enterAlways的附加選項,一般跟enterAlways一起使用,它是指,View在往下“出現”的時候,首先是enterAlways效果,當View的高度達到最小高度時,View就暫時不去往下滾動,直到ScrollView滑動到頂部不再滑動時,View再繼續往下滑動,直到滑到View的頂部結束。

來個gif感受一下(圖中將高度設的比較大:200dp,并將最小高度設置為?android:attr/actionBarSize,app:layout_scrollFlags="scroll|enerAlways|enterAlwaysCollapsed"):

scroll|enerAlways|enterAlwaysCollapsed

2.2 將AppBarLayout與ScrollView關聯起來

前面說了一直反復說“當ScrollView發生滾動時”,那么怎么將AppBarLayout與ScrollView關聯起來呢?我們注意到,AppBarLayout與ScrollView之間動作“相互依賴”,這不就是我們上一篇《CoordinateLayout的使用如此簡單 》所學的內容嗎?把ScrollView和AppBarLayout作為CoordinateLayout的子View,然后編寫一個Behavior,在這個Behavior里面判斷當前的操作是應該讓ScrollView時刻保持在AppBarLayout之下(即只要改變AppBarLayout的位置就可以一起滑動),還是應該讓ScrollView內部滾動而不讓AppBarLayout位置發生變化等等這些需求,都是可以在Behavior里面處理的。你可以去針對你的ScrollView編寫Behavior。然而,我們看到我們的AppBarLayout事先的功能比較復雜,如果我們自己去定義這樣的效果,代碼非常復雜,還要考慮很多方面,好在Android幫我們寫好啦,我們直接用就是了,這個ScrollView就是NestedScrollView,請注意,它并沒有繼承ScrollView,它繼承的是FrameLayout,但是它實現的效果把它可以看成是ScrollView。

把NestedScrollView放入到我們的layout文件里面就可以啦~~~,很方便~

 <android.support.v4.widget.NestedScrollView        android:layout_width="match_parent"        android:layout_height="wrap_content"        app:layout_behavior="@string/appbar_scrolling_view_behavior">       <!--將你的內容放在這里-->    </android.support.v4.widget.NestedScrollView>1234567891012345678910

有沒有注意到有個屬性:app:layout_behavior="@string/appbar_scrolling_view_behavior",它就是指定Behavior的,appbar_scrolling_view_behavior對應的類的名稱是:android.support.design.widget.AppBarLayout$ScrollingViewBehavior感興趣的可以去分析源碼。

好了,我們現在會用AppBarLayout啦~是不是發現用起來so easy!接下來我們把剩下CollapsingToolbarLayout的給”消化”掉!

3 CollapsingToolbarLayout

CollapsingToolbarLayout是用來對Toolbar進行再次包裝的ViewGroup,主要是用于實現折疊(其實就是看起來像伸縮~)的App Bar效果。它需要放在AppBarLayout布局里面,并且作為AppBarLayout的直接子ViewCollapsingToolbarLayout主要包括幾個功能(參照了官方網站上內容,略加自己的理解進行解釋):

(1) 折疊Title(Collapsing title):當布局內容全部顯示出來時,title是最大的,但是隨著View逐步移出屏幕頂部,title變得越來越小。你可以通過調用setTitle函數來設置title。

(2)內容紗布(Content scrim):根據滾動的位置是否到達一個閥值,來決定是否對View“蓋上紗布”??梢酝ㄟ^setContentScrim(Drawable)來設置紗布的圖片.

(3)狀態欄紗布(Status bar scrim):根據滾動位置是否到達一個閥值決定是否對狀態欄“蓋上紗布”,你可以通過setStatusBarScrim(Drawable)來設置紗布圖片,但是只能在LOLLipOP設備上面有作用。

(4)視差滾動子View(Parallax scrolling children):子View可以選擇在當前的布局當時是否以“視差”的方式來跟隨滾動。(PS:其實就是讓這個View的滾動的速度比其他正常滾動的View速度稍微慢一點)。將布局參數app:layout_collapseMode設為parallax

(5)將子View位置固定(Pinned position children):子View可以選擇是否在全局空間上固定位置,這對于Toolbar來說非常有用,因為當布局在移動時,可以將Toolbar固定位置而不受移動的影響。 將app:layout_collapseMode設為pin

了解這些概念后,我們來看看布局吧~

<?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.support.design.widget.AppBarLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">        <android.support.design.widget.CollapsingToolbarLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            app:expandedTitleMarginEnd="64dp"            app:expandedTitleMarginStart="48dp"            app:layout_scrollFlags="scroll|exitUntilCollapsed">            <ImageView                android:id="@+id/main.backdrop"                android:layout_width="wrap_content"                android:layout_height="300dp"                android:scaleType="centerCrop"                android:src="@drawable/material_img"                app:layout_collapseMode="parallax" />            <android.support.v7.widget.Toolbar                android:id="@+id/toolbar"                android:layout_width="match_parent"                android:layout_height="?android: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="wrap_content"        android:paddingTop="50dp"        app:layout_behavior="@string/appbar_scrolling_view_behavior">        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="@string/my_txt"            android:textSize="20sp" />    </android.support.v4.widget.NestedScrollView></android.support.design.widget.CoordinatorLayout>1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545512345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455

上面的都看得懂吧,每個陌生的屬性都是講過的哦,忘記了的話回頭看,稍微解釋一下,圖片被設置為有視差的滑動,Toolbar設置為固定不動,另外,CollapsingToolbarLayout會對title進行放大和縮小,我們看看效果吧~

CollapsingToolbarLayout效果

如果你希望拖動過程中狀態欄是透明的,可以在CollapsingToolbarLayout中加 app:statusBarScrim=”@android:color/transparent”,并且在onCreate中調用getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)將狀態欄設置為透明就好啦~

獻上源碼,請笑納:http://download.csdn.net/detail/huachao1001/9538934


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久国产精品免费| 日韩免费视频在线观看| 日韩精品在线免费观看视频| 国产成人一区二区三区电影| 欧美日韩亚洲精品一区二区三区| 欧美夫妻性视频| 午夜精品99久久免费| 亚洲最大福利视频网| 91高潮精品免费porn| 国产美女扒开尿口久久久| 亚洲一级片在线看| 国产精品入口尤物| 尤物yw午夜国产精品视频| 欲色天天网综合久久| 日韩大陆毛片av| 91免费精品国偷自产在线| 欧美激情久久久久| 精品中文字幕在线观看| 国产精品久久婷婷六月丁香| 国产精品aaaa| 91中文字幕在线| 亚洲欧美制服第一页| 亚洲va码欧洲m码| 久久人人爽人人爽爽久久| 国产精品久久久久7777婷婷| 亚洲欧美国产日韩中文字幕| 欧美激情一级欧美精品| 亚洲欧美日韩国产中文专区| 欧美成在线视频| 日韩欧美亚洲一二三区| x99av成人免费| 日韩视频在线一区| 欧美极品美女视频网站在线观看免费| 美女av一区二区| 中文字幕在线观看亚洲| 日韩欧美在线第一页| 国产精品视频久久久| 亚洲欧美在线一区| 国产福利成人在线| 久久69精品久久久久久国产越南| 久久精品99久久久久久久久| 九九久久久久99精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美极度另类性三渗透| 久久福利视频网| 欧美极品美女电影一区| 亚洲片在线观看| 萌白酱国产一区二区| 久久精品视频在线播放| 亚洲国产成人久久综合一区| 狠狠色狠狠色综合日日五| 久久久久久91香蕉国产| 欧美体内谢she精2性欧美| 日韩av在线免费看| 欧美一区二粉嫩精品国产一线天| 韩国19禁主播vip福利视频| 亚洲精品电影网在线观看| 国产精品伦子伦免费视频| 亚洲香蕉成视频在线观看| 欧美日韩国内自拍| 国产精品色悠悠| 狠狠操狠狠色综合网| 国产精品电影在线观看| 美女国内精品自产拍在线播放| 久久影院资源站| 91成人福利在线| 欧美人与性动交a欧美精品| 国产精品福利片| 久久综合色88| 欧美超级免费视 在线| 国产成人精品一区二区| 性色av一区二区三区红粉影视| 国产精品久久久久久久久影视| 欧美黑人一区二区三区| 久久人人爽人人爽爽久久| 久操成人在线视频| 国产不卡精品视男人的天堂| 成人欧美一区二区三区在线湿哒哒| 国产精品成人一区二区三区吃奶| 欧美日在线观看| 欧美多人乱p欧美4p久久| 中国china体内裑精亚洲片| 欧美日韩亚洲91| 韩剧1988在线观看免费完整版| 久久成人人人人精品欧| 国产亚洲欧洲高清| 国产欧美日韩精品丝袜高跟鞋| 97超级碰在线看视频免费在线看| 97在线视频免费观看| 亚洲成人性视频| 在线精品视频视频中文字幕| 亚洲精品久久久久国产| 欧美人交a欧美精品| 久久成人av网站| 色婷婷**av毛片一区| 亚洲а∨天堂久久精品喷水| 2019中文字幕免费视频| 成人写真福利网| 国产精品高清免费在线观看| 国产成人久久久精品一区| 91精品久久久久久久久久| 国产亚洲人成网站在线观看| 最新国产精品亚洲| 少妇高潮久久久久久潘金莲| 日韩在线视频观看正片免费网站| 日韩精品在线观看一区二区| 2018中文字幕一区二区三区| 亚洲国产成人在线视频| 另类色图亚洲色图| 91精品视频在线播放| 日本人成精品视频在线| 国产成人在线视频| 国产精品96久久久久久又黄又硬| 色999日韩欧美国产| 亚洲国产精品人人爽夜夜爽| 清纯唯美亚洲综合| 日韩亚洲第一页| 亚洲精品影视在线观看| 欧美另类精品xxxx孕妇| 97久久精品视频| 欧美日韩第一视频| 日韩综合中文字幕| 国产日韩亚洲欧美| 国产91精品视频在线观看| 欧美国产日韩一区二区| 一区二区三区视频免费| 色多多国产成人永久免费网站| 国产日韩欧美日韩大片| 久久久999国产精品| 日韩视频亚洲视频| 中文字幕日韩精品在线| 在线日韩欧美视频| 福利视频一区二区| 日韩欧美在线第一页| 久久91精品国产91久久久| 亚洲国产天堂久久综合网| 最近日韩中文字幕中文| 精品日本高清在线播放| 久久久久久久久久久久久久久久久久av| 日韩国产在线看| 久久久久北条麻妃免费看| 成人av色在线观看| 日韩精品视频中文在线观看| 久久久久北条麻妃免费看| 亚洲视频国产视频| 日韩在线免费视频| 亚洲日韩欧美视频| 中文字幕精品一区二区精品| 欧美成人亚洲成人日韩成人| 国产精品自拍视频| 自拍偷拍亚洲在线| 亚州国产精品久久久| 亚洲欧美国产va在线影院| 日韩激情av在线播放| 性欧美激情精品| 国产精品高潮呻吟久久av无限| 亚洲欧美中文另类| 精品性高朝久久久久久久| 国产99久久久欧美黑人| 国产网站欧美日韩免费精品在线观看| 国产精品亚洲综合天堂夜夜| 久久天堂av综合合色| 欧美成人三级视频网站| 中文字幕精品av|