Layout Manager布局管理器

四大组成

RecyclerView的四大组成是:

  • Layout Manager:Item的布局。
  • Adapter:为Item提供数据。
  • Item Decoration:Item之间的Divider。
  • Item Animator:添加、删除Item动画。

Layout Manager布局管理器

在最开始就提到,RecyclerView 能够支持各种各样的布局效果,这是 ListView 所不具有的功能,那么这个功能如何实现的呢?其核心关键在于 RecyclerView.LayoutManager 类中。从前面的基础使用可以看到,RecyclerView 在使用过程中要比 ListView 多一个 setLayoutManager 步骤,这个 LayoutManager 就是用于控制我们 RecyclerView 最终的展示效果的。

LayoutManager负责RecyclerView的布局,其中包含了Item View的获取与回收。

RecyclerView提供了三种布局管理器

  • LinerLayoutManager垂直或者水平列表方式展示Item
  • GridLayoutManager网格方式展示Item
  • StaggeredGridLayoutManager瀑布流方式展示Item

如果你想用 RecyclerView 来实现自己自定义效果,则应该去继承实现自己的 LayoutManager,并重写相应的方法,而不应该想着去改写 RecyclerView。

LayoutManager 常见 API

关于 LayoutManager 的使用有下面一些常见的 API(有些在 LayoutManager 实现的子类中)

    canScrollHorizontally();//能否横向滚动canScrollVertically();//能否纵向滚动scrollToPosition(int position);//滚动到指定位置setOrientation(int orientation);//设置滚动的方向getOrientation();//获取滚动方向findViewByPosition(int position);//获取指定位置的Item ViewfindFirstCompletelyVisibleItemPosition();//获取第一个完全可见的Item位置findFirstVisibleItemPosition();//获取第一个可见Item的位置findLastCompletelyVisibleItemPosition();//获取最后一个完全可见的Item位置findLastVisibleItemPosition();//获取最后一个可见Item的位置

上面仅仅是列出一些常用的 API 而已,更多的 API 可以查看官方文档,通常你想用 RecyclerView 实现某种效果,例如指定滚动到某个 Item 位置,但是你在 RecyclerView 中又找不到可以调用的 API 时,就可以跑到 LayoutManager 的文档去看看,基本都在那里。
另外还有一点关于瀑布流布局效果 StaggeredGridLayoutManager 想说的,看到网上有些文章写的示例代码,在设置了 StaggeredGridLayoutManager 后仍要去 Adapter 中动态设置 View 的高度,才能实现瀑布流,这种做法是完全错误的,之所以 StaggeredGridLayoutManager 的瀑布流效果出不来,基本是 item 布局的 xml 问题以及数据问题导致。如果要在 Adapter 中设置 View 的高度,则完全违背了 LayoutManager 的设计理念了。

如果要自定义LayoutManager,参考下面:

一个layoutmanager sample first

一个layoutmanager sample second

一个layoutmanager sample Threed

RecycleView的LayoutManager相关推荐

  1. 【Android】RecycleView简单仿漫画APP图片相关样式

    真的真的想不到起什么标题好了,这次的内容真的是太简单了,没有什么挑战性,一天以内就完成了.最近在学kotlin,也会有一份kotlin的代码,鉴于很多人都是从java开始进行android开发的,ko ...

  2. 高仿网易云音乐一(可扫描本地音乐播放)

    最近闲下来做了个仿网易云音乐的音乐播放器 效果图: 项目下载地址 https://github.com/PangHaHa12138/MusicPlayerdemo 闪屏 扫描本地音乐 播放 仿探探 仿 ...

  3. android 实用干货 - 收藏集 - 掘金

    Android 调用系统功能实现图片选择器,你可能会遇到的问题汇总 - 掘金 图片选择器在手机应用中屡见不鲜,设置头像.聊天传图等常见类似场景都需要使用.为了保持不同设备上体验的一致性和较好的兼容性, ...

  4. RecyclerView系列(三): 滑动事件检测

    1.概述 这是一个关于RecycleView滑动事件检测RecycleView滑动到顶部或者底部的状态. 可用于实现RecycleView加载更多或者刷新(虽然刷新可以直接用SwipeRefreshL ...

  5. Android模仿iOS iMessages10照片选择器的实现

    不知不觉已经接近半年多没有写过博客了,这段时间,也是我刚好毕业走出校园的时间,由于学习工作的原因,一直没有真正静下心来写下些什么东西.这个星期刚入了小米笔记本pro的坑,本着新电脑新生活的理念嘻嘻-- ...

  6. Android UI 阿里VLayout使用

    Android UI 阿里VLayout使用 开源地址(2017.03开源):https://github.com/alibaba/vlayout/ VirtualLayout是一个针对Recycle ...

  7. Android实用小技巧(持续更新)

    文章目录 给drawableRight设置点击事件 限制EditText可输入的字数,超出后提示文案 解决RecycleView布局中GridLayoutManager和StaggeredGridLa ...

  8. 有没有java自编歌曲,高仿网易云音乐一(可扫描本地音乐播放)

    最近闲下来做了个仿网易云音乐的音乐播放器 效果图: p1.png p2.png p3.png p4.png p5.png p6.png 项目下载地址 闪屏 1.gif 扫描本地音乐 3.gif 播放 ...

  9. RecycleView 动画实现

    文章http://blog.csdn.net/michael1112/article/details/53907868 描述了recycleView的原理. 本文章将动画进行了封装. 用接口回调将on ...

最新文章

  1. Visual studio 中调试ASP程序、Javascript 代码 - 刘稻博客
  2. JS操作Excel读取和写入(模板操作)
  3. [HOW TO]-ubuntu20.10搭建openjrok服务指南
  4. PowerDesigner16导出Sql修复
  5. CVE-2019-8341 Jinja2 RCE漏洞学习
  6. c#解压文件的实例方法
  7. html 段前空格_前端 -- HTML
  8. 《冷眼看IT》读书笔记--IT将成为服务行业
  9. 验证码计时 -- UIButton setTitle 闪烁问题解决方案
  10. Struts2拦截器详解
  11. APP原生开发与APP混合开发的区别
  12. 王牌战争文明重启服务器维护中,王牌战争文明重启常见问题大全 游戏问题QA...
  13. linux服务器插上u盘不显示,U盘在Linux下显示不正常的解决方法
  14. 有关Android插件化的一些总结思考,html5在移动端开发优势更明显
  15. javascript检测5到10位数的QQ号
  16. CabloyJS微信模块、企业微信模块已出齐
  17. 阅读Logback文档笔记--Logback的Appender配置
  18. hudson搭建经验总结
  19. BIND的进阶二:视图,日志,转发,子域的授权
  20. Spring任务执行和调度

热门文章

  1. 我的学习之路_第十四章_反射
  2. calling c++ from golang with swig--windows dll(一)
  3. Struts2返回Json数据(使用Struts2插件)
  4. oracle null的解析
  5. python3.8.4rc1_Python3.8.4rc1 官方正式版
  6. 设为首页 加入收藏 html,[javascript]js设为首页和加入收藏夹代码
  7. lateral函数oracle,ORACLE LATERAL-SQL-INJECTION 个人见解
  8. kde重启_重启崩溃的 KDE
  9. 122345 java_【每天算法2】:用java语言实现,一个组数:122345这6个数,打印出它所有可能的组合;要求4不能在第3位,3和5不能相连。 | 学步园...
  10. php读sqlite速度,SQLite数据库操作速度和性能评测