RecyclerView底部分割線去除的方法
概述
之前我們拋出了一個(gè)問(wèn)題就是RecyclerView在顯示列表的時(shí)候,最底部也就是最后一個(gè)Item后面還有分割線,這大大影響界面的美觀。這篇文章就是解決這個(gè)問(wèn)題的。
自定義分割線
通過(guò)分析源碼后我們發(fā)現(xiàn)沒(méi)有相關(guān)的方法來(lái)處理這一需求,所以只能自定義分割線,通過(guò)上一篇文章的基礎(chǔ)我們知道肯定是修改getItemOffsets。那我們的思路是讓這個(gè)方法在到最后一個(gè)條目時(shí),不偏移分割線的間隙。同時(shí)也要修改onDraw方法,讓他不再繪制最后一條分割線。
private void drawHorizontal(Canvas c, RecyclerView parent, State state) { int childCount = parent.getChildCount() - 1; int left = 0; int top = parent.getPaddingTop(); int right = 0; int bottom = parent.getHeight() - parent.getPaddingBottom(); for (int i = 0; i < childCount; i++) { View view = parent.getChildAt(i); RecyclerView.LayoutParams params = (LayoutParams) view.getLayoutParams(); //考慮,padding left = view.getRight(); right = left + divider.getIntrinsicHeight(); //我們?cè)谧远xdrawable的是是,寫(xiě)死了高度,所以只能用高度 divider.setBounds(left, top, right, bottom); divider.draw(c); } } /** * 思路:就是獲取每個(gè)item,計(jì)算divider的left,top,right,bottom */ private void drawVertical(Canvas c, RecyclerView parent, State state) { int childCount = parent.getChildCount() - 1; int left = parent.getPaddingLeft(); int top = 0; int right = parent.getWidth() - parent.getPaddingRight(); //考慮右邊的padding int bottom = 0; for (int i = 0; i < childCount; i++) { //不繪制最后一個(gè)條目的分割線 View view = parent.getChildAt(i); RecyclerView.LayoutParams params = (LayoutParams) view.getLayoutParams(); //考慮,padding top = view.getBottom() + params.topMargin; //就是當(dāng)前view底部到頂部的距離 bottom = top + divider.getIntrinsicHeight() - params.bottomMargin; //就是top+divider高度 divider.setBounds(left, top, right, bottom); divider.draw(c); } } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) { int childAdapterPosition = parent.getChildAdapterPosition(view); int lastCount = parent.getAdapter().getItemCount() - 1; //如果當(dāng)前條目與是最后一個(gè)條目,就不設(shè)置divider padding if (childAdapterPosition == lastCount) { outRect.set(0, 0, 0, 0); return; } Log.d("TAG", childAdapterPosition + "," + lastCount); if (orientation == LinearLayoutCompat.HORIZONTAL) { outRect.set(0, 0, divider.getIntrinsicHeight(), 0); //0,0,30,0,設(shè)置寬度 } else { outRect.set(0, 0, 0, divider.getIntrinsicHeight()); //0,0,0,30,設(shè)置高度 } }
使用這個(gè)自定義分割線的效果圖如下:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android點(diǎn)擊無(wú)效驗(yàn)證的解決方法
這篇文章主要給大家介紹了關(guān)于android點(diǎn)擊無(wú)效驗(yàn)證的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Android之Viewpager+Fragment實(shí)現(xiàn)懶加載示例
本篇文章主要介紹了Android之Viewpager+Fragment實(shí)現(xiàn)懶加載示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03清楚詳解Android?進(jìn)程間圖傳遞圖形buffer原理
這篇文章主要為大家清楚的詳解了Android?進(jìn)程間圖傳遞圖形buffer原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Android實(shí)現(xiàn)簡(jiǎn)單的文件下載與上傳
今天小編就為大家分享一篇關(guān)于Android實(shí)現(xiàn)簡(jiǎn)單的文件下載與上傳,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12Android GPS室內(nèi)定位問(wèn)題的解決方法(location為null)
這篇文章主要為大家詳細(xì)介紹了Android GPS室內(nèi)定位問(wèn)題的解決方法,location為null,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02詳解Android中PopupWindow在7.0后適配的解決
本篇文章主要介紹了詳解Android中PopupWindow在7.0后適配的解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android Studio卡很久(loading)的問(wèn)題解決辦法
這篇文章主要介紹了Android Studio卡很久(loading很久)的問(wèn)題的相關(guān)資料,需要的朋友可以參考下2017-05-05android利用handler實(shí)現(xiàn)打地鼠游戲
這篇文章主要為大家詳細(xì)介紹了android利用handler實(shí)現(xiàn)打地鼠游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11Android實(shí)現(xiàn)在列表List中顯示半透明小窗體效果的控件用法詳解
這篇文章主要介紹了Android實(shí)現(xiàn)在列表List中顯示半透明小窗體效果的控件用法,結(jié)合實(shí)例形式分析了Android半透明提示框的實(shí)現(xiàn)與設(shè)置技巧,需要的朋友可以參考下2016-06-06