RecyclerView系列 - 解决分割线的bug

1. 说明


我们前边讲解的 给 RecyclerView设置分割线时,是有一个bug的,那就是最右边和最下边都会有一条线的,那么我们这节课就给大家解决这样的一个问题。

2. 思路分析


其实还是在 getItemOffsets()方法中留出分割线的位置,但是这次需要注意的是在每个item控件的最右边和 最下边的分割线不要去留位置就行,所以在这里需要判断:
2.1 如果是最后一列,让right = 0 ;
2.2 如果是最后一行,让bottom = 0 ;
并且在这里涉及到2个知识点的计算方式:


获取View在 父View中的位置:

// 获取当前位置
int currentPosition = ((RecyclerView.LayoutParams) view.getLayoutParams()).getViewLayoutPosition();

获取RecyclerView 的列数

/**
     * 获取 RecyclerView的列数
     * @param parent
     * @return
     */
    private int getSpanCount(RecyclerView parent) {

        // 获取列数  列数存在于 GridLayoutManager中 ,所以这里需要强转,因为这里可能是
        // LinearLayoutManager也可能是GridLayoutManager
        // 所以这里需要判断当前是 LinearLayoutManager还是 GridLayoutManager
        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
        // 如果当前是GridView的样式的话 , 就强转为GridLayoutManager
        if (layoutManager instanceof GridLayoutManager){  
            GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;

            // 列数
            int spanCount = gridLayoutManager.getSpanCount() ;

            return  spanCount;
        }

        //  如果上边不是GridView的话,就return 1 ,表示返回的是 ListView的列数 为1列
        return 1;   
    }

3. 现象


这里会有一个现象:
在GridView样式中,如果GridView 有3列,那么,最后一列宽度是比 前两列的宽度都要大, 如图所示:


图片.png

这里 C的宽度 = A的宽度+分割线宽度 或者
C的宽度 = B的宽度+分割线宽度

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

相关阅读更多精彩内容

友情链接更多精彩内容