1.app:layout_scrollFlags属性介绍
前面介绍AppBarLayout和CollapsingToolbarLayout用法的时候,用到了app:layout_scrollFlags属性。其实这个滚动标志属性来自于AppBarLayout,它用来定义下级控件的具体滚动行为,比如说是先滚还是后滚,是滚一半还是全部滚,是自动滚还是手动滚等等。
2.不同滚动行为的场景
- AppBarLayout的滚动依赖于页面主体的滚动,与页面主体相对应的,可将AppBarLayout称作页面头部。既然一个页面分为头部和主体两部分,那么就存在谁先滚谁后滚的问题了。
- AppBarLayout内部的高度也可能变化,比如它嵌套了可折叠工具栏布局CollapsingToolbarLayout。既然AppBarLayout的高度是变化的,那也得区分是滚一半还是滚全部。
- AppBarLayout被拉动了一段还没拉完,此时一旦松开手指,一般是就地停住。但半路刹车有碍观瞻,那么就得判断是继续停着不动,还是继续向上收缩,或是继续向下展开。
3.五种滚动标志介绍
- scroll:该标志表示头部与主体一起滚动。
- enterAlways:该标志表示头部与主体先一起滚动,头部滚到位后,主体继续向上或者向下滚。
- exitUntilCollapsed:该标志保证页面上至少能看到最小化的工具栏,不会完全看不到工具栏。具体的滚动行为分成向上滚动和向下滚动两种,其中向上滚动表示头部先往上收缩,一直滚到折叠的最小高度;然后头部固定不动,主体继续向上滚动;而向下滚动表示头部固定不动,主体先向下滚动,一直滚到主体全部拉出;然后头部向下展开。
- enterAlwaysCollapsed:该标志一般跟enterAlways一起使用,它与enterAlways的区别在于有折叠操作,而单独的enterAlways没有折叠。具体的滚动行为也分成向上滚动和向下滚动两种,其中向上滚动表示头部先往上收缩,一直滚到折叠的最小高度;然后头部与主体先一起滚动,头部滚到位后,主体继续向上。而向下滚动表示头部与主体先一起滚动,一直滚到头部折叠的最小高度;然后主体向下滚动,滚到位后头部继续向下展开。
- snap:在用户手指松开时,系统自行判断,接下来是全部向上滚到顶,还是全部向下展开。
4.5种滚动标志互相之间的区别
滚动标志取值 | 说明 |
scroll | 简单朴素的滚动,没什么花样 |
enterAlways | 该标志与scroll的区别在于,它会让头部盖住主体,而scroll不会盖住 |
exitUntilCollapsed | 设置该标志后,页面上总会看到工具栏 |
enterAlwaysCollapsed | 该标志与enterAlways的区别在于,它支持layout_collapseMode设定的折叠效果 |
snap | 设置该标志后,每当用户松开手势,系统会自动判断是向上收缩,还是向下展开 |