Android 设置可绘制以进行分割细分

Android 设置可绘制以进行分割细分,android,android-recyclerview,Android,Android Recyclerview,我正在尝试为DividerItemDecoration设置自定义可绘制(线),但没有成功。错在哪里 DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL); dividerItemDecoration.setDrawable(getContext().getResources().getDr

我正在尝试为DividerItemDecoration设置自定义可绘制(线),但没有成功。错在哪里

DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(getContext(),
                LinearLayoutManager.VERTICAL);
dividerItemDecoration.setDrawable(getContext().getResources().getDrawable(R.drawable.sk_line_divider));
XML形状:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:width="1dp"
        android:color="#000000">
    </stroke>
</shape>

将形状更改为矩形

例:


解决方案(以编程方式):

如果您只想更改分隔器的颜色,而不是创建自定义绘图,则可以使用彩色绘图:

DividerItemDecoration itemDecoration = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);
itemDecoration.setDrawable(new ColorDrawable(R.color.greycc));
recyclerView.addItemDecoration(itemDecoration);
如果大小与颜色有关,则可以使用GradientDrawable:

DividerItemDecoration itemDecoration = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);

GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{0xfff7f7f7, 0xfff7f7f7});
drawable.setSize(1,1);
itemDecoration.setDrawable(drawable);

recyclerView.addItemDecoration(itemDecoration);

请注意在数组中设置颜色值需要一个完整的八位十六进制值,否则将显示不正确的颜色,即0xFF3e3e,与0x3e3e相反。

如果要更改分隔符颜色,可以通过添加此行从应用主题中更改它

@color/your_color

顺便说一句,你不需要
DividerItemDecoration#setDrawable
,你可以在你的主题中设置
android:listcdivider
属性。效果惊人设置ColorDrawable不起作用-结果根本没有绘制装饰。
DividerItemDecoration itemDecoration = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);
itemDecoration.setDrawable(new ColorDrawable(R.color.greycc));
recyclerView.addItemDecoration(itemDecoration);
DividerItemDecoration itemDecoration = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);

GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{0xfff7f7f7, 0xfff7f7f7});
drawable.setSize(1,1);
itemDecoration.setDrawable(drawable);

recyclerView.addItemDecoration(itemDecoration);