Android : RecyclerView 最简单优雅的添加分割线 ItemDecoration

    先上结论:

    大家都知道 RecyclerView 默认是没有分割线的,我们可以用各种方式给 RecyclerView 添加上分割线,甚至可以简单粗暴的直接在布局文件中添加一条细线,但是大量的类似使用未免有些不方便并且让代码显得有些臃肿。

    如果只是需要简单的给一个最常用的垂直列表 RecyclerView 添加分割线,那么不用太麻烦,直接在给 RecyclerView 设置布局管理器(setLayoutManager)的同时使用下面一行代码添加分割线即可:

recyclerview.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

    此时 RecyclerView 便会添加系统默认的灰色的分割线:

RecyclerView默认灰色的分割线
RecyclerView默认的灰色分割线

    如果你需要修改一下默认分割线的颜色,或者有的 Android 版本添加上面那一行代码分割线并没有出现,那么此时在该Activity所用的 Theme(styles.xml文件) 中添加 listDivider 属性并指定一个颜色即可:

<item name="android:listDivider">@android:color/black</item>

效果如下:

RecyclerView设置分割线颜色
RecyclerView设置分割线颜色

    通常一个项目的 Activity 所用的 Theme 都是统一的,此处设置好后,每次 RecyclerView 需要添加分割线时只需一行代码即可搞定。如果你对分割线还有更高的要求,且听下文分解。

1、自定义分割线

private class SpaceItemDecoration extends RecyclerView.ItemDecoration {
        private int mSpace;

        public SpaceItemDecoration() {
            float density = getResources().getDisplayMetrics().density;
            this.mSpace = (int) (20 * density + 0.5f);
        }

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            super.getItemOffsets(outRect, view, parent, state);
            if (parent.getChildAdapterPosition(view) % spanCount == 0) {
                outRect.left = mSpace;
            }
        }
    }

2、

        rvList.setLayoutManager(new LinearLayoutManager(this));
        DividerItemDecoration divider = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        divider.setDrawable(new ColorDrawable(Color.BLACK));
        //RecyclerView添加分割线
        rvList.addItemDecoration(divider);
        DividerItemDecoration divider = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        divider.setDrawable(getResources().getDrawable(R.drawable.shape_recycler_divider));
        //RecyclerView添加分割线
        rvList.addItemDecoration(divider);

3、

rvList.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
    <style name="DesignCompatActivity" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:listDivider">@drawable/shape_recycler_divider</item>
    </style>

猜你喜欢

转载自blog.csdn.net/beita08/article/details/105294353