在前面兩篇MD系列的文章中簇搅,通過兩個案例基本上能夠掌握了CoordinatorLayout與AppBarLayout的配合使用软吐。本文我們回過頭來詳細(xì)聊聊AppBarLayout的ScrollFlags屬性凹耙,了解一下不同值之間的區(qū)別。至此备典,Android Material Design系列的學(xué)習(xí)已進行到第七篇提佣,大家可以點擊以下鏈接查看之前的文章:
- Android TabLayout 分分鐘打造一個滑動標(biāo)簽頁
- Android 一文告訴你到底是用Dialog,Snackbar倚喂,還是Toast
- Android FloatingActionButton 重要的操作不要太多端圈,一個就好
- Android 初識AppBarLayout 和 CoordinatorLayout
- Android CoordinatorLayout實戰(zhàn)案例學(xué)習(xí)《一》
- Android CoordinatorLayout 實戰(zhàn)案例學(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)效果圖:
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)先級問題。對比scroll
和scroll | 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)效果圖:
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)效果圖:
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)效果圖:
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)效果圖:
示例源碼
我在GitHub上建立了一個Repository,用來存放整個Android Material Design系列控件的學(xué)習(xí)案例,會伴隨著文章逐漸更新完善,歡迎大家補充交流,Star地址: