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)文章
Golang+Android基于HttpURLConnection實(shí)現(xiàn)的文件上傳功能示例
這篇文章主要介紹了Golang+Android基于HttpURLConnection實(shí)現(xiàn)的文件上傳功能,結(jié)合具體實(shí)例形式分析了Android基于HttpURLConnection的客戶端結(jié)合Go語(yǔ)言服務(wù)器端實(shí)現(xiàn)文件上傳功能的操作技巧,需要的朋友可以參考下2017-03-03
Android下的POS打印機(jī)調(diào)用的簡(jiǎn)單實(shí)現(xiàn)
本篇文章主要介紹了Android下的POS打印機(jī)調(diào)用的簡(jiǎn)單實(shí)現(xiàn),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
Android onSaveInstanceState和onRestoreInstanceState觸發(fā)的時(shí)機(jī)
這篇文章主要介紹了Android onSaveInstanceState和onRestoreInstanceState觸發(fā)的時(shí)機(jī)的相關(guān)資料,需要的朋友可以參考下2017-05-05
實(shí)例講解Android中ViewPager組件的一些進(jìn)階使用技巧
這篇文章主要介紹了Android中ViewPager組件的一些進(jìn)階使用技巧,包括添加標(biāo)題與onPagerChangeListener監(jiān)聽(tīng)使用等,需要的朋友可以參考下2016-03-03
Android自定義viewgroup快速滑動(dòng)(4)
這篇文章主要為大家詳細(xì)介紹了Android自定義viewgroup快速滑動(dòng)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
實(shí)例講解Android中的AutoCompleteTextView自動(dòng)補(bǔ)全組件
AutoCompleteTextView組件被用在輸入框中能實(shí)現(xiàn)輸入內(nèi)容自動(dòng)補(bǔ)全的功能,類似于大家平時(shí)用Google時(shí)的輸入聯(lián)想,這里我們來(lái)用實(shí)例講解Android中的AutoCompleteTextView自動(dòng)補(bǔ)全組件,特別是實(shí)現(xiàn)郵箱地址補(bǔ)全的例子,非常實(shí)用2016-05-05
Android 監(jiān)聽(tīng)屏幕是否鎖屏的實(shí)例代碼
今天小編通過(guò)本文給大家分享android如何監(jiān)聽(tīng)手機(jī)屏幕是否鎖屏。實(shí)現(xiàn)方法很簡(jiǎn)單,需要的朋友參考下吧2017-09-09

