先看效果。

实现的效果

实现与分析

很显然,这样的效果用到了Android Material Design里的控件,分别是CoordinatorLayout和AppBarLayout。其中,AppBarLayout控件便具备顶部固定的功能,但它需要被CoordinatorLayout嵌套起来才能实现滚动固定的效果,否则无效。

上面效果图的Layout代码如下:

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:focusable="true"

android:focusableInTouchMode="true">

android:id="@+id/abl_head"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:translationZ="5dp">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@android:color/white"

android:minHeight="50dp"

android:orientation="vertical"

app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlways|snap">

android:id="@+id/rv_list"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior" />

其中include进来的@layout/layout_hidden_bar和@layout/layout_stick_bar就是效果图中顶部的可隐藏布局和固定布局。都是简单色块+文本,就不展示xml源码了。

上面的实现,关键的在于LinearLayout的两个属性:

app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlways|snap"

android:minHeight="50dp" // 其中50dp是指@layout/layout_stick_bar的高度

先说说app:layout_scrollFlags属性。

查看源码知道,CoordinatorLayout实现了NestedScrollingParent2接口,它支持对所嵌套的子控件滚动时进行响应控制。用CoordinatorLayout包含了整个界面,在界面滚动时,所有控件都会根据CoordinatorLayout的滚动实现方法进行动态排版。这才有AppBarLayout在滚动时的折叠置顶效果,如果离开CoordinatorLayout控件,AppBarLayout便不具备这样的效果。

app:layout_scrollFlags属性指明了LinearLayout在AppBarLayout中滚动时状态。其中:

scroll

滚动时响应。如果不加上这个属性值,界面滚动时,顶部内容将不会随滚动折叠或变化。

exitUntilCollapsed

Scroll Up: the view is always visible, provided its height is > 0 and the expanded version (e.g. Toolbar with an ImageView) will become visible when scrolled all the way up

Scroll Down: the view scrolls with the rest of the layout's content, but only till its collapsed state (hence - "exit until collapsed"), so in case of a Toolbar with a fixed height, it will always be visible on the top

界面在向上滚动时,如果有指定最小高度,指定最小高度的顶部布局内容会保持可见(即置顶)。向下移动,剩余的内容会跟着显示出来。

如果没有设置这个属性,顶部内容将会随向上滚动而滚动,至最终消失。

enterAlways

顶部布局总是进入。如果设定这个属性,无论在哪个地方只要界面向下滚动,顶部内容都会跟着滚下来。如果没有设定,则需要滚动到界面最顶部后,顶部布局才会出现。

snap

Scroll Up AND Down fast scrolls up or down based on how much of the view is visible - if more than 50% - the view will scroll down, showing itself, if less - the view will hide; used with other flags as a further customization

吸附显示。设置这个值后,隐藏的内容被拖出超过50%时,松开手就会自动显示整个布局;相反,显示的布局被隐藏超过50%时,松开手就会自动隐藏整个布局。

可以看到,我们都设置了这四个属性。

设置exitUntilCollapsed属性值后,还要设置顶部布局的最小高度,否则顶部的所有内容仍会随界面的向上滚动而全部隐藏(因为最小高度默认为0)。上面效果图中,顶部布局的最小高度是50dp,也就是固定视图@layout/layout_stick_bar的高度。

另外,为了让recyclerView附着在AppBarLayout下面,需要对其设置app:layout_behavior属性,

app:layout_behavior="@string/appbar_scrolling_view_behavior"

其中@string/appbar_scrolling_view_behavior的值为:

android.support.design.widget.AppBarLayout$ScrollingViewBehavior

大致作用是使recyclerView附着着AppBarLayout的滚动。具体实现待深究。

android 界面置顶,Android实现界面滚动时顶部部分内容置顶(附源码)相关推荐

  1. 【Android App】实战项目之仿拼多多的直播带货(附源码和演示 超详细必看)

    需要源码请点赞关注收藏后评论区留言私信~~~ 近年来电商业态发生了不小的改变,传统的电商平台把商品分门别类,配上精美的图文说明供消费者挑选,新潮的电商平台则请来明星网红,开启直播秀向广大粉丝推销商品, ...

  2. Android 实现视屏播放器、边播边缓存功能,附源码

    热文导读 | 点击标题阅读 [墙裂推荐]AndroidVideoCache:实现视屏播放边下边播 吊炸天!74款APP完整源码! 一份年薪30万的Android面试宝典,附答案 来源:http://w ...

  3. 【Android App】实战项目之仿微信的附近的人(附源码和演示 超详细)

    需要全部源码请点赞关注收藏后评论区留言私信~~~ 艺术家常说"距离产生美",其实距离近才是优势,谁不希望自己的工作事少钱多离家近呢?不光是工作,像租房买房.恋爱交友,大家都希望找个 ...

  4. 【Android App】物联网实战项目之自动驾驶的智能小车(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~~ 当今社会正在步入一个万物互联的时代,它的技术基石主要来自5G.物联网和人工智能. 三者融合产生了许多新产品,其中最璀璨的当数自动驾驶的电动车:它汇聚了最 ...

  5. android仿qq折叠,android列表收缩与展开仿QQ好友列表(非常详细,附源码)

    好友QQ列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到android的E ...

  6. Android列表收缩与展开仿QQ好友列表(非常详细,附源码)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同 ...

  7. Android 小项目之--Mini音乐播放器【简单版】(附源码)

    上篇文章讲服务的例子中,有个演示服务的后台播放音乐,今天就来讲一讲多媒体之一的音乐播放. 说到多媒体不得不向上追溯,空间多媒体是如何实现的,如何可以让我们轻松的播放音乐.视频?本章讲述点大致如下: 1 ...

  8. Android 百度地图之全局搜索周边搜索全国搜索城市路线规划(升级版附源码)

    这个是今年3月份做的,拿出来分享哈,之前的一篇结构单一,现在这个新增路线规划: 路线1:无地铁 路线2:时间快 路线3:少换乘 路线4:少步行 如下图: 2.地点搜索(局部搜索)如下图: 3 定位功能 ...

  9. 【Android App】给三维的地球仪贴上动物贴纸实战(附源码和演示 超详细必看)

    需要源码和图片集请点赞关注收藏后评论区留言~~~ 一.纹理贴图 给三维物体穿衣服的动作,通常叫做给三维图形贴图,更专业地说叫纹理渲染. 渲染纹理的过程主要由三大项操作组成,分别说明如下: (1)启用纹 ...

  10. Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)

    本文内容: 1.横向ListView的所有实现思路; 2.其中一个最通用的思路HorizontalListView,并基于横向ListView开发一个简单的相册: 3.实现的横向ListView在点击 ...

最新文章

  1. python模块之imghdr检测图片类型
  2. 字符串与指针,数组的关系与用途
  3. Go标准库Context
  4. Amazon Aurora 论文解读
  5. 允许使用抽象类类型 isearchboxinfo 的对象_此对象非彼对象(面向对象)3
  6. 人工智能python课程总结1500字_李开复的《人工智能》读后感1500字
  7. EncodingAESKey
  8. 导出所有DB2存储过程的四种方法
  9. hive0.12安装
  10. java实现顺序表的增加,删除,查找,打印
  11. 运行 Excel 脚本
  12. GStreamer系列-基础概念
  13. Redis未授权访问缺陷让服务器沦为肉鸡
  14. 野猪写的《游戏程序中的骨骼插件》
  15. 用手机访问计算机共享资源,怎么进入共享文件夹?手机访问电脑局域网共享文件夹的方法...
  16. 低功耗蓝牙迈向工业车规级,助力充电桩和电动车智能化
  17. ArcMap10.2 选项(Options)窗口显示不完整问题解决(以默认加载栅格数据去背景显示设置为例)
  18. nvm介绍及常用命令
  19. 微信公众号主体已注销 如何办理账号迁移和公证书?
  20. 小sun的假期(贪心+逻辑思维)

热门文章

  1. EXCEL对比重复数据
  2. 室温金刚石共聚焦平台
  3. 自定义MySQL实用的函数和存储过程(持续更新)
  4. 使用Petalinux定制自己的linux系统
  5. 于NXP芯片第一次无法进入CAN中断的问题
  6. mysql英文版怎么调中文_navicat for mysql怎么设置中文
  7. 高级Java开发人员最常访问的几个网站
  8. 巴斯勒相机的ip掩码_basler调相机规范步骤
  9. 【Docker】seaweedfs的搭建与使用
  10. unity打开excel表格_unity创建编辑读取EXCEL文件表格数据游戏插件工具Uni-Excel 1.0