Set drawable for DividerItemDecoration

AndroidAndroid Recyclerview

Android Problem Overview


I'm trying to set my custom drawable (line) for DividerItemDecoration, but with no success. Where is the mistake?

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

XML shape:

<?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>

Android Solutions


Solution 1 - Android

Change the shape to rectangle.

Ex:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <size
        android:width="1dp"
        android:height="1dp" />
    <solid android:color="@color/primary" />
</shape>

Solution 2 - Android

Solution (Programmatically):

If you just want to change the color for the dividers instead of creating a custom drawable you can use a ColorDrawable:

DividerItemDecoration itemDecoration = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);
itemDecoration.setDrawable(new ColorDrawable(R.color.greycc));
recyclerView.addItemDecoration(itemDecoration);

If the size matters in addition to colors you can use a GradientDrawwable:

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);

Please note that setting the color values in the array requires a full octet of hex values, otherwise incorrect colors will be shown i.e., 0xFF3E3E3E as opposed to 0X3E3E3E.

Solution 3 - Android

If you want to change divider color, you can change it from you AppTheme by adding this line
<item name="android:listDivider">@color/your_color</item>

Solution 4 - Android

DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(getContext(),
                LinearLayoutManager.HORIZONTAL);
dividerItemDecoration.setDrawable(getContext().getResources().getDrawable(R.drawable.line_decoration));
        recyclerView.addItemDecoration(dividerItemDecoration);
        DividerItemDecoration dividerItemDecorationVertical = new DividerItemDecoration(getContext(),
                LinearLayoutManager.VERTICAL);

        dividerItemDecorationVertical.setDrawable(getContext().getResources().getDrawable(R.drawable.line_decoration));
        recyclerView.addItemDecoration(dividerItemDecorationVertical);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3352926View Question on Stackoverflow
Solution 1 - AndroidJonathan VicenteView Answer on Stackoverflow
Solution 2 - Android6rchidView Answer on Stackoverflow
Solution 3 - AndroidRaedView Answer on Stackoverflow
Solution 4 - AndroidRahul MalhotraView Answer on Stackoverflow