অ্যান্ড্রয়েড রিসাইকেলারভিউতে কীভাবে একটি ডিভাইডার লাইন যুক্ত করা যায়?


221

আমি যেখানে অ্যান্ড্রয়েড অ্যাপ্লিকেশন ব্যবহার করছি সেখানে বিকাশ করছি RecyclerView। আমাকে একটি ডিভাইডার যুক্ত করতে হবে RecyclerView। আমি যোগ করার চেষ্টা করেছি -

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

নীচে আমার এক্সএমএল কোডটি রয়েছে -

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

3
আমি এই আপনাকে সাহায্য করবে guees stackoverflow.com/q/24618829/942224
সংকেত 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
তথ্যের জন্য হাই ধন্যবাদ! শেষ আইটেমটি পরে ডিভাইডার অপসারণ করার কোন উপায় আছে? আমার সবেমাত্র একটি কার্ডভিউ রয়েছে যেখানে তালিকাটি কার্যকর করা হয়েছে এবং নীচে কার্ডভিউয়ের ডিভাইডার + ছায়া ভাল দেখাচ্ছে না!
ম্যাক্সি

4
আমারও একই সমস্যা ছিল এবং ডিভাইডার আইটেমডেকোরেশন বাড়িয়ে এবং getItemOffsets ওভাররাইড করে এটি সমাধান করে, তারপরে আমি কেবল প্রথম আইটেমটিতে না থাকলে কেবল সুপারকে কল করুন। if(parent.getChildAdapterPosition(view) == state.getItemCount() - 1)তারপরে ফিরে আসুন, অন্যথায় সুপারক্লাসকে কল করুন getItemOffsets()
রবিন

13
পরিবর্তে mLayoutManager.getOrientation(), আমি ব্যবহার করেছি DividerItemDecoration.VERTICALএবং এটি কাজ করেছে, যেহেতু আমার রিসাইক্লারভিউ উল্লম্ব।
অ্যারন লেলেভিয়ার

2
এই বিল্টটি ব্যবহার করে কীভাবে ডিভাইডারের রঙ পরিবর্তন করার উপায় আছে?
j2emanue

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

সম্পাদন করা

@ অ্যালান সলিটার দ্বারা নির্দেশিত হিসাবে

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

আপনি ব্যবহার করতে পারেন তার পরিবর্তে অবচয় করা হয়

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

3
কনটেক্সট.জেট রিসোর্সস ()। getDrawable (R.drawable.line_divider) এখন হ্রাস করা হয়েছে।
অ্যালান এস

2
সমস্যা নেই. এটি একটি ভাল উত্তর এবং এটি আমার পক্ষে নিখুঁতভাবে কাজ করেছে। ধন্যবাদ.
অ্যালান এস

3
এটি পুরোপুরি আমার পক্ষে কাজ করছে। যাইহোক, আমি ভাবছি কেন প্রতিটি ঘরের লেআউটে এই বিভাজকটির জন্য একটি সাধারণ <ভিউ> যোগ করবেন না? এটি অনেক কম কোড। এই সমাধানটি কি কম ভাল পারফরম্যান্স বুদ্ধিমান? tx
গ্রেগ

4
আপনি যদি কিছু পরিবর্তন করে আইটেম সোয়াইপ করে বা চালানোর চেষ্টা করেন তবে এই বাস্তবায়নে সমস্যা দেখা দেয়।
TerNovi

1
@ এনজে ধন্যবাদ বন্ধু আপনি আমার সময় বাঁচিয়েছেন।
সুহাস বাছাওয়ার

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

এটা কাজ করেছে. তবে আপনি যদি উচ্চতা বিভক্ত করতে প্রস্থ এবং উল্লম্ব_ডিভাইডার.এক্সএমএলকে অনুভূমিক_ডিভাইডার.এক্সএমএল পরিবর্তন করেন তবে আপনি এর মতো প্রতিটি তৈরি করতে পারেন : এবং । DividerItemDecorationverticalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.VERTICAL);horizontalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.HORIZONTAL);
রুবেন ও চিয়াভোন

33

এই উত্তরগুলির সমস্ত আমার কাছে পেয়েছিল তবে সেগুলির প্রতিটি একটি মূল বিশদ অনুপস্থিত ছিল। কিছুটা গবেষণার পরে, আমি এই 3 টি পদক্ষেপের সংমিশ্রণে সবচেয়ে সহজতম পথটি পেয়েছি:

  1. সমর্থন লাইব্রেরির ডিভাইডারআইটেমডেকোরেশন ব্যবহার করুন
  2. সঠিক রঙের সাথে একটি বিভাজক তৈরি করুন
  3. আপনার থিমে এই ডিভাইডারকে তালিকাভুক্তকারী হিসাবে সেট করুন

পদক্ষেপ 1: পুনর্ব্যবহারযোগ্য কনফিগার করার সময়

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 ওভাররাইডিং আমার পক্ষে কাজ করে না বলে মনে হচ্ছে। এমনকি আমি যদি ওভাররাইড করি এবং কখনই সুপারকে কল না করি তবে বিভাজকটি এখনও টানা হবে। কি পরিবর্তন হয়েছে তা নিশ্চিত নয়।
17'15 এ 11

2
এটি আমার পক্ষেও কাজ করে না। শেষ বিভাজক এখনও দেখাচ্ছে।
সোতি

1
আমি ডিভাইডার আইটেমডেকোরেশনের উত্স অনুলিপি করে আমার নিজস্ব বিভাজক শ্রেণি তৈরি করে শেষ করেছি এবং শেষ বিভাজক অঙ্কন না করে কিছুটা পরিবর্তন করেছি। পদ্ধতি অঙ্কন সালে শুধু উপেক্ষা শেষ সন্তান মতবাদ: for (int i = 0; i < childCount; i++) পরিবর্তনfor (int i = 0; i < childCount - 1; i++)
kientux

যেহেতু আইটেমডেকোরেশন তালিকা আইটেমের আগে অঙ্কিত হয় ("তালিকা" আইটেমের নীচে), প্রদত্ত সমাধান কেবল তখনই কাজ করে যদি আপনার তালিকার আইটেমটির 100% অস্বচ্ছ ব্যাকগ্রাউন্ড থাকে, বা যখন সাজসজ্জা আঁকতে 100% স্বচ্ছ হয় (সুতরাং ব্যবহারকারী পুনর্ব্যবহারকারীর ব্যাকগ্রাউন্ড দেখে)) অন্যথায় ডিভাইডারটি দৃশ্যমান হয় আপনি কীভাবে আইটেমফিসেটস () -তে ফিরে আসবেন তা বিবেচনাধীন
এর্নাজম

31

আপনার আইটেম অ্যাডাপ্টারের শেষে কেবল একটি ভিউ যুক্ত করুন:

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

24
এই সমাধানের সাথে আপনি তালিকার শেষে ডিভাইডার লাইনও পাবেন।
এরি

5
শেষ লাইনটি অনবিনড ভিউহোল্ডার-এ এরকম কিছু বলে প্রোগ্রামের মাধ্যমে মুছে ফেলা if(position == getItemCount() - 1) { mDividerView.setVisibility(View.INVISIBLE) }যাবে বা এটি করার অন্যান্য উপায় থাকতে হবে।
আলী কাজী

বেশিরভাগ সময়, 1pxউচ্চতার শেষ লাইনটি আমাদের চোখে অদৃশ্য
মেহেদী খাদেমলু

@ লুকাসডিয়েগো এটি কাজ করবে তবে আমরা জানি যে স্ফীতকরণ ব্যয়বহুল।
জোহরা খান

21

এখানে একটি সাধারণ কাস্টম বিভাজকের জন্য কোড (উল্লম্ব বিভাজক / 1 ডিপি উচ্চতা / কালো):

মনে করুন আপনার কাছে সাপোর্ট লাইব্রেরি রয়েছে:

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

তারপরে কাস্টম_ডিভাইডার.এক্সএমএল ফাইলের নমুনা:

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

রেজো / অঙ্কনযোগ্য ফোল্ডারে পৃথক 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>

মূল ক্রিয়াকলাপে এই এক্সএমএল ফাইলটি (আপনার_ফিল) সংযুক্ত করুন :

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

এটাই!

এটি উভয় আঞ্চলিক এবং ভার্টিকাল অভিযোজনকে সমর্থন করে।



7

আপনার পরবর্তী লাইন যুক্ত করা দরকার ...

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

7

আমি কীভাবে ডিভাইডার ভিউ এবং ডিভাইডার ইনসেটগুলি পরিচালনা করছি তার মধ্যে একটি রিসাইক্লিউউ এক্সটেনশন যুক্ত করা।

1।

ভিউ বা রিসাইকেলার ভিউ নামকরণ করে একটি নতুন এক্সটেনশন ফাইল যুক্ত করুন:

RecyclerViewExtension.kt

এবং setDividerপুনর্ব্যবহারযোগ্য ভিউ এক্সটেনশন.কিটি ফাইলের মধ্যে এক্সটেনশন পদ্ধতি যুক্ত করুন।

/*
* 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.setDivider(R.drawable.recycler_view_divider)

4।

চিয়ার্স 🍺

বিভাজক সহ রিসাইক্লারভিউ সারি।


6

সুতরাং এটি সঠিক উপায় নাও হতে পারে তবে আমি কেবল পুনরায় ব্যবহারকারীর ভিউয়ের একক আইটেম দর্শনে একটি ভিউ যুক্ত করেছি (কারণ আমি মনে করি না যে কোনও বিল্ট-ইন ফাংশন আছে) যেমন:

<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ব্যাকগ্রাউন্ড সহ প্রায় 1 ডিপি উচ্চ করেছিলাম । এটি এটিকে এক ধরণের "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);
        }
    }
}

বিভাজক লাইন তৈরি করুন: 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>

আপনার পুনর্ব্যবহারযোগ্য ভিউতে বিভাজক যুক্ত করুন:

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 এর পুনর্ব্যবহারযোগ্য ভিউ -ফ্লেক্সিবল ডিভাইডার এটিকে একটি ওলাইনার করে তোলে। প্রথমে এটি আপনার যুক্ত করুন 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

@ আই রূথ, আপনাকে আপনার .gradle ফাইল github.com/yqritc/RecyclerView-
মেকেন জায়েদ

5
এটি একটি অসম্পূর্ণ উত্তর। একটি ডাউন ভোট উপযুক্ত হতে পারে।
উইকএন্ড

এটি উল্লেখ করা ভাল যে @ গৌরব-বাছনি
অ্যান্ড্রু ভি।

2

দুর্ভাগ্যক্রমে অ্যান্ড্রয়েড কেবল ছোট জিনিসকে জটিল করে তুলেছে। ডিভাইডার আইটেমডেকারেশন বাস্তবায়ন না করে আপনি যা চান তা অর্জনের সহজ উপায়:

আপনার কাঙ্ক্ষিত ডিভাইডার রঙে রিসাইক্লার ভিউতে ব্যাকগ্রাউন্ড রঙ যুক্ত করুন:

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

আইটেমের বিন্যাস মূলটিতে (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>

এটি আইটেম এবং পুনর্ব্যবহারযোগ্য ভিউ (যা গা dark় ধূসর বর্ণ বিভাজক হিসাবে প্রদর্শিত হবে) এর পটভূমির রঙের মধ্যে 1dp স্থান দেওয়া উচিত।


1

এনজে এর উত্তরটি আরও সহজ করে তুলতে আপনি করতে পারেন:

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
সমর্থন লাইব্রেরির ভবিষ্যতে প্রকাশের মানটি পরিবর্তিত হতে পারে বলে ধ্রুবক পরিবর্তনশীলটি আরও ভালভাবে ব্যবহার করুন
Irshu

সত্য .. আমাদের 0 বা 1 এর পরিবর্তে
লিনিয়ারালআউটআউট ম্যানেজ.হোরাইজেন্টাল

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

আপনাকে কেবল আরডিড্রায়েবল.ডাইভাইডার_মেডিয়ামে একটি রঙ নির্দিষ্ট করতে হবে

<?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.addItemDecoration(
                        ItemOffsetDecoration(
                            this,
                            resources.getDimension(resources.getDimension(R.dimen.dp_70).roundToInt()).roundToInt(),
                            0
                        )
                    )

এই রেফারেন্স


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

দ্রষ্টব্য: মাইশাপে উচ্চতা দিয়ে আপনি পুনরায় বিভাজক করতে চান ct

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.