Android 设置 RecycleView 分割线颜色

1. 理解需求

首先,我们需要明确问题需求:如何设置 RecyclerView 的分割线颜色。

2. 确定解决方案

为了达到目标,我们可以通过自定义分割线的方式来设置 RecyclerView 的分割线颜色。具体步骤如下:

flowchart TD
    A(理解需求) --> B(确定解决方案)
    B --> C(查找资料)
    C --> D(编写代码实现)
    D --> E(测试)

3. 查找资料

在开始编写代码之前,我们需要查找相关资料,了解如何自定义 RecyclerView 的分割线。

4. 编写代码实现

根据我们的需求,我们可以通过自定义一个 DividerItemDecoration 类来实现 RecyclerView 的分割线颜色设置。具体步骤如下:

  1. 首先,在项目的 res/drawable 目录下创建一个名为 divider_line.xml 的文件,用于定义分割线的样式和颜色。
<!-- divider_line.xml -->
<shape xmlns:android="
    <size android:height="1dp" />
    <solid android:color="#FF0000" /> <!-- 设置分割线颜色 -->
</shape>
  1. 接下来,在项目的 utils 包下创建一个名为 DividerItemDecoration 的 Java 类,用于自定义分割线。
// DividerItemDecoration.java

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.view.View;

import androidx.recyclerview.widget.RecyclerView;

public class DividerItemDecoration extends RecyclerView.ItemDecoration {
    private Drawable mDivider;

    public DividerItemDecoration(Context context, int resId) {
        mDivider = context.getResources().getDrawable(resId);
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - 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 + mDivider.getIntrinsicHeight();

            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }
}
  1. 现在,我们可以在需要设置分割线的地方调用 DividerItemDecoration 类来设置分割线的颜色。
// MainActivity.java

import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化 RecyclerView
        mRecyclerView = findViewById(R.id.recyclerView);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        // 设置分割线颜色
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this, R.drawable.divider_line));
    }
}

5. 测试

编写完代码后,我们需要进行测试以确保分割线颜色被正确设置。打开应用,查看 RecyclerView 的分割线是否显示为我们所设置的颜色。

完成

通过以上步骤,我们成功实现了设置 RecyclerView 分割线颜色的功能。

附录

1. divider_line.xml

<shape xmlns:android="
    <size android:height="1dp" />
    <solid android:color="#FF0000" /> <!-- 设置分割线颜色 -->
</shape>

2. DividerItemDecoration.java

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.view.View;

import androidx.recyclerview.widget.RecyclerView;

public class DividerItemDecoration extends RecyclerView.ItemDecoration {
    private Drawable mDivider;

    public DividerItemDecoration(Context context, int resId) {
        mDivider = context.getResources().getDrawable(resId);
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - 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.get