Làm thế nào một dòng chia có thể được thêm vào trong RecyclerView của Android?


221

Tôi đang phát triển một ứng dụng Android nơi tôi đang sử dụng RecyclerView. Tôi cần phải thêm một chia trong RecyclerView. Tôi đã cố gắng thêm -

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

bên dưới là mã xml của tôi -

   <android.support.v7.widget.RecyclerView
    android:id="@+id/drawerList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    />

3
tôi đoán điều này sẽ giúp bạn stackoverflow.com/q/24618829/942224
Sanket Kachhela

Để hiển thị dải phân cách mà không có dòng cuối cùng, hãy sử dụng cái này
Kishan Solanki

Tôi nghĩ rằng mã của bạn là chính xác. Tôi không thấy bất kỳ vấn đề.
Rohit Rawat

Câu trả lời:


282

Trong bản cập nhật tháng 10 năm 2016, thư viện hỗ trợ v25.0.0 hiện đã có cài đặt mặc định của các bộ chia ngang và dọc cơ bản có sẵn!

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

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

3
Hi cảm ơn thông tin! Có cách nào để loại bỏ dải phân cách sau mục cuối cùng không? Tôi chỉ có một CardView nơi Danh sách được triển khai và dải phân cách + bóng của cardview ở phía dưới trông không tốt!
Maxi

4
Tôi đã có cùng một vấn đề và đã giải quyết nó bằng cách mở rộng DividerItemDecor và ghi đè getItem Offersets, sau đó chỉ gọi siêu nếu tôi không có mặt hàng đầu tiên. if(parent.getChildAdapterPosition(view) == state.getItemCount() - 1)sau đó quay trở lại, người khác gọi siêu lớp ' getItemOffsets().
Robin

13
Thay vì mLayoutManager.getOrientation(), tôi đã sử dụng DividerItemDecoration.VERTICALvà nó hoạt động, vì RecyclerView của tôi là dọc.
Aaron Lelevier

2
Có cách nào để thay đổi màu của dải phân cách bằng cách xây dựng này không?
j2emanue

1
@ V.Kalyuzhnyu @android:attr/listDividertrong chủ đề ứng dụng không hiển thị dải phân cách nếu đó là tài nguyên màu, tôi phải tạo một hình dạng có thể vẽ được với màu của tôi với chiều cao cố định.
A. Ferrand

226

Cách đúng là định nghĩa ItemDecorationcho RecyclerViewnhư sau

SimpleDividerItemDecor.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>

Cuối cùng đặt nó như thế này

recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));

Biên tập

Như được chỉ ra bởi @Alan Solitar

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

được khấu hao thay vì bạn có thể sử dụng

ContextCompat.getDrawable(context,R.drawable.line_divider);

3
bối cảnh.getResource (). getDrawable (R.drawable.line_divider) hiện không được chấp nhận.
Alan S.

2
Không vấn đề gì. Đây là một câu trả lời tốt và nó đã làm việc hoàn hảo cho tôi. Cảm ơn bạn.
Alan S.

3
Điều này là hoàn hảo làm việc về phía tôi. Tuy nhiên, tôi tự hỏi tại sao không thêm <View> đơn giản cho dấu phân cách này vào bố cục cho mỗi ô? Mã của nó ít hơn nhiều. Là giải pháp này ít hiệu quả tốt khôn ngoan? tx
Greg

4
Vấn đề với việc thực hiện này phát sinh nếu bạn cố gắng vuốt hoặc di chuyển các mục xung quanh.
TerNovi

1
@NJ Cảm ơn anh bạn đã tiết kiệm thời gian của tôi.
Suhas Bachewar

40

Nếu bạn muốn có cả hai chiều ngang và dọc:

  1. Xác định các ngăn kéo ngang & dọc:

    vertical_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. Thêm đoạn mã này bên dưới:

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

Nó đã làm việc. Nhưng nếu bạn thay đổi horizontal_divider.xml chiều rộng chia để vertical_divider.xml với chiều cao chia, bạn có thể tạo ra từng DividerItemDecorationnhư thế này: verticalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.VERTICAL);horizontalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.HORIZONTAL);.
Ruben O. Chiavone

33

Tất cả những câu trả lời này khiến tôi gần gũi nhưng mỗi câu đều thiếu một chi tiết quan trọng. Sau một chút nghiên cứu, tôi thấy con đường dễ nhất là sự kết hợp của 3 bước sau:

  1. Sử dụng DividerItemDecoration của thư viện hỗ trợ
  2. Tạo một dải phân cách với màu sắc phù hợp
  3. Đặt bộ chia này trong chủ đề của bạn làm listDivider

Bước 1: trong khi cấu hình RecyclerView

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

Bước 2: trong một tệp như res / drawable / spliter_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>

Bước 3: trong chủ đề của ứng dụng

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

EDIT: Đã cập nhật để bỏ qua bộ chia cuối cùng:
Sau khi sử dụng một chút, tôi nhận ra rằng nó đang vẽ một bộ chia sau mục cuối cùng, điều này gây khó chịu. Vì vậy, tôi đã sửa đổi Bước 1 như sau để ghi đè hành vi mặc định đó trong DividerItemDecor (tất nhiên, tạo một lớp riêng là một tùy chọn khác):

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

7
Ghi đè getItem Offersets dường như không hoạt động đối với tôi. Ngay cả khi tôi ghi đè và không bao giờ gọi siêu, bộ chia vẫn được rút ra. Không chắc chắn những gì đã thay đổi.
lostintranslation

2
Nó cũng không hiệu quả với tôi. Dải phân cách cuối cùng vẫn hiển thị.
Sotti

1
Cuối cùng tôi đã tạo ra lớp chia của riêng mình bằng cách sao chép nguồn của DividerItemDecor, và thay đổi một chút để không vẽ dải phân cách cuối cùng. Trong phương pháp vẽ, chỉ cần bỏ qua chế độ xem con cuối cùng: for (int i = 0; i < childCount; i++) thay đổi thànhfor (int i = 0; i < childCount - 1; i++)
kientux

Vì ItemDecoration được vẽ trước mục danh sách (mục danh sách "bên dưới"), giải pháp đã cho chỉ hoạt động nếu mục danh sách của bạn có nền mờ 100% hoặc khi có thể vẽ trang trí trong suốt 100% (để người dùng nhìn thấy nền của recyclerView). Mặt khác, dải phân cách có thể nhìn thấy bất kể bạn trả lại gì trong getItem Offersets ()
ernazm

31

Chỉ cần thêm Chế độ xem vào cuối bộ điều hợp mục của bạn:

<View
 android:layout_width="match_parent"
 android:layout_height="1dp"
 android:background="#FFFFFF"/>

25
Với giải pháp này, bạn cũng sẽ nhận được dòng chia ở cuối danh sách.
Arià

5
Dòng cuối cùng có thể được xóa theo chương trình bằng cách nói một cái gì đó như thế này trong onBindViewHolder if(position == getItemCount() - 1) { mDividerView.setVisibility(View.INVISIBLE) }Hoặc phải có những cách khác để làm điều này.
Ali Kazi

hầu hết thời gian, dòng cuối cùng với 1pxchiều cao, vô hình trước mắt chúng ta
Mehdi Khademloo

@LucasDiego Điều này sẽ hoạt động nhưng chúng tôi biết rằng lạm phát là tốn kém.
Zohra Khan

21

Dưới đây là mã cho một bộ chia tùy chỉnh đơn giản (bộ chia dọc / chiều cao 1dp / đen):

Nó cho rằng bạn có Thư viện hỗ trợ:

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

mã java

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

sau đó là mẫu tệp 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>

10

Tạo một tệp xml riêng biệt trong thư mục 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>

Kết nối tệp xml đó (your_file) tại hoạt động chính , như thế này:

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

Làm thế nào để thêm phần đệm? Sử dụng đệm trong hình dạng không hoạt động.
Makalele

9

Phiên bản Kotlin:

recyclerview.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))

8

Tôi nghĩ bạn đang sử dụng Fragmentsđể cóRecyclerView

Chỉ cần thêm các dòng này sau khi tạo RecyclerViewLayoutManagerĐối tượng của bạn

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

Đó là nó!

Nó hỗ trợ cả định hướng HORIZONTAL và CHỨNG NHẬN.


8

Hãy thử mã dòng đơn giản này

recyclerView.addItemDecoration(new DividerItemDecoration(getContext(),LinearLayoutManager.VERTICAL)); 

7

Bạn cần thêm dòng tiếp theo ...

mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));

7

Cách tôi xử lý chế độ xem Divider và cả Divider Insets là bằng cách thêm tiện ích mở rộng RecyclerView.

1.

Thêm tệp mở rộng mới bằng cách đặt tên View hoặc RecyclerView:

RecyclerViewExtension.kt

và thêm setDividerphương thức mở rộng bên trong tệp 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.

Tạo một tệp tài nguyên có thể vẽ bên trong drawablegói như 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>

nơi bạn có thể chỉ định lề trái và phải trên android:insetLeftandroid:insetRight.

3.

Trên Activity hoặc Fragment của bạn nơi RecyclerView được khởi tạo, bạn có thể đặt drawable tùy chỉnh bằng cách gọi:

recyclerView.setDivider(R.drawable.recycler_view_divider)

4.

Chúc mừng

RecyclerView hàng với bộ chia.


6

Vì vậy, đây có thể không phải là cách chính xác, nhưng tôi chỉ thêm một chế độ xem vào chế độ xem một mục duy nhất của RecyclerView (vì tôi không nghĩ có chức năng tích hợp sẵn) như vậy:

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

Điều này có nghĩa là mỗi mục sẽ có một dòng lấp đầy nó ở dưới cùng của nó. Tôi đã làm cho nó cao khoảng 1dp với một #111111nền tảng. Điều này cũng mang lại cho nó một loại hiệu ứng "3D".


2
- đây không phải là một cách
Anand Tiwari

5

Bạn có thể tạo một bộ chia có thể tái sử dụng đơn giản.

Tạo dải phân cách:

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

Tạo đường phân chia: spliter.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>

Thêm dải phân cách vào Recyclerview của bạn:

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

Để xóa dải phân cách cho mục cuối cùng:

Để ngăn bản vẽ dải phân cách cho mục cuối cùng, bạn phải thay đổi dòng này.

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

Đến

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

Việc thực hiện cuối cùng của bạn nên như thế này:

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

Hy vọng nó giúp:)


1
Điều này hoạt động hoàn hảo Tôi không biết tại sao nó không phải là câu trả lời được chấp nhận
Kennedy Kambo

2

yqritc's RecyclerView- FlexDivider làm cho điều này trở thành một lớp lót. Đầu tiên thêm cái này vào build.gradle:

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

Bây giờ bạn có thể định cấu hình và thêm bộ chia nơi bạn đặt bộ điều hợp của recyclerView:

recyclerView.setAdapter(myAdapter);
recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).color(Color.RED).sizeResId(R.dimen.divider).marginResId(R.dimen.leftmargin, R.dimen.rightmargin).build());

16
@Gaurav, HorizontalDividerItemDecorationlớp học nằm ở đâu?
iRuth

@iRuth, Bạn cần thêm thư viện maven vào tệp .gradle của bạn github.com/yqritc/RecyclerView-FlexibleDivider
Hakem Zaied

5
Đây là một câu trả lời không đầy đủ. Có lẽ một cuộc bỏ phiếu xuống là thích hợp.
Cuối tuần

Thật tốt khi đề cập rằng lib bên thứ 3 cần thiết cho @ gaurav-vachhani
Andrew V.

2

Android chỉ làm cho những điều nhỏ nhặt quá phức tạp không may. Cách dễ nhất để đạt được những gì bạn muốn, mà không cần thực hiện DividerItemDecor tại đây:

Thêm màu nền cho RecyclerView vào màu chia mong muốn của bạn:

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

Thêm lề dưới (android: layout_marginBottom) vào thư mục gốc của mục (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>

Điều này sẽ cung cấp không gian 1dp giữa các mục và màu nền của RecyclerView (màu xám đậm sẽ xuất hiện dưới dạng dải phân cách).


1

Để làm cho câu trả lời của NJ đơn giản hơn một chút, bạn có thể làm:

public class DividerColorItemDecoration extends DividerItemDecoration {

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

1

Chỉ cần thêm một lề của số tiền x ở dưới cùng của một mục trong của bạn 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);

1
recyclerview.addItemDecoration(new DividerItemDecoration(this, 0));

Trường hợp 0nằm ngang và 1là chính xác


3
sử dụng tốt hơn biến hằng vì giá trị có thể thay đổi trong bản phát hành tương lai của thư viện hỗ trợ
Irshu

đúng .. chúng ta nên sử dụng linearLayoutManager.HORIZONTAL hoặc linearLayoutManager.VERTICAL thay vì 0 hoặc 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)
                }
            }
        }
    }

Bạn chỉ cần chỉ định một màu trong 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>

và thêm nó vào recyclerView của bạn

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

giới thiệu lại


0

Giải pháp Bhuvanesh BS hoạt động. Phiên bản của Kotlin này:

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

0

tôi nghĩ đó là cách dễ nhất

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

Lưu ý rằng: myshape có thể là hình chữ nhật với chiều cao bạn muốn làm dải phân cách

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.