LayoutManager详解及使用(一)基本知识

LayoutManager详解及使用(一)基本知识

Android小彩虹2021-08-19 23:09:15180A+A-

android LayoutManager RecyclerView

RecyclerView越来越流行,曾经的ListView也逐渐被淘汰,然而RecyclerView的作用绝不仅仅是代替ListView,正如他的名字“Recycler”,只要是需要重复使用的元素都可以用RecyclerView来实现。而这些各式各样的显示效果就不得不提LayoutManger这个类了,LayoutManager的作用就是负责元素的布局和复用。

内置的LayoutManager

Google提供了三个LayoutManger可以直接使用,分别是LinearLayoutManagerGridLayoutManagerStaggeredGridLayoutManager。只需要一段代码就可以轻松的设置RecyclerView子元素的排列方式

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
  • LinearLayoutManager
  • 线性布局,效果类似ListView,按线性顺序排列,可以设置水平方向和竖直方向。
    LayoutManager详解及使用(一)

  • GridLayoutManager
  • 表格布局,可以实现类似相册多列排列的效果
    LayoutManager详解及使用(一)

  • StaggeredGridLayoutManager
  • 动态表格布局,可以方便的实现瀑布流效果
    LayoutManager详解及使用(一)

LayoutManager的基本知识

自定义LayoutManager需要继承 RecyclerView.LayoutManager,必须重写方法generateDefaultLayoutParams(),可参考如下方法:

    @Override
    public RecyclerView.LayoutParams generateDefaultLayoutParams() {
        return new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT);
    }

这个方法基本上没有什么变化,不重点介绍,接下来介绍几个比较重要的方法:

重要方法

  • onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state)
  • 这个方法是进行子对象布局时执行的,它决定了RecyclerView的子对象放在什么位置,recycler是RecyclerView的回收池,stateRecyclerView的状态信息。当LayoutManager初始化的时候,会执行这个方法进行子对象的布局工作,当界面刷新的时候也会调用这个方法,需要注意的是该方法在初始化的时候会执行两遍。

  • canScrollVertically()/canScrollHorizontally()
  • 是否可以竖直/水平滑动,返回bool值。

  • scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state)
  • 手指竖直滑动的时候,会调用这个方法来获取RecyclerView子对象的滚动距离,返回值是int,同样也有scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state)

常用API

  • recycler.getViewForPosition(position)
  • 获取位置为position的View。

  • getPosition(View view)
  • 获取view的位置。

  • measureChildWithMargins(View child, int widthUsed, int heightUsed)
  • 测量view的宽高,包括外边距。

  • layoutDecoratedWithMargins(View child, int left, int top, int right,int bottom)
  • 将child显示在RecyclerView上面,left,top,right,bottom规定了显示的区域。

  • detachView(View child)
  • 临时回收view。

  • attachView(View child)
  • detachView(View child)回收的view拿回来。

  • detachAndScrapAttachedViews(RecyclerView.Recycler recycler)
  • 用指定的recycler临时移除所有添加的views。

  • detachAndScrapView(View child, RecyclerView.Recycler recycler)
  • 用指定的recycler临时回收view。

  • removeAndRecycleAllViews(RecyclerView.Recycler recycler)
  • 移除所有的view并且用给的recycler回收。

  • removeAndRecycleView(View child, RecyclerView.Recycler recycler)
  • 移除指定的view并且用给的recycler回收。

  • offsetChildrenHorizontal(int dx)
  • 水平移动所有的view,同样也有offsetChildrenVertical(int dy)

本文由 Bearever 创作,除注明转载/出处外,均为本站原创,转载前请务必署名
最后编辑时间为: 2017-09-19 15:44 星期二

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们