Android 給RecyclerView添加分割線的具體步驟(分享)
【吐槽】RecyclerView沒(méi)有提供分割線的方法,想要加個(gè)線還要自己畫(huà),點(diǎn)擊事件的監(jiān)聽(tīng)都要自己實(shí)現(xiàn),不過(guò)真的好用。
給RecyclerView添加分割線的步驟
1、新建類繼承于RecyclerView.ItemDecoration,此為是抽象類:
public static abstract class ItemDecoration {
public void onDraw(Canvas c, RecyclerView parent, State state) {
onDraw(c, parent);
}
public void onDrawOver(Canvas c, RecyclerView parent, State state) {
onDrawOver(c, parent);
}
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),
parent);
}
}
“onDraw和onDrawOver,顯然,這兩個(gè)方法是用于繪制的,那么繪制分割線的邏輯可以放在這里面,它們二者的具體區(qū)別是:onDraw是在item view繪制之前調(diào)用,而onDrawOver是在item view繪制之后調(diào)用,因此我們一般選擇重寫(xiě)其中一個(gè)方法即可。getItemOffsets,這個(gè)方法是告訴RecyclerView在繪制完一個(gè)item view的時(shí)候,應(yīng)該留下多少空位,以便于繪制分割線?!?/p>
好像邏輯也不難,但是真的好麻煩,比如我要給我的瀑布流布局加一條系統(tǒng)自帶的分割線,系統(tǒng)自帶的就行,那我要新建一個(gè)實(shí)現(xiàn)類:
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
//使用系統(tǒng)自帶的listDivider
private static final int[] ATTRS = new int[]{
android.R.attr.listDivider
};
private Drawable mDivider;
public DividerItemDecoration(Context context) {
super();
// 從TypedArray中得到一個(gè)Drawable對(duì)象
final TypedArray typedArray = context.obtainStyledAttributes(ATTRS);
mDivider = typedArray.getDrawable(0);
typedArray.recycle();
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
drawDivider(c, parent);
}
/**
* 遍歷childView,為每一個(gè)childView描繪divider
* @param c 畫(huà)布對(duì)象
* @param parent 父控件即RecyclerView
*/
private void drawDivider(Canvas c, RecyclerView parent) {
//獲取分割線的上邊距,即RecyclerView的padding值
final int top = parent.getPaddingTop();
//分割線下邊距
final int bottom = parent.getHeight() - parent.getPaddingBottom();
final int childCount = parent.getChildCount();
//遍歷所有item view,為它們的右邊方繪制分割線,就是計(jì)算出上下左右四個(gè)值畫(huà)一個(gè)矩形
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int left = child.getRight() + params.rightMargin;
final int right = left + mDivider.getIntrinsicWidth();
//畫(huà)右邊的divider
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
//畫(huà)完右邊畫(huà)底邊
mDivider.setBounds(child.getLeft() + child.getPaddingLeft(), child.getBottom() + params.bottomMargin,
child.getRight() - child.getPaddingRight(), child.getBottom() + mDivider.getIntrinsicHeight());
mDivider.draw(c);
}
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(0, 0, mDivider.getIntrinsicHeight(), mDivider.getIntrinsicHeight());
}
}
2、為RecyclerView添加寫(xiě)好的ItemDecoration即可
mRecyclerView.addItemDecoration(new DividerItemDecoration(this));
3、沒(méi)有3。
其實(shí)從 RecyclerView.ItemDecoration 的名字就看得出來(lái),它是RecyclerView的item的裝飾品,也就是說(shuō),除了畫(huà)分割線,想畫(huà)什么都是可以的。
以上這篇Android 給RecyclerView添加分割線的具體步驟(分享)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)RecyclerView添加分割線的簡(jiǎn)便方法
- Android RecyclerView實(shí)現(xiàn)水平、垂直方向分割線
- RecyclerView底部分割線去除的方法
- android中RecyclerView自定義分割線實(shí)現(xiàn)
- Android RecyclerView網(wǎng)格布局(支持多種分割線)詳解(2)
- Android中RecyclerView上拉下拉,分割線,多條目的實(shí)例代碼
- 萬(wàn)能RecyclerView分割線
- RecyclerView消除底部分割線的方法
- RecyclerView的萬(wàn)能分割線
- RecyclerView自定義分割線
相關(guān)文章
Android webview和js互相調(diào)用實(shí)現(xiàn)方法
這篇文章主要介紹了 Android webview和js互相調(diào)用實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-10-10
基于flutter?sound插件實(shí)現(xiàn)錄音與播放功能
這篇文章主要介紹了基于flutter?sound插件實(shí)現(xiàn)錄音與播放功能,介紹了如何錄音,如何播放本地和遠(yuǎn)程音頻文件,以及如何實(shí)現(xiàn)動(dòng)畫(huà),在錄制完音頻文件后如何上傳,這些都是我們平常使用這個(gè)功能會(huì)遇到的問(wèn)題。在使用的過(guò)程中遇到的問(wèn)題也有列出,需要的朋友可以參考下2022-05-05
Android基礎(chǔ)之Fragment與Activity交互詳解
以下小編就為大家介紹一下Fragment跟Activity之間的關(guān)系。需要的朋友可以過(guò)來(lái)參考下2013-07-07
Android手機(jī)衛(wèi)士之設(shè)置密碼對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android手機(jī)衛(wèi)士之設(shè)置密碼對(duì)話框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Android Force Close 出現(xiàn)的異常原因分析及解決方法
本文給大家講解Android Force Close 出現(xiàn)的異常原因分析及解決方法,forceclose意為強(qiáng)行關(guān)閉,當(dāng)前應(yīng)用程序發(fā)生了沖突。對(duì)android force close異常分析感興趣的朋友一起通過(guò)本文學(xué)習(xí)吧2016-08-08
android開(kāi)發(fā)基礎(chǔ)教程—文件存儲(chǔ)功能實(shí)現(xiàn)
文件存儲(chǔ)功能在實(shí)現(xiàn)數(shù)據(jù)讀寫(xiě)時(shí)會(huì)頻繁使用到,接下來(lái)介紹文件存儲(chǔ)功能的實(shí)現(xiàn),感興趣的朋友可以了解下2013-01-01
Android編程之ListPreference用法實(shí)例分析
這篇文章主要介紹了Android編程之ListPreference用法,結(jié)合實(shí)例形式較為詳細(xì)的分析說(shuō)明了ListPreference的功能、用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2015-12-12

