Jak dodać linię podziału w Androidzie RecyclerView?

221

Tworzę aplikację na Androida, z której korzystam RecyclerView. Muszę dodać dzielnik w RecyclerView. Próbowałem dodać -

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

poniżej jest mój kod xml -

   <android.support.v7.widget.RecyclerView
    android:id="@+id/drawerList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    />
kanapa 8
źródło
3
sądzę, że to pomoże ci stackoverflow.com/q/24618829/942224
Sanket Kachhela
Aby wyświetlić dzielnik bez ostatniej linii, użyj tego
Kishan Solanki,
Myślę, że twój kod jest poprawny. Nie widzę żadnego problemu.
Rohit Rawat

Odpowiedzi:

282

W aktualizacji z października 2016 r. Biblioteka obsługi v25.0.0 ma teraz domyślną implementację podstawowych poziomych i pionowych dzielników!

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

 recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
Aditya Vyas-Lakhan
źródło
3
Cześć dzięki za informację! Czy istnieje sposób na usunięcie dzielnika po ostatnim elemencie? Mam tylko CardView, w którym zaimplementowana jest lista, a dzielnik + cień widoku karty u dołu nie wygląda dobrze!
Maxi,
4
Miałem ten sam problem i rozwiązałem go, rozszerzając DividerItemDecoration i zastępując getItemOffset, a następnie wywołując super, jeśli nie jestem na pierwszym elemencie. if(parent.getChildAdapterPosition(view) == state.getItemCount() - 1)potem wróć, w przeciwnym razie wywołaj nadklasę ” getItemOffsets().
Robin,
13
Zamiast tego mLayoutManager.getOrientation()użyłem DividerItemDecoration.VERTICALi zadziałało, ponieważ mój RecyclerView jest pionowy.
Aaron Lelevier
2
czy istnieje sposób na zmianę koloru dzielnika za pomocą tego wbudowanego sposobu?
j2emanue
1
@ V.Kalyuzhnyu @android:attr/listDividerw temacie aplikacji nie wyświetla dzielnika, jeśli jest to zasób koloru, musiałem stworzyć kształt, który można rysować moim kolorem o stałej wysokości.
A. Ferrand,
226

Właściwym sposobem jest zdefiniowanie ItemDecorationdla RecyclerViewnastępujących elementów

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>

Na koniec ustaw to w ten sposób

recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));

Edytować

Jak wskazał @Alan Solitar

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

jest amortyzowane zamiast tego można użyć

ContextCompat.getDrawable(context,R.drawable.line_divider);
NJ
źródło
3
context.getResources (). getDrawable (R.drawable.line_divider) jest teraz przestarzały.
Alan S.
2
Nie ma problemu. To dobra odpowiedź i działała idealnie dla mnie. Dziękuję Ci.
Alan S.
3
To doskonale działa po mojej stronie. Zastanawiam się jednak, dlaczego nie dodać prostego <Widok> dla tego separatora do układu każdej komórki? To znacznie mniej kodu. Czy to rozwiązanie jest mniej dobre pod względem wydajności? tx
Greg
4
Problem z tą implementacją powstaje, gdy próbujesz przesuwać lub przenosić przedmioty.
TerNovi
1
@ NJ Dzięki koleś zaoszczędziłeś mój czas.
Suhas Bachewar
40

Jeśli chcesz mieć dzielniki poziome i pionowe:

  1. Zdefiniuj poziomy i pionowy rozdzielacz:

    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. Dodaj ten segment kodu poniżej:

    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
źródło
Zadziałało. Ale jeśli zmienisz horizontal_divider.xml, aby podzielić szerokość i vertical_divider.xml, aby podzielić wysokość, możesz utworzyć każdy z nich w DividerItemDecorationnastępujący sposób: verticalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.VERTICAL);i horizontalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.HORIZONTAL);.
Ruben O. Chiavone
33

Wszystkie te odpowiedzi zbliżyły mnie do siebie, ale w każdym z nich brakowało kluczowego szczegółu. Po kilku badaniach odkryłem, że najłatwiejszą drogą jest połączenie tych 3 kroków:

  1. Użyj biblioteki pomocniczej DividerItemDecoration
  2. Utwórz dzielnik o odpowiednim kolorze
  3. Ustaw ten dzielnik w swoim motywie jako listDivider

Krok 1: podczas konfigurowania RecyclerView

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

Krok 2: w pliku takim jak 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>

Krok 3: w temacie aplikacji

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

EDYCJA: Zaktualizowano, aby pominąć ostatni dzielnik:
Po użyciu tego trochę zdałem sobie sprawę, że rysuje dzielnik po ostatnim elemencie, co było denerwujące. Więc zmodyfikowałem Krok 1 w następujący sposób, aby zastąpić to domyślne zachowanie w DividerItemDecoration (oczywiście utworzenie oddzielnej klasy to kolejna opcja):

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
źródło
7
Przesłanianie getItemOffset nie wydaje się dla mnie działać. Nawet jeśli przesłonię i nigdy nie sprawdzę super, dzielnik jest nadal rysowany. Nie jestem pewien, co się zmieniło.
lostintranslation
2
Dla mnie to też nie działa. Ostatni dzielnik wciąż się wyświetla.
Sotti
1
Skończyłem tworzyć własną klasę dzielników, kopiując źródło DividerItemDecoration i zmieniłem trochę, aby nie rysować ostatniego dzielnika. W metodzie rysowania po prostu zignoruj ​​ostatni widok potomny: for (int i = 0; i < childCount; i++) zmień nafor (int i = 0; i < childCount - 1; i++)
kientux
Ponieważ element ItemDecoration jest rysowany przed elementem listy (element listy „poniżej”), dane rozwiązanie działa tylko wtedy, gdy element listy ma 100% nieprzezroczyste tło lub gdy dająca się rysować dekoracja jest w 100% przezroczysta (więc użytkownik widzi tło recyclinglerView). W przeciwnym razie dzielnik będzie widoczny bez względu na to, co zwrócisz w getItemOffsets ()
ernazm
31

Po prostu dodaj widok do końca adaptera przedmiotu:

<View
 android:layout_width="match_parent"
 android:layout_height="1dp"
 android:background="#FFFFFF"/>
Lucas Diego
źródło
25
Dzięki temu rozwiązaniu otrzymasz również linię podziału na końcu listy.
Arià
5
Ostatni wiersz można usunąć programowo, mówiąc coś takiego w onBindViewHolder. if(position == getItemCount() - 1) { mDividerView.setVisibility(View.INVISIBLE) }Lub muszą istnieć inne sposoby, aby to zrobić.
Ali Kazi,
przez większość czasu ostatnia linia 1pxwysokości jest niewidoczna dla naszych oczu
Mehdi Khademloo
@LucasDiego To zadziała, ale wiemy, że pompowanie jest drogie.
Zohra Khan
21

Oto kod prostego niestandardowego dzielnika (dzielnik pionowy / wysokość 1dp / czarny):

Załóżmy, że masz bibliotekę wsparcia:

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

kod Java

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

następnie przykładowy plik 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
źródło
10

Utwórz osobny plik XML w folderze 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>

Połącz ten plik xml (twój_plik) z główną aktywnością , tak jak to:

DividerItemDecoration divider = new DividerItemDecoration(
    recyclerView.getContext(),
    DividerItemDecoration.VERTICAL
);
divider.setDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.your_file));
recyclerView.addItemDecoration(divider);
Anushka Madusanka
źródło
Jak dodać padding? Stosowanie paddingu w kształcie nie działa.
Makalele,
9

Wersja Kotlin:

recyclerview.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
Duracell De Monaco
źródło
8

Myślę, że używasz FragmentstegoRecyclerView

Po prostu dodaj te linie po utworzeniu swojego RecyclerViewi LayoutManagerobiektów

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

Otóż ​​to!

Obsługuje orientacje POZIOME i PIONOWE.

Vivek Maru
źródło
8

Wypróbuj ten prosty kod jednoliniowy

recyclerView.addItemDecoration(new DividerItemDecoration(getContext(),LinearLayoutManager.VERTICAL)); 
Pravin Perumal
źródło
7

Musisz dodać następny wiersz ...

mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
pablopatarca
źródło
7

Sposób, w jaki obsługuję widok Divider, a także wstawki Divider, polega na dodaniu rozszerzenia RecyclerView.

1.

Dodaj nowy plik rozszerzenia, nazywając View lub RecyclerView:

RecyclerViewExtension.kt

i dodaj setDividermetodę rozszerzenia w pliku 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)

Utwórz plik zasobów do rysowania w drawablepakiecie, taki jak 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>

gdzie możesz określić lewy i prawy margines na android:insetLefti android:insetRight.

3)

W przypadku działania lub fragmentu, w którym zainicjowano RecyclerView, można ustawić niestandardową funkcję rysowania, wywołując:

recyclerView.setDivider(R.drawable.recycler_view_divider)

4

Pozdrawiam 🍺

RecyclerView wiersz z dzielnikiem.

Gent Berani
źródło
6

Może to nie być poprawny sposób, ale właśnie dodałem widok do widoku pojedynczego elementu RecyclerView (ponieważ nie sądzę, aby istniała funkcja wbudowana), tak jak:

<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" />

Oznacza to, że każdy przedmiot będzie miał linię wypełniającą go na dole. Zrobiłem to z wysokości około 1dp na #111111tle. Daje to również rodzaj efektu „3D”.

Druzgocący
źródło
2
- to nie jest sposób
Anand Tiwari
5

Możesz utworzyć prosty dzielnik wielokrotnego użytku.

Utwórz dzielnik:

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

Utwórz linię podziału: 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>

Dodaj dzielnik do swojego Recyclerview:

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

Aby usunąć dzielnik dla ostatniego elementu:

Aby zapobiec rysowaniu dzielnika dla ostatniego elementu, musisz zmienić tę linię.

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

Do

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

Ostateczne wdrożenie powinno wyglądać tak:

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

Mam nadzieję, że to pomoże:)

Bhuvanesh BS
źródło
1
Działa to doskonale Nie wiem, dlaczego nie jest to akceptowana odpowiedź
Kennedy Kambo
2

RecyclerView-FlexibleDivider firmy yqritc sprawia, że ​​jest to jedna wkładka. Najpierw dodaj to do build.gradle:

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

Teraz możesz skonfigurować i dodać dzielnik, w którym ustawiasz adapter swojego recyklerView:

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
źródło
16
@Gaurav, gdzie znajduje się HorizontalDividerItemDecorationklasa?
iRuth,
@ iRuth, musisz dodać bibliotekę maven do pliku .gradle github.com/yqritc/RecyclerView-FiętkiDivider
Hakem Zaied
5
To jest niepełna odpowiedź. Może właściwe jest głosowanie w dół.
Weekend
Warto wspomnieć, że wymagana jest trzecia libacja partii na to @ gaurav-vachhani
Andrew V.,
2

Android po prostu niestety komplikuje małe rzeczy. Najprostszym sposobem na osiągnięcie tego, co chcesz, bez implementacji DividerItemDecoration tutaj:

Dodaj kolor tła do RecyclerView do żądanego koloru dzielnika:

<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"/>

Dodaj dolny margines (android: layout_marginBottom) do katalogu głównego elementu (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>

Powinno to dać 1dp miejsca między elementami a kolorem tła RecyclerView (który jest ciemnoszary, wydaje się dzielnikiem).

John Gummadi
źródło
1

Aby nieco ułatwić odpowiedź NJ, możesz:

public class DividerColorItemDecoration extends DividerItemDecoration {

    public DividerColorItemDecoration(Context context, int orientation) {
        super(context, orientation);
        setDrawable(ContextCompat.getDrawable(context, R.drawable.line_divider));
    }
}
Will Poitras
źródło
1

Po prostu dodaj margines x kwoty na dole przedmiotu w swoim 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
źródło
1
recyclerview.addItemDecoration(new DividerItemDecoration(this, 0));

Gdzie 0jest poziomo i 1jest weryfikowany

Freny Christian
źródło
3
lepiej użyć zmiennej stałej, ponieważ wartość może się zmienić w przyszłej wersji biblioteki obsługi
Irshu
true .. powinniśmy użyć LinearLayoutManager.HORIZONTAL lub LinearLayoutManager.VERTICAL zamiast 0 lub 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)
                }
            }
        }
    }

Musisz tylko określić kolor w 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>

i dodaj go do swojego recyclinglerView

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

odśwież to

Abhay Pratap
źródło
0

Działa rozwiązanie Bhuvanesh BS. Wersja Kotlin tego:

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
źródło
0

myślę, że to najłatwiejszy sposób

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

Zauważ, że: myshape może być prostokątem o wysokości, którą chcesz zrobić dzielnik

Abdelrahman Hussein
źródło