一、何為ItemDecoration
在RecyclerView中,ItemDecoration被用於分隔RecyclerView的Item,它能夠為RecyclerView的每個Item提供一個背景或者空隙。它是一個abstract基類,需要通過繼承的方式來自定義。它能夠對ItemView的繪製進行攔截,並且自己繪製一些需要的內容,從而實現分隔線、空白格等效果。
二、實現ItemDecoration
在RecyclerView中添加ItemDecoration需要以下步驟:
1. 創建一個繼承自ItemDecoration的類,重寫onDraw() 和 getItemOffsets()方法。
2. 在RecyclerView中setAdapter()方法之後,通過addItemDecoration()方法來設置ItemDecoration。
public class MyItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public MyItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
// Add top margin only for the first item to avoid double space between items
if (parent.getChildAdapterPosition(view) == 0) {
outRect.top = space;
} else {
outRect.top = 0;
}
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
int paddingLeft = parent.getPaddingLeft();
int paddingRight = parent.getPaddingRight();
int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = parent.getChildAt(i);
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
int top = child.getBottom() + params.bottomMargin;
int bottom = top + space;
c.drawRect(paddingLeft, top, parent.getWidth() - paddingRight, bottom, paint);
}
}
}
三、實現效果
如下代碼所示,如果需要為RecyclerView設置ItemDecoration,可以通過addItemDecoration()方法來實現,需要傳入一個ItemDecoration的對象。下面以添加分隔線為例:
RecyclerView mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
MyItemDecoration myItemDecoration = new MyItemDecoration(10);
mRecyclerView.addItemDecoration(myItemDecoration);
運行效果如下圖所示:

四、總結
通過ItemDecoration,我們可以對RecyclerView進行更豐富的定製和裝飾,可以為RecyclerView的每個Item添加分隔線、背景等效果。該特性不僅能夠優化交互體驗,同時可以為RecyclerView添加更多的個性化元素,從而讓用戶更好地享受使用體驗。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/279451.html