RecyclerView机制解析: Measure

RecyclerView将布局的职责委托给了LayoutManager类,而测量和布局联系很紧密,因此测量的一部分逻辑也被委托给了LayoutManager,RecyclerView大多数情况下会基于LayoutManager布局之后的ChildView分布情况来决定自己的最终尺寸。RecyclerView支持两种measure模式,取决于LayoutManager的mAutoMeasure属性:
摘要由CSDN通过智能技术生成
  1. RecyclerView将布局的职责委托给了LayoutManager类,而测量和布局联系很紧密,因此测量的一部分逻辑也被委托给了LayoutManager,RecyclerView大多数情况下会基于LayoutManager布局之后的ChildView分布情况来决定自己的最终尺寸

  2. RecyclerView支持两种measure模式,取决于LayoutManager的mAutoMeasure属性:

    1. AutoMeasure(LinearLayoutManager和GridLayoutManager使用这种模式)
    2. 自定义Measure(StaggerLayoutManager在一定条件下会使用这种模式,不过这次不介绍)
  3. 下面所有的逻辑基于AutoMeasure模式:

  4. Measure的一部分逻辑被委派给了LayoutManager,LayoutManager有自己的onMeasure方法来接收RecyclerView在这次测量中的MeasureSpec,同时LayoutManager还会记录RecycleView的MeasureSpec**供内部布局时使用(主要是为了测量ChildView)**。

  5. 如果RecylcerView本次测量基于的MeasureSpec模式在宽/高上都是EXACTLY, 即ParentView已经给RecyclerView指定了具体的尺寸,这种情况下,RecyclerView就遵照ParentView的指示,将自己的尺寸设置为指定的尺寸。在代码逻辑中的流程是这样的:

    1. RecyclerView在onMeasure中调用LayoutManager的onMeasure方法
    2. LayoutManager onMeasure的默认实现(Support库中的三个子LayoutManager均使用了默认的实现)会调用RecyclerView的defaultOnMeasure函数
    3. defaultOnMeasure会调用LayoutManager.chooseSize基于当前测量约束MeasureSpec,Padding以及MinimumWidth/Height得到一个合适的height/width
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值