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留下的。
如下图所示:


RecyclerView系列 - 源码分析条目显示问题_第1张图片
图片.png

你可能感兴趣的:(RecyclerView系列 - 源码分析条目显示问题)