📌  相关文章
📜  如何在 Android RecyclerView 中添加分隔线?(1)

📅  最后修改于: 2023-12-03 15:08:32.783000             🧑  作者: Mango

在 Android RecyclerView 中添加分隔线

使用 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 库

最后,我们也可以使用 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 库的情况下,可以选择多种预设的分隔线效果来满足不同的需求。