Как сделать разделитель в recyclerView?
Я хочу разделить items в RecyclerView разделителем как на картинке (серая полоска между контактами), как это сделать?
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recycleViewMain"
app:layout_constraintTop_toBottomOf="@+id/include">
Ответы (2 шт):
Автор решения: Dewerro
→ Ссылка
Попробуйте добавить
recycleViewMain.addItemDecoration(new DividerItemDecoration(getContext(),
DividerItemDecoration.VERTICAL));
Для кастомизации:
DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getContext(), R.drawable.divider));
Вы можете использовать какой-угодно разделитель, к примеру:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/colorPrimary"/>
<size android:height="0.5dp"/>
</shape>
Не забудьте добавить в build.gradle:
implementation 'com.android.support:recyclerview-v7:28.0.0'
Автор решения: pie
→ Ссылка
Если прямо как на скриншоте, то правильнее использовать CardView с отступами между элементами.
class MarginItemDecoration(
private val spaceSize: Int,
private val spanCount: Int = 1,
private val orientation: Int = GridLayoutManager.VERTICAL
) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
with(outRect) {
if (orientation == GridLayoutManager.VERTICAL) {
if (parent.getChildAdapterPosition(view) < spanCount) top = spaceSize
if (parent.getChildAdapterPosition(view) % spanCount == 0) left = spaceSize
} else {
if (parent.getChildAdapterPosition(view) < spanCount) left = spaceSize
if (parent.getChildAdapterPosition(view) % spanCount == 0) top = spaceSize
}
right = spaceSize
bottom = spaceSize
}
}
}
recyclerView.addItemDecoration(MarginItemDecoration(...))
Код не мой.
