CoordinatorLayout与AppBarLayout的配合使用,在之前的文章中我们也经常使用,主要是专门用来打造各种炫酷的效果。

有童鞋看了之前的文章反馈对AppBarLayout中的scrollFlags属性的设置不是很明白,这篇文章我们具体来讲讲这个属性的用法效果。

我们先简单了解一下AppBarLayout:

AppBarLayout继承自LinearLayout,布局方向为垂直方向。所以你可以把它当成垂直布局的LinearLayout来使用。AppBarLayout是在LinearLayou上加了一些材料设计的概念,它可以让你定制当某个可滚动View的滚动手势发生变化时,其内部的子View实现何种动作。

这里说得其内部的子View实现任何动作,就是可以通过scrollFlags属性进行设置达到想要的效果。

那么app:layout_scrollFlags可以设置哪些动作呢?

下面我们通过XML布局文件代码和对应的效果图进行解析:

1、scroll

子View会跟随滚动事件一起发生移动而滚出或滚进屏幕。注意两点:第一点,如果使用了其他值,必定要使用这个值才能起作用;第二点:如果在这个子View前面的任何其他子View没有设置这个值,那么这个子View的设置将失去作用。

布局文件:


<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:fitsSystemWindows="true"><android.support.design.widget.AppBarLayoutandroid:id="@+id/appbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"><android.support.v7.widget.Toolbarandroid:id="@+id/tb_toolbar"android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/colorPrimary"app:layout_scrollFlags="scroll"app:title="@string/app_name" /></android.support.design.widget.AppBarLayout><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_behavior="@string/appbar_scrolling_view_behavior" /></android.support.design.widget.CoordinatorLayout>

对应效果图:

2、enterAlways

和scroll相比较,其实就是向下滚动时优先级问题,scroll首先滑动的是列表,列表的数据全部滚动完毕,才开始toolbar滑动。而scroll | enterAlways首先滑动的是toolbar ,然后再去滑动其他的view。只是优先级先后的问题。

布局文件:代码类型,只是改变属性值,这里就不赘述了

......................<android.support.v7.widget.Toolbarandroid:id="@+id/tb_toolbar"android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/colorPrimary"app:layout_scrollFlags="scroll|enterAlways"app:title="@string/app_name" />......................

对应效果图:

3、enterAlwaysCollapsed

enterAlwaysCollapsed是enterAlways的附加标志,这里涉及到子View的高度和最小高度,向下滚动时,子View先向下滚动最小高度值,然后Scrolling View开始滚动,到达边界时,子View再向下滚动,直至显示完全。

布局文件:代码类型,只是改变属性值,这里就不赘述了


............................<android.support.v7.widget.Toolbarandroid:id="@+id/tb_toolbar"android:layout_width="match_parent"android:layout_height="200dp"android:minHeight="50dp"android:background="@color/colorPrimary"app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"app:title="@string/app_name" />
.............................

对应效果图:

4、exitUntilCollapsed

这里也涉及到最小高度。发生向上滚动事件时,子View向上滚动直至最小高度,然后Scrolling View开始滚动。也就是,子View不会完全退出屏幕。

布局文件:代码类型,只是改变属性值,这里就不赘述了


...................................
<android.support.v7.widget.Toolbarandroid:id="@+id/tb_toolbar"android:layout_width="match_parent"android:layout_height="200dp"android:minHeight="50dp"android:background="@color/colorPrimary"app:layout_scrollFlags="scroll|exitUntilCollapsed"app:title="@string/app_name" />....................................

对应效果图:


5、snap

子View滚动比例的吸附效果。也就是说子View不会存在局部显示的情况,滚动到子View的部分高度,当我们松开手指时,子View要么向上全部滚出屏幕,要么向下全部滚进屏幕。

布局文件:代码类型,只是改变属性值,这里就不赘述了

......................<android.support.v7.widget.Toolbarandroid:id="@+id/tb_toolbar"android:layout_width="match_parent"android:layout_height="200dp"android:background="@color/colorPrimary"app:layout_scrollFlags="scroll|snap"app:title="@string/app_name" />
......................

对应效果图:


6、snapMargins

snapMargins是必须配合snap一起使用的额外的flag。如果设置的话,这个View将会被snap到它的顶部外边距和它的底部外边距的位置,而不是这个View自身的上下边缘。

布局文件:

<?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:fitsSystemWindows="true"><android.support.design.widget.AppBarLayoutandroid:id="@+id/appbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/colorPrimary"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"><android.support.v7.widget.Toolbarandroid:id="@+id/tb_toolbar"android:layout_width="match_parent"android:layout_height="100dp"android:layout_marginStart="10dp"android:layout_marginTop="200dp"android:layout_marginEnd="10dp"android:layout_marginBottom="10dp"android:background="@color/colorAccent"app:layout_scrollFlags="scroll|snap|snapMargins"app:title="@string/app_name" /></android.support.design.widget.AppBarLayout><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_behavior="@string/appbar_scrolling_view_behavior" /></android.support.design.widget.CoordinatorLayout>

对应的效果图:


可以看到Margin生效了,滑动必须超过Toolbar的高度以及上下Margin就会继续滑动,否则就恢复。

上面的内容就介绍完了,代码基本都在文章里,就不放demo了。

到这里就结束啦!

Android | 玩转AppBarLayout,设置scrollFlags滑动属性详解相关推荐

  1. Android开发中EditText:一、属性详解

    在android开发中,EditText组件是一个常用控件,也是一个比较重要的组件,它的基本属性需要熟练使用才行,接下来就来讲一下在Android开发中EditText组件的基本使用. 一.基本属性 ...

  2. Android AVD创建及设置中各参数详解

    本文根据如下的模拟器安装做一些解释: 本文环境:Windows XP sp3,最新JAVa环境,android-sdk_r06-windows.zip,android 2.2 API Level 8, ...

  3. SAP UI5 DatePicker控件和语言设置相关的属性详解

    In SAP help, the determination of language code / locale is explained. For example, when I access CR ...

  4. Android中设置显示文本,Android文本显示控件-TextView属性详解

    android:autoLink //设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web /email/phone/map/all) andr ...

  5. android layout_width 属性,android:layout_weight属性详解

    在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...

  6. android平台下OpenGL ES 3.0实例详解顶点属性、顶点数组

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  7. Android EditText 属性详解

    Android EditText 属性详解 EditText,本文包含大部分开发中用到的属性. Android开发之EditText属性详解 1.EditText输入的文字为密码形式的设置 (1)通过 ...

  8. Android 开发之EditText属性详解

    EditText & TextView 属性详解: android:layout_gravity="center_vertical" 设置控件显示的位置:默认top. an ...

  9. Android设置中“强行停止”详解

    Android设置中"强行停止"详解 最近工作上遇到了广播接受不到的问题,查看了<Android 开发艺术探索>一书中关于广播的发送和接受的章节(P356-P362). ...

最新文章

  1. 【转】js之匿名函数
  2. 突破:量子计算机首次实现简化逻辑门
  3. LIKE语句也可以这样写
  4. ISA Server***检测及配置
  5. 最后关于nginx+passenger+ror+mysql的安装部署过程
  6. 基于角色-功能-资源的权限控制模型的设计与实现-引子
  7. SAP Spartacus的Responsive和adaptive特性
  8. iis7设置html支持asp,Win7下启用IIS7配置ASP运行环境的详细方法
  9. 使用编辑工具快速创建实体对象的方法
  10. Docker Nexus3 maven 私服(搭建篇)
  11. dynamic programming 学习
  12. cnn可视化 感受野(receptive field)可视化
  13. SQL62 出现三次以上相同积分的情况
  14. 32位/64位WIN2003各版本支持内存列表 彻底解决XP系统无法支持4G内存的问题
  15. qfile.remove 删除已经被加载的文件_Milvus数据管理:删除的实现原理
  16. Oracle数据库学习笔记(十五)--自连接
  17. H3C|HUAWEI 交换机Comware系统的基本使用(以HUAWEI S5720为例)
  18. C#人事工资管理系统
  19. 用javascript实现节假日自动切换风格
  20. python-opencv尺寸测量

热门文章

  1. CAD制图初学入门:国产CAD软件中如何进行角度标注?
  2. 如何更快地渲染?深入了解3D渲染性能的指南!(2)
  3. php中mysql_query是什么意思_php中mysql_query是什么意思?
  4. pycharm切换python环境_Pycharm 的 python 运行环境切换
  5. 记录一次Powerjob踩的坑(Failed to deserialize message)
  6. js-函数式编程总结-核心思想curry
  7. free marker导出word,word里包含表格 用到了list嵌套 合并单元格
  8. Windows11 安装系统时无法连接网络又无下一步时的解决方法
  9. 10个可视化 CSS 工具, 快速生成 CSS 片段
  10. 通过cookie记住用户名和密码