Как сделать отступ для делителя в линейном макете RecyclerView (т. Е. Добавить отступы, поля или вставку только в ItemDecoration)

После этого ответа я смог получить разделитель между элементами вертикального RecyclerView. Тем не менее, я также хотел немного отступить от разделительных линий.

Я смог сделать это путем жесткого кодирования в значение INDENT в RecyclerView.ItemDecoration подкласс.

int INDENT = 20;

@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { 

    int left = parent.getPaddingLeft() + INDENT;
    int right = parent.getWidth() - parent.getPaddingRight() - INDENT;

    // ...

        divider.setBounds(left, top, right, bottom);

    // ...
} 

Однако тогда мне пришлось бы также возиться с независимыми от плотности пикселями.

Наконец-то я нашел решение, похожее на то, как оно было сделано с ListView, поэтому я поделюсь им как ответом ниже.

1 ответ

Решение

использование inset

рисуем /my_divider.xml

<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:insetLeft="40dp"
       android:insetRight="40dp" >

    <shape>
        <size android:height="1dp"/>
        <solid android:color="@color/recyclerview_divider" />
    </shape>

</inset>

Используя конструктор, который принимает идентификатор ресурса, как показано в этом ответе, мы можем предоставить идентификатор нашего XML-файла с пользовательским разделителем.

recyclerView.addItemDecoration(
        new DividerItemDecoration(getActivity(), R.drawable.my_divider));

Другие вопросы по тегам