Как отступать делитель в линейном макете 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));