Android 詳細(xì)分析AppBarLayout的五種ScrollFlags

在前面兩篇MD系列的文章中簇搅,通過兩個案例基本上能夠掌握了CoordinatorLayout與AppBarLayout的配合使用软吐。本文我們回過頭來詳細(xì)聊聊AppBarLayout的ScrollFlags屬性凹耙,了解一下不同值之間的區(qū)別。至此备典,Android Material Design系列的學(xué)習(xí)已進行到第七篇提佣,大家可以點擊以下鏈接查看之前的文章:

ScrollFlags共有五種常量值供AppBarLayout的Children View使用子库,在xml布局文件中通過app:layout_scrollFlags設(shè)置仑嗅,對應(yīng)的值為:scroll,enterAlways吠冤,enterAlwaysCollapsed郭变,snap,exitUntilCollapsed周伦;也可以在代碼中通過setScrollFlags(int)方法使用专挪,比如:

Toolbar toolbar = ... // your toolbar within an AppBarLayout
AppBarLayout.LayoutParams params = 
    (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
    | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);

下面我們通過官網(wǎng)介紹寨腔、XML代碼和對應(yīng)的效果圖分別分析這五種值的使用(備注:代碼中設(shè)置也一樣率寡,不再贅述):

scroll


The view will be scroll in direct relation to scroll events. This flag needs to be set for any of the other flags to take effect. If any sibling views before this one do not have this flag, then this value has no effect.

Child View 伴隨著滾動事件而滾出或滾進屏幕乾蛤。注意兩點:第一點家卖,如果使用了其他值篡九,必定要使用這個值才能起作用榛臼;第二點:如果在這個child View前面的任何其他Child View沒有設(shè)置這個值,那么這個Child View的設(shè)置將失去作用窜司。

示例XML代碼:

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/tb_toolbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_56"
            app:titleTextColor="@color/white"
            app:title="@string/app_name"
            app:theme="@style/OverFlowMenuTheme"
            app:popupTheme="@style/AppTheme"
            android:background="@color/blue"
            app:layout_scrollFlags="scroll|enterAlways"/>

    </android.support.design.widget.AppBarLayout>

對應(yīng)效果圖:

Samples01.gif

enterAlways


When entering (scrolling on screen) the view will scroll on any downwards scroll event, regardless of whether the scrolling view is also scrolling. This is commonly referred to as the 'quick return' pattern.

快速返回模式沛善。其實就是向下滾動時Scrolling View和Child View之間的滾動優(yōu)先級問題。對比scrollscroll | enterAlways設(shè)置塞祈,發(fā)生向下滾動事件時金刁,前者優(yōu)先滾動Scrolling View,后者優(yōu)先滾動Child View议薪,當(dāng)優(yōu)先滾動的一方已經(jīng)全部滾進屏幕之后尤蛮,另一方才開始滾動。

示例XML代碼:

...
app:layout_scrollFlags="scroll|enterAlways"
...

對應(yīng)效果圖:

Samples02.gif

enterAlwaysCollapsed


An additional flag for 'enterAlways' which modifies the returning view to only initially scroll back to it's collapsed height. Once the scrolling view has reached the end of it's scroll range, the remainder of this view will be scrolled into view. The collapsed height is defined by the view's minimum height.

enterAlways的附加值斯议。這里涉及到Child View的高度和最小高度产捞,向下滾動時焊唬,Child View先向下滾動最小高度值,然后Scrolling View開始滾動,到達邊界時爵赵,Child View再向下滾動秕铛,直至顯示完全。

示例XML代碼:

...
android:layout_height="@dimen/dp_200"
android:minHeight="@dimen/dp_56"
...
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
...

對應(yīng)效果圖:

Samples03.gif

exitUntilCollapsed


When exiting (scrolling off screen) the view will be scrolled until it is 'collapsed'. The collapsed height is defined by the view's minimum height.

這里也涉及到最小高度紧阔。發(fā)生向上滾動事件時乖仇,Child View向上滾動退出直至最小高度,然后Scrolling View開始滾動。也就是冷蚂,Child View不會完全退出屏幕隆夯。

示例SML代碼:

...
android:layout_height="@dimen/dp_200"
android:minHeight="@dimen/dp_56"
...
app:layout_scrollFlags="scroll|exitUntilCollapsed"
...

對應(yīng)效果圖:

Samples04.gif

snap


Upon a scroll ending, if the view is only partially visible then it will be snapped and scrolled to it's closest edge. For example, if the view only has it's bottom 25% displayed, it will be scrolled off screen completely. Conversely, if it's bottom 75% is visible then it will be scrolled fully into view.

簡單理解,就是Child View滾動比例的一個吸附效果。也就是說厚骗,Child View不會存在局部顯示的情況迟螺,滾動Child View的部分高度,當(dāng)我們松開手指時,Child View要么向上全部滾出屏幕,要么向下全部滾進屏幕,有點類似ViewPager的左右滑動祈搜。

示例XML代碼:

...
android:layout_height="@dimen/dp_200"
...
app:layout_scrollFlags="scroll|snap"
...

對應(yīng)效果圖:

Samples05.gif

示例源碼


我在GitHub上建立了一個Repository,用來存放整個Android Material Design系列控件的學(xué)習(xí)案例,會伴隨著文章逐漸更新完善,歡迎大家補充交流,Star地址:

https://github.com/Mike-bel/MDStudySamples

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末适秩,一起剝皮案震驚了整個濱河市扬跋,隨后出現(xiàn)的幾起案子倍奢,更是在濱河造成了極大的恐慌,老刑警劉巖具练,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畔乙,死亡現(xiàn)場離奇詭異牍鞠,居然都是意外死亡,警方通過查閱死者的電腦和手機文虏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事诸尽∧” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衣迷。 經(jīng)常有香客問我让禀,道長菌瘪,這世上最難降的妖魔是什么刨裆? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拥峦,結(jié)果婚禮上贴膘,老公的妹妹穿的比我還像新娘。我一直安慰自己略号,他們只是感情好刑峡,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玄柠,像睡著了一般突梦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羽利,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天宫患,我揣著相機與錄音,去河邊找鬼这弧。 笑死娃闲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匾浪。 我是一名探鬼主播皇帮,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛋辈!你這毒婦竟也來了属拾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捌年,沒想到半個月后瓢娜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡礼预,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年眠砾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片托酸。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡褒颈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出励堡,到底是詐尸還是另有隱情谷丸,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布应结,位于F島的核電站刨疼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鹅龄。R本人自食惡果不足惜揩慕,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扮休。 院中可真熱鬧迎卤,春花似錦、人聲如沸玷坠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽八堡。三九已至樟凄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兄渺,已是汗流浹背不同。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溶耘,地道東北人二拐。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像凳兵,于是被迫代替她去往敵國和親偷遗。 傳聞我的和親對象是個殘疾皇子嗡靡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,429評論 2 45
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,074評論 25 707
  • 最新項目中用到了些Material效果雀哨,在此對自己的學(xué)習(xí)做個小結(jié)笋熬。 首先養(yǎng)成良好的學(xué)習(xí)習(xí)慣-----看源碼: Co...
    風(fēng)少俠閱讀 4,862評論 5 37
  • 二人安置好蘇沐秋,不約而同看了對方厌漂,葉修嘆了口氣:“出去說吧≌迳海” 來到最近的休息室苇倡,葉修感到一陣壓迫。 “為什么要...
    妗如十歌閱讀 284評論 0 0
  • 昨天忙著備課,臨睡前刷朋友圈堵漱,嬌嬌曬了自己的新家综慎。 家鄉(xiāng)市區(qū)最繁華地段的房子,精裝勤庐,家具件件精良示惊。配以文字:終于有...
    北方有萱草閱讀 649評論 14 7