RecyclerView系列 - 解決分割線(xiàn)的bug

1. 說(shuō)明


我們前邊講解的 給 RecyclerView設(shè)置分割線(xiàn)時(shí),是有一個(gè)bug的,那就是最右邊和最下邊都會(huì)有一條線(xiàn)的,那么我們這節(jié)課就給大家解決這樣的一個(gè)問(wèn)題。

2. 思路分析


其實(shí)還是在 getItemOffsets()方法中留出分割線(xiàn)的位置,但是這次需要注意的是在每個(gè)item控件的最右邊和 最下邊的分割線(xiàn)不要去留位置就行,所以在這里需要判斷:
2.1 如果是最后一列,讓right = 0 ;
2.2 如果是最后一行,讓bottom = 0 ;
并且在這里涉及到2個(gè)知識(shí)點(diǎn)的計(jì)算方式:


獲取View在 父View中的位置:

// 獲取當(dāng)前位置
int currentPosition = ((RecyclerView.LayoutParams) view.getLayoutParams()).getViewLayoutPosition();

獲取RecyclerView 的列數(shù)

/**
     * 獲取 RecyclerView的列數(shù)
     * @param parent
     * @return
     */
    private int getSpanCount(RecyclerView parent) {

        // 獲取列數(shù)  列數(shù)存在于 GridLayoutManager中 ,所以這里需要強(qiáng)轉(zhuǎn),因?yàn)檫@里可能是
        // LinearLayoutManager也可能是GridLayoutManager
        // 所以這里需要判斷當(dāng)前是 LinearLayoutManager還是 GridLayoutManager
        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
        // 如果當(dāng)前是GridView的樣式的話(huà) , 就強(qiáng)轉(zhuǎn)為GridLayoutManager
        if (layoutManager instanceof GridLayoutManager){  
            GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;

            // 列數(shù)
            int spanCount = gridLayoutManager.getSpanCount() ;

            return  spanCount;
        }

        //  如果上邊不是GridView的話(huà),就return 1 ,表示返回的是 ListView的列數(shù) 為1列
        return 1;   
    }

3. 現(xiàn)象


這里會(huì)有一個(gè)現(xiàn)象:
在GridView樣式中,如果GridView 有3列,那么,最后一列寬度是比 前兩列的寬度都要大, 如圖所示:


圖片.png

這里 C的寬度 = A的寬度+分割線(xiàn)寬度 或者
C的寬度 = B的寬度+分割線(xiàn)寬度

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容