Bagaimana garis pembagi dapat ditambahkan dalam Android RecyclerView?

221

Saya sedang mengembangkan aplikasi android tempat saya menggunakan RecyclerView. Saya perlu menambahkan pembagi di RecyclerView. Saya mencoba menambahkan -

recyclerView.addItemDecoration(new
     DividerItemDecoration(getActivity(),
       DividerItemDecoration.VERTICAL_LIST));

di bawah ini adalah kode xml saya -

   <android.support.v7.widget.RecyclerView
    android:id="@+id/drawerList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    />
pertanyaan 8
sumber
3
i guees ini akan membantu Anda stackoverflow.com/q/24618829/942224
Sanket Kachhela
Untuk menampilkan pembagi tanpa baris terakhir, gunakan ini
Kishan Solanki
Saya pikir kode Anda sudah benar. Saya tidak melihat masalah.
Rohit Rawat

Jawaban:

282

Dalam pembaruan Oktober 2016, perpustakaan dukungan v25.0.0 sekarang memiliki implementasi default pembagi horizontal dan vertikal dasar yang tersedia!

https://developer.android.com/reference/android/support/v7/widget/DividerItemDecoration.html

 recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
Aditya Vyas-Lakhan
sumber
3
Hai terima kasih atas informasinya! Apakah ada cara untuk menghapus pembagi setelah item terakhir? Saya hanya punya CardView di mana Daftar diimplementasikan dan pembagi + bayangan cardview di bagian bawah terlihat tidak bagus!
Maxi
4
Saya memiliki masalah yang sama, dan menyelesaikannya dengan memperluas DividerItemDecoration dan mengesampingkan getItemOffsets, kemudian hanya memanggil super jika saya tidak berada pada item pertama. if(parent.getChildAdapterPosition(view) == state.getItemCount() - 1)lalu kembali, panggil saja superclass ' getItemOffsets().
Robin
13
Alih-alih mLayoutManager.getOrientation(), saya menggunakan DividerItemDecoration.VERTICALdan berhasil, karena RecyclerView saya vertikal.
Aaron Lelevier
2
apakah ada cara untuk mengubah warna pembagi menggunakan built in way ini?
j2emanue
1
@ V. Kalyuzhnyu @android:attr/listDividerdalam tema aplikasi tidak menampilkan pembagi jika itu adalah sumber daya warna, saya harus membuat bentuk yang dapat digambar dengan warna saya dengan ketinggian tetap.
A. Ferrand
226

Cara Tepat adalah untuk menentukan ItemDecorationuntuk RecyclerViewadalah sebagai berikut

SimpleDividerItemDecoration.java

public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration {
    private Drawable mDivider;

    public SimpleDividerItemDecoration(Context context) {
        mDivider = context.getResources().getDrawable(R.drawable.line_divider);
    }

    @Override
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - parent.getPaddingRight();

        int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = parent.getChildAt(i);

            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

            int top = child.getBottom() + params.bottomMargin;
            int bottom = top + mDivider.getIntrinsicHeight();

            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }
}

line_divider.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <size
        android:width="1dp"
        android:height="1dp" />

    <solid android:color="@color/dark_gray" />

</shape>

Akhirnya atur seperti ini

recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));

Edit

Seperti yang ditunjukkan oleh @lan Solitar

context.getResources().getDrawable(R.drawable.line_divider); 

didepresiasi alih-alih yang bisa Anda gunakan

ContextCompat.getDrawable(context,R.drawable.line_divider);
NJ
sumber
3
context.getResources (). getDrawable (R.drawable.line_divider) sekarang tidak digunakan lagi.
Alan S.
2
Tidak masalah. Ini adalah jawaban yang bagus dan berhasil dengan baik untuk saya. Terima kasih.
Alan S.
3
Ini bekerja dengan baik di pihak saya. Namun, saya bertanya-tanya mengapa tidak menambahkan <View> sederhana untuk pemisah ini ke tata letak untuk setiap sel? Jauh lebih sedikit kodenya. Apakah solusi ini kurang bijak kinerjanya? tx
Greg
4
Masalah dengan implementasi ini muncul jika Anda mencoba menggesek atau memindahkan item.
TerNovi
1
@NJ Terima kasih Bung, Anda telah menghemat waktu saya.
Suhas Bachewar
40

Jika Anda ingin memiliki pembagi horizontal dan vertikal:

  1. Tentukan drawer pembagi horizontal & vertikal:

    horizontal_divider.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
      <size android:height="1dip" />
      <solid android:color="#22000000" />
    </shape>

    vertical_divider.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <size android:width="1dip" />
        <solid android:color="#22000000" />
    </shape>
  2. Tambahkan segmen kode ini di bawah:

    DividerItemDecoration verticalDecoration = new DividerItemDecoration(recyclerview.getContext(),
            DividerItemDecoration.HORIZONTAL);
    Drawable verticalDivider = ContextCompat.getDrawable(getActivity(), R.drawable.vertical_divider);
    verticalDecoration.setDrawable(verticalDivider);
    recyclerview.addItemDecoration(verticalDecoration);
    
    DividerItemDecoration horizontalDecoration = new DividerItemDecoration(recyclerview.getContext(),
            DividerItemDecoration.VERTICAL);
    Drawable horizontalDivider = ContextCompat.getDrawable(getActivity(), R.drawable.horizontal_divider);
    horizontalDecoration.setDrawable(horizontalDivider);
    recyclerview.addItemDecoration(horizontalDecoration);
Mohammed Mukhtar
sumber
Itu berhasil. Tetapi jika Anda mengubah horizontal_divider.xml untuk membagi lebar dan vertical_divider.xml untuk membagi tinggi, Anda dapat membuat masing DividerItemDecoration- masing seperti ini: verticalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.VERTICAL);dan horizontalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.HORIZONTAL);.
Ruben O. Chiavone
33

Semua jawaban ini membuat saya dekat tetapi mereka masing-masing kehilangan detail utama. Setelah sedikit riset, saya menemukan rute termudah untuk menjadi kombinasi dari 3 langkah ini:

  1. Gunakan DividerItemDecoration perpustakaan dukungan
  2. Buat pembagi dengan warna yang tepat
  3. Tetapkan pembagi ini di tema Anda sebagai listDivider

Langkah 1: saat mengonfigurasi RecyclerView

recyclerView.addItemDecoration(
        new DividerItemDecoration(context, layoutManager.getOrientation()));

Langkah 2: dalam file seperti res / drawable / divider_gray.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <size android:width="1px" android:height="1px" />
    <solid android:color="@color/gray" />
</shape>

Langkah 3: dalam tema aplikasi

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Other theme items above -->
    <item name="android:listDivider">@drawable/divider_gray</item>
</style>

EDIT: Diperbarui untuk melewati pembagi terakhir:
Setelah menggunakan ini sedikit, saya menyadari itu menggambar pembagi setelah item terakhir, yang menjengkelkan. Jadi saya memodifikasi Langkah 1 sebagai berikut untuk menggantikan perilaku default di DividerItemDecoration (tentu saja, membuat kelas terpisah adalah pilihan lain):

recyclerView.addItemDecoration(
        new DividerItemDecoration(context, layoutManager.getOrientation()) {
            @Override
            public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                int position = parent.getChildAdapterPosition(view);
                // hide the divider for the last child
                if (position == parent.getAdapter().getItemCount() - 1) {
                    outRect.setEmpty();
                } else {
                    super.getItemOffsets(outRect, view, parent, state);
                }
            }
        }
);
gMale
sumber
7
Override getItemOffsets sepertinya tidak bekerja untuk saya. Bahkan jika saya menimpa dan tidak pernah memanggil super, pembagi masih ditarik. Tidak yakin apa yang berubah.
lostintranslation
2
Itu tidak bekerja untuk saya juga. Pembagi terakhir masih ditampilkan.
Sotti
1
Saya akhirnya membuat kelas pembagi saya sendiri dengan menyalin sumber DividerItemDecoration, dan mengubah sedikit untuk tidak menggambar pembagi terakhir. Dalam metode menggambar, abaikan saja tampilan anak terakhir: for (int i = 0; i < childCount; i++) ubah kefor (int i = 0; i < childCount - 1; i++)
kientux
Karena ItemDecoration diambil sebelum item daftar ("di bawah" item daftar), solusi yang diberikan hanya berfungsi jika item daftar Anda memiliki latar belakang buram 100%, atau ketika dekorasi yang dapat digambar 100% transparan (sehingga pengguna melihat latar belakang recyclerView). Kalau tidak, pembagi terlihat tidak peduli apa yang Anda kembalikan di getItemOffsets ()
ernazm
31

Tambahkan saja View pada akhir adapter item Anda:

<View
 android:layout_width="match_parent"
 android:layout_height="1dp"
 android:background="#FFFFFF"/>
Lucas Diego
sumber
25
Dengan solusi ini Anda akan mendapatkan juga garis pembagi di akhir daftar.
Aria
5
Baris terakhir dapat dihapus secara programatik dengan mengatakan sesuatu seperti ini di onBindViewHolder if(position == getItemCount() - 1) { mDividerView.setVisibility(View.INVISIBLE) }Atau harus ada cara lain untuk melakukan ini.
Ali Kazi
sebagian besar waktu, garis terakhir dengan 1pxketinggian, tidak terlihat oleh mata kita
Mehdi Khademloo
@LucasDiego Ini akan berhasil, tetapi kita tahu bahwa penggelembungan itu mahal.
Zohra Khan
21

Berikut adalah kode untuk pembagi kustom sederhana (pembagi vertikal / tinggi 1dp / hitam):

Andaikan Anda memiliki Perpustakaan Dukungan:

compile "com.android.support:recyclerview-v7:25.1.1"

kode java

    DividerItemDecoration divider = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);
    divider.setDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.my_custom_divider));
    recyclerView.addItemDecoration(divider);

kemudian sampel file custom_divider.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <size android:height="1dp" />
    <solid android:color="@android:color/black" />
</shape>
Tobliug
sumber
10

Buat file xml terpisah di folder res / drawable

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <size android:height="1dp" />
    <solid android:color="@android:color/black" />
</shape>

Hubungkan file xml itu (your_file) di aktivitas utama , seperti ini:

DividerItemDecoration divider = new DividerItemDecoration(
    recyclerView.getContext(),
    DividerItemDecoration.VERTICAL
);
divider.setDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.your_file));
recyclerView.addItemDecoration(divider);
Anushka Madusanka
sumber
Bagaimana cara menambahkan padding? Menggunakan padding dalam bentuk tidak berhasil.
Makalele
9

Versi Kotlin:

recyclerview.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
Duracell De Monaco
sumber
8

Saya pikir Anda gunakan Fragmentsuntuk memilikiRecyclerView

Cukup tambahkan baris ini setelah membuat Objects RecyclerViewdan AndaLayoutManager

DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                DividerItemDecoration.VERTICAL);
        recyclerView.addItemDecoration(dividerItemDecoration);

Itu dia!

Ini mendukung orientasi HORIZONTAL dan VERTIKAL.

Vivek Maru
sumber
8

Coba kode baris tunggal sederhana ini

recyclerView.addItemDecoration(new DividerItemDecoration(getContext(),LinearLayoutManager.VERTICAL)); 
Pravin Perumal
sumber
7

Anda perlu menambahkan baris berikutnya ...

mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
pablopatarca
sumber
7

Cara saya menangani tampilan Divider dan Insets Divider adalah dengan menambahkan ekstensi RecyclerView.

1.

Tambahkan file ekstensi baru dengan memberi nama View atau RecyclerView:

RecyclerViewExtension.kt

dan tambahkan setDividermetode ekstensi di dalam file RecyclerViewExtension.kt.

/*
* RecyclerViewExtension.kt
* */
import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.RecyclerView


fun RecyclerView.setDivider(@DrawableRes drawableRes: Int) {
    val divider = DividerItemDecoration(
        this.context,
        DividerItemDecoration.VERTICAL
    )
    val drawable = ContextCompat.getDrawable(
        this.context,
        drawableRes
    )
    drawable?.let {
        divider.setDrawable(it)
        addItemDecoration(divider)
    }
}

2.

Buat file sumber daya Drawable di dalam drawablepaket seperti recycler_view_divider.xml:

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

    <shape>
        <size android:height="0.5dp" />
        <solid android:color="@android:color/darker_gray" />
    </shape>

</inset>

di mana Anda dapat menentukan margin kiri dan kanan pada android:insetLeftdan android:insetRight.

3.

Pada Aktivitas atau Fragmen tempat RecyclerView diinisialisasi, Anda dapat mengatur kustom yang dapat digambar dengan menelepon:

recyclerView.setDivider(R.drawable.recycler_view_divider)

4.

Ceria 🍺

Baris RecyclerView dengan pembagi.

Gent Berani
sumber
6

Jadi ini mungkin bukan cara yang benar, tapi saya baru saja menambahkan tampilan ke tampilan item tunggal RecyclerView (karena saya tidak berpikir ada fungsi bawaan) seperti:

<View
    android:layout_width="fill_parent"
    android:layout_height="@dimen/activity_divider_line_margin"
    android:layout_alignParentBottom="true"
    android:background="@color/tasklist_menu_dividerline_grey" />

Ini berarti setiap item akan memiliki garis yang mengisinya di bagian bawahnya. Saya membuatnya sekitar 1dp tinggi dengan #111111latar belakang. Ini juga memberinya semacam efek "3D".

Menghancurkan
sumber
2
- ini bukan jalan
Anand Tiwari
5

Anda dapat membuat pembagi sederhana yang dapat digunakan kembali.

Buat Pembagi:

public class DividerItemDecorator extends RecyclerView.ItemDecoration {
    private Drawable mDivider;

    public DividerItemDecorator(Drawable divider) {
        mDivider = divider;
    }

    @Override
    public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
        int dividerLeft = parent.getPaddingLeft();
        int dividerRight = parent.getWidth() - parent.getPaddingRight();

        int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = parent.getChildAt(i);

            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

            int dividerTop = child.getBottom() + params.bottomMargin;
            int dividerBottom = dividerTop + mDivider.getIntrinsicHeight();

            mDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
            mDivider.draw(canvas);
        }
    }
}

Buat Garis Pembagi: divider.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size
        android:width="1dp"
        android:height="1dp" />
    <solid android:color="@color/grey_300" />
</shape>

Tambahkan pembagi ke Recyclerview Anda:

RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(context, R.drawable.divider));
recyclerView.addItemDecoration(dividerItemDecoration);

Untuk menghapus pembagi untuk item terakhir:

Untuk mencegah gambar pembagi untuk item terakhir Anda harus mengubah baris ini.

for (int i = 0; i < childCount; i++) 

Untuk

for (int i = 0; i < childCount-1; i++)

Implementasi akhir Anda harus seperti ini:

public class DividerItemDecorator extends RecyclerView.ItemDecoration {
    private Drawable mDivider;

    public DividerItemDecorator(Drawable divider) {
        mDivider = divider;
    }

    @Override
    public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
        int dividerLeft = parent.getPaddingLeft();
        int dividerRight = parent.getWidth() - parent.getPaddingRight();

        int childCount = parent.getChildCount();
        for (int i = 0; i < childCount - 1; i++) {
            View child = parent.getChildAt(i);

            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

            int dividerTop = child.getBottom() + params.bottomMargin;
            int dividerBottom = dividerTop + mDivider.getIntrinsicHeight();

            mDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
            mDivider.draw(canvas);
        }
    }
}

Semoga bermanfaat :)

Bhuvanesh BS
sumber
1
Ini berfungsi dengan baik Saya tidak tahu mengapa itu bukan jawaban yang diterima
Kennedy Kambo
2

RecyclerView-FlexibleDivider dari yqritc menjadikan ini liner satu. Pertama tambahkan ini ke build.gradle:

compile 'com.yqritc:recyclerview-flexibledivider:1.4.0' // requires jcenter()

Sekarang Anda dapat mengonfigurasi dan menambahkan divder tempat Anda mengatur adaptor recyclerView Anda:

recyclerView.setAdapter(myAdapter);
recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).color(Color.RED).sizeResId(R.dimen.divider).marginResId(R.dimen.leftmargin, R.dimen.rightmargin).build());
Gaurav Vachhani
sumber
16
@Gaurav, Di mana HorizontalDividerItemDecorationkelasnya berada?
iRuth
@ iRuth, Anda perlu menambahkan maven library ke file .gradle Anda github.com/yqritc/RecyclerView-FlexibleDivider
Hakem Zaied
5
Ini adalah jawaban yang tidak lengkap. Mungkin suara turun tepat.
Akhir Pekan
Adalah baik untuk menyebutkan bahwa lib pihak ke-3 diperlukan untuk itu @ gaurav-vachhani
Andrew V.
2

Android hanya membuat hal-hal kecil terlalu rumit. Cara termudah untuk mencapai apa yang Anda inginkan, tanpa menerapkan DividerItemDecoration di sini:

Tambahkan warna latar belakang ke RecyclerView ke warna pembagi yang Anda inginkan:

<RecyclerView
    android:id="@+id/rvList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@color/colorLightGray"
    android:scrollbars="vertical"
    tools:listitem="@layout/list_item"
    android:background="@android:color/darker_gray"/>

Tambahkan margin bawah (android: layout_marginBottom) ke akar tata letak item (list_item.xml):

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="1dp">

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="John Doe" />

    <TextView
        android:id="@+id/tvDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tvName"
        android:text="Some description blah blah" />

</RelativeLayout>

Ini harus memberi ruang 1dp antara item dan warna latar belakang RecyclerView (yang abu-abu gelap akan muncul sebagai pembagi).

John Gummadi
sumber
1

Untuk membuat jawaban NJ sedikit lebih sederhana, Anda dapat melakukan:

public class DividerColorItemDecoration extends DividerItemDecoration {

    public DividerColorItemDecoration(Context context, int orientation) {
        super(context, orientation);
        setDrawable(ContextCompat.getDrawable(context, R.drawable.line_divider));
    }
}
Will Poitras
sumber
1

Cukup tambahkan margin jumlah x di bagian bawah item di Anda RecycleView Adapter.

onCreateViewHolder

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

layoutParams.setMargins(0, 0, 0, 5);
itemView.setLayoutParams(layoutParams);
S Sathiya
sumber
1
recyclerview.addItemDecoration(new DividerItemDecoration(this, 0));

Di mana 0Horizontal dan 1Veritical

Kristen Freny
sumber
3
lebih baik gunakan variabel konstan karena nilainya mungkin berubah pada rilis berikutnya dari perpustakaan dukungan
Irshu
benar .. kita harus menggunakan LinearLayoutManager.HORIZONTAL atau LinearLayoutManager.VERTICAL alih-alih 0 atau 1
Freny Christian
0
  class ItemOffsetDecoration(
        context: Context,
        private val paddingLeft: Int,
        private val paddingRight: Int
    ) : RecyclerView.ItemDecoration() {
        private var mDivider: Drawable? = null

        init {
            mDivider = ContextCompat.getDrawable(context, R.drawable.divider_medium)
        }

        override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
            val left = parent.paddingLeft + paddingLeft
            val right = parent.width - parent.paddingRight - paddingRight
            val childCount = parent.childCount
            for (i in 0 until childCount) {
                val child = parent.getChildAt(i)
                val params = child.layoutParams as RecyclerView.LayoutParams
                val top = child.bottom + params.bottomMargin
                val bottom = top + (mDivider?.intrinsicHeight ?: 0)

                mDivider?.let {
                    it.setBounds(left, top, right, bottom)
                    it.draw(c)
                }
            }
        }
    }

Anda hanya perlu menentukan warna di R.drawable.divider_medium

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/black" />
    <size
        android:height="1dp"
        android:width="1dp" />

</shape>

dan menambahkannya ke recyclerView Anda

recyclerView.addItemDecoration(
                        ItemOffsetDecoration(
                            this,
                            resources.getDimension(resources.getDimension(R.dimen.dp_70).roundToInt()).roundToInt(),
                            0
                        )
                    )

rujuk ini

Abhay Pratap
sumber
0

Solusi Bhuvanesh BS bekerja. Versi Kotlin ini:

import android.graphics.Canvas
import android.graphics.drawable.Drawable
import androidx.recyclerview.widget.RecyclerView

class DividerItemDecorator(private val mDivider: Drawable?) : RecyclerView.ItemDecoration() {

    override fun onDraw(
        canvas: Canvas,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {

        val dividerLeft = parent.paddingLeft
        val dividerRight = parent.width - parent.paddingRight
        for (i in 0 until parent.childCount - 1) {
            val child = parent.getChildAt(i)
            val dividerTop =
                child.bottom + (child.layoutParams as RecyclerView.LayoutParams).bottomMargin
            val dividerBottom = dividerTop + mDivider!!.intrinsicHeight
            mDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom)
            mDivider.draw(canvas)
        }
    }
}
BestUserApps
sumber
0

Saya pikir ini cara termudah

mDividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                DividerItemDecoration.VERTICAL);
// or DividerItemDecoration.HORIZONTALL
        mDividerItemDecoration.setDrawable(getDrawable(R.drawable.myshape));
        recyclerView.addItemDecoration(mDividerItemDecoration);

Perhatikan bahwa: myshape bisa menjadi rectangel dengan tinggi yang ingin Anda buat pembagi Anda

Abdelrahman Hussein
sumber