📅  最后修改于: 2023-12-03 15:08:32.783000             🧑  作者: Mango
使用 RecyclerView
在 Android 应用中展示列表或网格布局是很常见的,但是有时候我们需要在列表中添加分隔线来增强可读性。本文将介绍三种常见的方法来在 RecyclerView
中添加分隔线。
在 RecyclerView
中可以使用 DividerItemDecoration
类来添加系统自带的分隔线,只需要在 RecyclerView
对象上调用 addItemDecoration()
方法即可:
DividerItemDecoration itemDecoration = new DividerItemDecoration(recyclerView.getContext(), RecyclerView.VERTICAL);
recyclerView.addItemDecoration(itemDecoration);
其中,DividerItemDecoration
构造函数的第一个参数是上下文,第二个参数是分隔线的方向。我们也可以在布局文件中对分隔线进行自定义:
<androidx.recyclerview.widget.RecyclerView
...
android:divider="@drawable/item_divider"
android:dividerHeight="1dp" />
其中,divider
属性指定分隔线的样式,可以用一个 drawable 资源文件,dividerHeight
属性指定分隔线的高度。
我们也可以创建自定义的 ItemDecoration
类来添加分隔线。下面是一个示例代码,演示如何在纵向列表中添加一条灰色的分隔线:
public class CustomItemDecoration extends RecyclerView.ItemDecoration {
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
private Drawable mDivider;
public CustomItemDecoration(Context context) {
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable(0);
a.recycle();
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount - 1; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
}
我们只需要创建一个 CustomItemDecoration
对象,然后在 RecyclerView
对象上调用 addItemDecoration()
方法即可:
RecyclerView recyclerView = ...;
CustomItemDecoration itemDecoration = new CustomItemDecoration(context);
recyclerView.addItemDecoration(itemDecoration);
最后,我们也可以使用 ItemViewDecoration 库来添加分隔线。这个库提供了各种各样的分隔线效果,使用也非常简单。
首先,在应用的 build.gradle 文件中添加以下依赖:
implementation 'com.github.fondesa:recycler-view-item-decoration:2.1.0'
然后,创建一个 DividerBuilder
对象,并使用 addItemDecoration()
方法向 RecyclerView
中添加分隔线样式:
RecyclerView recyclerView = ...;
DividerBuilder dividerBuilder = new DividerBuilder.Builder(context)
.setStyle(DividerBuilder.Style.LIST)
.setColorRes(R.color.colorDivider)
.setSizeInDp(1)
.build();
recyclerView.addItemDecoration(dividerBuilder.build());
本文介绍了三种方法在 RecyclerView
中添加分隔线。使用系统自带的 DividerItemDecoration
是最简单的方法,如果需要更加自定义的效果,可以创建自定义的 ItemDecoration
类。最后,在依赖 ItemViewDecoration 库的情况下,可以选择多种预设的分隔线效果来满足不同的需求。