RecyclerView系列 - 源码分析条目显示问题

1. 说明


上节课我们已经说了,RecyclerView在显示条目的时候,会有一个问题,就是如果样式是GridView的话,那么最后一列的宽度比前边几列都要宽,而且宽度是第一列宽度加上分割线的宽度,或者第二列的宽度加上分割线的宽度,那么下边我们就通过源码来分析下。

2. 源码分析


public void measureChild(View child, int widthUsed, int heightUsed) {
            final LayoutParams lp = (LayoutParams) child.getLayoutParams();

            final Rect insets = mRecyclerView.getItemDecorInsetsForChild(child);
            //  会不断的回调  getItemOffsets()方法
            widthUsed += insets.left + insets.right;
            heightUsed += insets.top + insets.bottom;
            final int widthSpec = getChildMeasureSpec(getWidth(), getWidthMode(),
                    getPaddingLeft() + getPaddingRight() + widthUsed, lp.width,
                    canScrollHorizontally());
            final int heightSpec = getChildMeasureSpec(getHeight(), getHeightMode(),
                    getPaddingTop() + getPaddingBottom() + heightUsed, lp.height,
                    canScrollVertically());
            if (shouldMeasureChild(child, widthSpec, heightSpec, lp)) {

                // 测量的时候会考虑分割线的大小、分割预留的位置
                child.measure(widthSpec, heightSpec);
            }
        }

通过阅读源码我们知道,分割线所留出来的位置其实是占用了子View的位置,所以才会出现有的条目宽度不一的情况,这个bug可能不能去解决,因为这个是Google留下的。
如下图所示:


图片.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容