RecyclerView的ItemDecoration机制相对比较简单,不过扩展性很强,在ChildView的测量和展示上为使用者提供了极大的发挥空间,像divider/项目高亮/项目边框等效果都可以轻松实现
ItemDecoration可以同时存在复数个,维护在一个列表中,影响是可以叠加的,ItemDecoration的作用顺序从列表头到列表尾。
- addItemDecoration可以添加一个ItemDecoration。
- removeItemDecoration可以删除一个ItemDecoration。
- invalidateItemDecorations表示当前的ItemDecoration发生了变化,需要更新。
- 因为RecyclerView**继承自ViewGroup,默认其willNoDraw是true(意味着其onDraw函数不会被调用),但是ItemDecoration的onDraw需要在RecyclerView的onDraw回调点进行,因此添加/删除ItemDecoraton时会根据情况改变willNotDraw属性**。
- 应为ItemDecoration会影响ChildView的测量,进而影响布局,还影响绘制,因此ItemDecoration的添加/删除/Invalidate会触发requestLayout来重新测量布局绘制.
- 在Scroll/Layout的过程中禁止添加/删除ItemDecoration。
先看ItemDecoration是如何影响ChildView的测量:
- 在
RecyclerView机制解析: ItemDecoration
最新推荐文章于 2024-09-07 09:58:01 发布
本文详细解析了RecyclerView的ItemDecoration机制,阐述了如何利用ItemDecoration实现divider、项目高亮和边框等效果。ItemDecoration可叠加,添加、删除或更新时会触发重新测量和布局。在ChildView的测量过程中,ItemDecoration通过measureChildWithMargins影响约束,而在布局阶段,通过layoutDecoratedWithMargins调整ChildView的位置。在绘制阶段,onDraw和onDrawOver回调分别在ChildView绘制前后进行,允许在整个Canvas上绘制。
摘要由CSDN通过智能技术生成