Android RecyclerView में एक विभक्त लाइन कैसे जोड़ी जा सकती है?


221

मैं एक Android एप्लिकेशन विकसित कर रहा हूं जहां मैं उपयोग कर रहा हूं RecyclerView। मैं एक जोड़ने की जरूरत है विभक्त में RecyclerView। मैंने जोड़ने की कोशिश की -

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

नीचे मेरा xml कोड है -

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

3
मुझे यह आपकी मदद करेगा कि आप stackoverflow.com/q/24618829/942224
Sanket Kachhela

अंतिम पंक्ति के बिना विभक्त दिखाने के लिए, इसका उपयोग करें
किशन सोलंकी

मुझे लगता है कि आपका कोड सही है। मुझे कोई समस्या नहीं दिख रही है।
रोहित रावत

जवाबों:


282

अक्टूबर 2016 के अद्यतन में, समर्थन लाइब्रेरी v25.0.0 में अब बुनियादी क्षैतिज और ऊर्ध्वाधर डिवाइडर का डिफ़ॉल्ट कार्यान्वयन उपलब्ध है!

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

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

3
जानकारी के लिए धन्यवाद! क्या अंतिम मद के बाद डिवाइडर को हटाने का कोई तरीका है? मेरे पास बस एक CardView है जहाँ सूची कार्यान्वित की जाती है और नीचे की तरफ कार्डव्यू की डिवाइडर + छाया अच्छी नहीं लगती है!
मैक्सी

4
मेरे पास एक ही समस्या थी, और इसे DividerItemDecoration को बढ़ाकर और getItemOffsets को ओवरराइड करके हल किया, फिर केवल पहले आइटम पर नहीं होने पर सुपर कॉलिंग। if(parent.getChildAdapterPosition(view) == state.getItemCount() - 1)फिर लौटो, अन्यथा सुपरक्लास को बुलाओ ' getItemOffsets()
रॉबिन

13
इसके बजाय mLayoutManager.getOrientation(), मैंने उपयोग किया DividerItemDecoration.VERTICALऔर यह काम किया, क्योंकि मेरा RecyclerView ऊर्ध्वाधर है।
आरोन लेलेयर

2
क्या इस तरीके से निर्मित डिवाइडर का रंग बदलने का कोई तरीका है?
j2emanue

1
@ V.Kalyuzhnyu @android:attr/listDividerऐप थीम में एक विभक्त प्रदर्शित नहीं करता है यदि यह एक रंग संसाधन है, तो मुझे एक निश्चित ऊंचाई के साथ अपने रंग के साथ एक आकार बनाने योग्य बनाना था।
ए। फेरैंड

226

सही तरीका निम्नलिखित के ItemDecorationलिए परिभाषित करना RecyclerViewहै

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>

अंत में इसे इस तरह सेट करें

recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));

संपादित करें

जैसा कि @Alan Solitar ने बताया है

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

इसके बजाय मूल्यह्रास किया जाता है जिसका आप उपयोग कर सकते हैं

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

3
संदर्भ.getResources ()। getDrawable (R.drawable.line_divider) अब पदावनत हो गया है।
एलन एस।

2
कोई दिक्कत नहीं है। यह एक अच्छा जवाब है और इसने मेरे लिए पूरी तरह से काम किया है। धन्यवाद।
एलन एस।

3
यह पूरी तरह से मेरी तरफ से काम कर रहा है। हालांकि, मुझे आश्चर्य है कि प्रत्येक विभाजक के लिए लेआउट में इस विभाजक के लिए एक सरल <दृश्य> क्यों न जोड़ें? इसका बहुत कम कोड है। क्या यह समाधान कम अच्छा प्रदर्शन बुद्धिमान है? tx
ग्रेग

4
यदि आप स्वाइप करने या वस्तुओं को इधर-उधर करने की कोशिश कर रहे हैं तो इस कार्यान्वयन के साथ समस्या उत्पन्न होती है।
तेरनोवी

1
@NJ धन्यवाद दोस्त आपने मेरा समय बचाया है।
सुहास बचेवार

40

यदि आप क्षैतिज और ऊर्ध्वाधर दोनों डिवाइडर चाहते हैं:

  1. क्षैतिज और लंबवत विभक्त आरेख को परिभाषित करें:

    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. इस कोड सेगमेंट को नीचे जोड़ें:

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

इसने काम कर दिया। लेकिन यदि आप ऊँचाई को विभाजित करने के लिए क्षैतिज_विभाजक। Xml को बदलते हैं और ऊँचाई को विभाजित करने के लिए vertical_divider.xml , तो आप DividerItemDecorationइस तरह से प्रत्येक बना सकते हैं : verticalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.VERTICAL);और horizontalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.HORIZONTAL);
रूबेन ओ। चियावोन

33

इन सभी जवाबों ने मुझे पास कर दिया लेकिन वे प्रत्येक एक महत्वपूर्ण विवरण याद कर रहे थे। थोड़े से शोध के बाद, मुझे इन 3 चरणों के संयोजन का सबसे आसान मार्ग मिल गया:

  1. समर्थन पुस्तकालय का उपयोग करें DividerItemDecoration
  2. सही रंग के साथ एक विभक्त बनाएँ
  3. इस डिवाइडर को अपने विषय में सूचीकर्ता के रूप में सेट करें

चरण 1: RecyclerView को कॉन्फ़िगर करते समय

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

चरण 2: रेस / ड्रॉएबल / डिवाइडर_ग्रे.एक्सएमएल जैसी फाइल में

<?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>

चरण 3: ऐप के विषय में

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

संपादित करें: अंतिम विभक्त को छोड़ने के लिए अद्यतन किया गया:
इसे थोड़ा उपयोग करने के बाद, मैंने महसूस किया कि यह अंतिम वस्तु के बाद एक विभक्त खींच रहा था, जो कष्टप्रद था। इसलिए मैंने चरण 1 को संशोधित किया जो कि डिविडेर इटेमडेक्वालेशन में डिफ़ॉल्ट व्यवहार को ओवरराइड करने के लिए है (बेशक, एक अलग वर्ग बनाना एक अन्य विकल्प है):

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
ओवरराइडिंग getItemOffsets मेरे लिए काम नहीं करता है। यहां तक ​​कि अगर मैं ओवरराइड करता हूं और कभी भी सुपर कॉल नहीं करता हूं, तो डिवाइडर अभी भी तैयार है। यकीन नहीं होता क्या बदल गया।
खोया हुआ

2
यह मेरे लिए भी काम नहीं करता है। आखिरी डिवाइडर अभी भी दिखा रहा है।
सोती

1
मैंने DividerItemDecoration के स्रोत की प्रतिलिपि बनाकर अपने स्वयं के विभक्त वर्ग का निर्माण किया, और अंतिम विभाजक को न खींचने के लिए थोड़ा बदल दिया। विधि ड्राइंग में, बस की अनदेखी आखिरी बच्चा दृश्य: for (int i = 0; i < childCount; i++) करने के लिए परिवर्तनfor (int i = 0; i < childCount - 1; i++)
kientux

चूंकि आइटमडीक्यूलेशन सूची आइटम ("अंडर लिस्ट आइटम") से पहले तैयार किया गया है, दिए गए समाधान केवल तभी काम करता है जब आपकी सूची आइटम में 100% अपारदर्शी पृष्ठभूमि हो, या जब सजावट योग्य 100% पारदर्शी हो (तो उपयोगकर्ता पुनर्नवीनीकरण दृश्य को देखता है)। अन्यथा डिवाइडर दिखाई नहीं देता है जो आप getItemOffsets में लौटाते हैं ()
ernazm

31

आप आइटम एडॉप्टर के अंत तक एक दृश्य जोड़ें:

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

25
इस समाधान के साथ आपको सूची के अंत में विभक्त रेखा भी मिलेगी।
एरिया

5
आखिरी लाइन को प्रोग्राम में कुछ इस तरह से कहकर हटाया जा सकता है कि OnBindViewHolder if(position == getItemCount() - 1) { mDividerView.setVisibility(View.INVISIBLE) }या ऐसा करने के अन्य तरीके होने चाहिए।
अली काजी

अधिकांश समय, 1pxऊँचाई के साथ अंतिम पंक्ति , हमारी आँखों के लिए अदृश्य है
मेहदी खदेलूमो

@LucasDiego यह काम करेगा लेकिन हम जानते हैं कि आमद महंगा है।
जोहरा खान

21

यहाँ एक सरल कस्टम विभक्त के लिए कोड है (ऊर्ध्वाधर विभक्त / 1dp ऊंचाई / काला):

यह मान लें कि आपके पास समर्थन लाइब्रेरी है:

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

जावा कोड

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

तब 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

Res / drawable फ़ोल्डर में एक अलग 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>

मुख्य गतिविधि पर उस xml फ़ाइल (your_file) को इस तरह कनेक्ट करें:

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

पैडिंग कैसे जोड़ें? आकार में पैडिंग का उपयोग करना काम नहीं करता है।
मकाले


8

मुझे लगता है कि आप उपयोग कर रहे हैं Fragments हैंRecyclerView

बस अपनी RecyclerViewऔर LayoutManagerऑब्जेक्ट बनाने के बाद इन लाइनों को जोड़ें

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

बस!

यह HORIZONTAL और VERTICAL दोनों कथनों का समर्थन करता है।



8

जिस तरह से मैं डिवाइडर दृश्य को संभाल रहा हूं और डिवाइडर इनसेट्स को भी RecyclerView एक्सटेंशन जोड़कर।

1।

नाम या RecyclerView नामकरण द्वारा एक नई एक्सटेंशन फ़ाइल जोड़ें:

RecyclerViewExtension.kt

और setDividerRecyclerViewExtension.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।

drawableपैकेज के अंदर एक ड्रा करने योग्य संसाधन फ़ाइल बनाएँ जैसे 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>

जहां छोड़ दिया और सही निर्दिष्ट कर सकते हैं मार्जिन पर android:insetLeftऔर android:insetRight

3।

अपनी गतिविधि या परिश्रम पर जहां RecyclerView को आरंभीकृत किया जाता है, आप कॉल करके कस्टम ड्रा करने योग्य सेट कर सकते हैं:

recyclerView.setDivider(R.drawable.recycler_view_divider)

4।

चीयर्स 🍺

विभक्त के साथ पुनर्नवीनीकरण पंक्ति।


7

आपको अगली पंक्ति जोड़ने की आवश्यकता है ...

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

6

तो यह सही तरीका नहीं हो सकता है, लेकिन मैंने अभी-अभी RecyclerView के एकल आइटम दृश्य में एक दृश्य जोड़ा है (जैसा कि मुझे नहीं लगता कि इसमें कोई अंतर्निहित फ़ंक्शन है):

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

इसका मतलब है कि प्रत्येक आइटम में एक पंक्ति होगी जो इसे अपने तल पर भरती है। मैंने इसे #111111पृष्ठभूमि के साथ लगभग 1dp ऊँचा बनाया । यह इसे "3 डी" प्रभाव का एक प्रकार भी देता है।


2
- यह एक तरीका नहीं है
आनंद तिवारी

5

आप एक सरल पुन: प्रयोज्य विभक्त बना सकते हैं।

डिवाइडर बनाएँ:

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

डिवाइडर लाइन बनाएँ: विभक्त। 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>

अपने Recyclerview में विभक्त जोड़ें:

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

अंतिम आइटम के लिए विभक्त निकालने के लिए:

अंतिम आइटम के लिए डिवाइडर ड्राइंग को रोकने के लिए आपको इस लाइन को बदलना होगा।

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

सेवा

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

आपका अंतिम कार्यान्वयन इस तरह होना चाहिए:

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

आशा करता हूँ की ये काम करेगा:)


1
यह पूरी तरह से काम करता है मुझे नहीं पता कि यह स्वीकृत उत्तर क्यों नहीं है
कैनेडी कम्बो

2

yqritc का RecyclerView-FlexibleDivider इसे एक लाइनर बनाता है। पहले इसे अपने में जोड़ें build.gradle:

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

अब आप अपने रिसाइक्लरव्यू के एडेप्टर को सेट करने के लिए एक विभाजक को जोड़ सकते हैं और जोड़ सकते हैं:

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
@ गौरव, HorizontalDividerItemDecorationकक्षा कहाँ स्थित है?
iRuth

@iRuth, आपको अपनी .gradle फ़ाइल को github.com/yqritc/RecyclerView-FlexibleDivider
Hakem Zaied

5
यह एक अधूरा जवाब है। शायद एक डाउन वोट उपयुक्त है।
सप्ताहांत

यह उल्लेख करना अच्छा है कि उस @ गौरव-वचनाणी के लिए 3-आरडी पार्टी की आवश्यकता है
एंड्रयू वी।

2

एंड्रॉइड छोटी चीजों को दुर्भाग्य से बहुत जटिल बना देता है। DividerItemDecoration को लागू किए बिना आप जो चाहते हैं उसे प्राप्त करने का सबसे आसान तरीका है:

पृष्ठभूमि रंग को अपने इच्छित विभक्त रंग में RecyclerView में जोड़ें:

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

आइटम के लेआउट रूट में नीचे मार्जिन (android: layout_marginBottom) जोड़ें (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>

यह आइटम और RecyclerView की पृष्ठभूमि रंग (जो गहरे भूरे रंग के रूप में विभक्त दिखाई देगा) के बीच 1dp स्थान देना चाहिए।


1

NJ के उत्तर को थोड़ा सरल बनाने के लिए आप कर सकते हैं:

public class DividerColorItemDecoration extends DividerItemDecoration {

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

1

बस अपने आइटम के तल पर x राशि का एक मार्जिन जोड़ें 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));

कहाँ 0क्षैतिज है और 1राजनीतिक है


3
समर्थन पुस्तकालय के भविष्य के रिलीज पर मूल्य में बदलाव हो सकता है क्योंकि निरंतर चर का बेहतर उपयोग करें
इरशू

सच .. हमें LinearLayoutManager.HORIZONTAL या LinearLayoutManager.ver का उपयोग करना चाहिए। इसके बजाय 0 या 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)
                }
            }
        }
    }

आपको बस 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>

और इसे अपने recyclerView में जोड़ें

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

refernce इस


0

भुवनेश बीएस समाधान काम करता है। इस का कोटलिन संस्करण:

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

मुझे लगता है कि इसका सबसे आसान तरीका है

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

ध्यान दें: myshape आप अपने विभक्त बनाना चाहते हैं ऊंचाई के साथ आयत हो सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.