खोज…


वाक्य - विन्यास

पैरामीटर

पैरामीटर विवरण
सजावट RecyclerView जोड़ने के लिए आइटम सजावट
सूची इस RecyclerView लिए सजावट की सूची में सूचकांक। यह वह क्रम है जिसमें getItemOffset और onDraw कहलाते हैं। बाद में कॉल पिछले वाले ओवरड्राइव कर सकते हैं।

टिप्पणियों

सजावट स्थिर हैं

चूंकि सजावट केवल खींची जाती है, इसलिए उन पर क्लिक श्रोताओं या अन्य UI कार्यक्षमता को जोड़ना संभव नहीं है।

कई सजावट

RecyclerView कई सजावट जोड़ना कुछ मामलों में काम करेगा, लेकिन वर्तमान में कोई भी सार्वजनिक API नहीं है जो मापते या ड्राइंग करते समय अन्य संभावित सजावट को ध्यान में रखे। आप व्यू बाउंड्स या व्यू सजेस्टेड बाउंड्स प्राप्त कर सकते हैं, जहाँ सजे हुए बाउंड्स सभी डेकोरेट किए गए ऑफ़सेट्स के योग हैं।

अन्य संबंधित विषय:

RecyclerView
RecyclerView onClickListeners

आधिकारिक जावाडॉक

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

एक विभाजक खींचना

यह हर दृश्य के निचले भाग में एक रेखा खींचेगा लेकिन वस्तुओं के बीच विभाजक के रूप में कार्य करने वाला अंतिम।

public class SeparatorDecoration extends RecyclerView.ItemDecoration {

    private final Paint mPaint;
    private final int mAlpha;

    public SeparatorDecoration(@ColorInt int color, float width) {
        mPaint = new Paint();
        mPaint.setColor(color);
        mPaint.setStrokeWidth(width);
        mAlpha = mPaint.getAlpha();
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();

        // we retrieve the position in the list
        final int position = params.getViewAdapterPosition();

        // add space for the separator to the bottom of every view but the last one
        if (position < state.getItemCount()) {
            outRect.set(0, 0, 0, (int) mPaint.getStrokeWidth()); // left, top, right, bottom
        } else {
            outRect.setEmpty(); // 0, 0, 0, 0
        }
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        // a line will draw half its size to top and bottom,
        // hence the offset to place it correctly
        final int offset = (int) (mPaint.getStrokeWidth() / 2);

        // this will iterate over every visible view
        for (int i = 0; i < parent.getChildCount(); i++) {
            final View view = parent.getChildAt(i);
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();

            // get the position
            final int position = params.getViewAdapterPosition();

            // and finally draw the separator
            if (position < state.getItemCount()) {
                // apply alpha to support animations
                mPaint.setAlpha((int) (view.getAlpha() * mAlpha));

                float positionY = view.getBottom() + offset + view.getTranslationY();
                // do the drawing
                c.drawLine(view.getLeft() + view.getTranslationX(),
                        positionY,
                        view.getRight() + view.getTranslationX(),
                        positionY,
                        mPaint);
            }
        }
    }
}

ItemDecoration के साथ प्रति-आइटम मार्जिन

आप एक RecyclerView.ItemDecoration में प्रत्येक आइटम के आसपास अतिरिक्त मार्जिन लगाने के लिए एक RecyclerView.ItemDecoration का उपयोग कर सकते हैं। यह कुछ मामलों में आपके एडॉप्टर कार्यान्वयन और आपके आइटम एक्सएमएल दोनों को साफ कर सकता है।

public class MyItemDecoration
    extends RecyclerView.ItemDecoration {

    private final int extraMargin;

    @Override
    public void getItemOffsets(Rect outRect, View view,
            RecyclerView parent, RecyclerView.State state) {

        int position = parent.getChildAdapterPosition(view);

        // It's easy to put extra margin on the last item...
        if (position + 1 == parent.getAdapter().getItemCount()) {
            outRect.bottom = extraMargin; // unit is px
        }

        // ...or you could give each item in the RecyclerView different
        // margins based on its position...
        if (position % 2 == 0) {
            outRect.right = extraMargin;
        } else {
            outRect.left = extraMargin;
        }

        // ...or based on some property of the item itself
        MyListItem item = parent.getAdapter().getItem(position);
        if (item.isFirstItemInSection()) {
            outRect.top = extraMargin;
        }
    }

    public MyItemDecoration(Context context) {
        extraMargin = context.getResources()
                .getDimensionPixelOffset(R.dimen.extra_margin);
    }
}

सजावट को सक्षम करने के लिए, बस इसे अपने RecyclerView में जोड़ें:

// in your onCreate()
RecyclerView rv = (RecyclerView) findItemById(R.id.myList);
rv.addItemDecoration(new MyItemDecoration(context));

डिवाइडर को RecyclerView में जोड़ें

सबसे पहले आपको एक वर्ग बनाने की जरूरत है जो RecyclerView.ItemDecoration विस्तार करता है:

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

public SimpleBlueDivider(Context context) {
    mDivider = context.getResources().getDrawable(R.drawable.divider_blue);
}

@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
    //divider padding give some padding whatever u want or disable
    int left =parent.getPaddingLeft()+80;
    int right = parent.getWidth() - parent.getPaddingRight()-30;

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

}

अपने divider_blue.xml करने योग्य फ़ोल्डर में divider_blue.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="4dp" />
<solid android:color="#AA123456" />
</shape>

फिर इसका उपयोग करें जैसे:

recyclerView.addItemDecoration(new SimpleBlueDivider(context));

परिणाम इस प्रकार होगा:

यहाँ छवि विवरण दर्ज करें

यह छवि केवल एक उदाहरण है कि डिवाइडर कैसे काम करता है, यदि आप डिवाइडर को जोड़ने के दौरान मटेरियल डिज़ाइन स्पेक्स का पालन करना चाहते हैं, तो कृपया इस लिंक पर एक नज़र डालें: लिंक प्रदान करके डिवाइडर और धन्यवाद @Brenden Kromhout

डिवाइडर का उपयोग कर और डिवाइडर को जोड़ने के लिए कैसे

DividerItemDecoration एक RecyclerView.ItemDecoration जिसे आइटमों के बीच विभक्त के रूप में उपयोग किया जा सकता है।

DividerItemDecoration mDividerItemDecoration = new DividerItemDecoration(context,
             mLayoutManager.getOrientation());
recyclerView.addItemDecoration(mDividerItemDecoration);

यह DividerItemDecoration.VERTICAL और DividerItemDecoration.HORIZONTAL का उपयोग करके दोनों अभिविन्यास का समर्थन करता है।

RecycleView में GridLayoutManager के लिए ItemOffsetDecoration

उदाहरण के बाद GridLayout में एक आइटम के बराबर जगह देने में मदद मिलेगी।

ItemOffsetDecoration.java

public class ItemOffsetDecoration extends RecyclerView.ItemDecoration {

    private int mItemOffset;

    private int spanCount = 2;

    public ItemOffsetDecoration(int itemOffset) {
        mItemOffset = itemOffset;
    }

    public ItemOffsetDecoration(@NonNull Context context, @DimenRes int itemOffsetId) {
        this(context.getResources().getDimensionPixelSize(itemOffsetId));
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
                               RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);

        int position = parent.getChildLayoutPosition(view);

        GridLayoutManager manager = (GridLayoutManager) parent.getLayoutManager();

        if (position < manager.getSpanCount())
            outRect.top = mItemOffset;

        if (position % 2 != 0) {
            outRect.right = mItemOffset;
        }

        outRect.left = mItemOffset;
        outRect.bottom = mItemOffset;
    }
}

आप आइटम कोड को नीचे दिए गए कोड की तरह कह सकते हैं।

recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);

GridLayoutManager lLayout = new GridLayoutManager(getActivity(), 2);

ItemOffsetDecoration itemDecoration = new ItemOffsetDecoration(mActivity, R.dimen.item_offset);
recyclerView.addItemDecoration(itemDecoration);

recyclerView.setLayoutManager(lLayout);

और उदाहरण आइटम ऑफसेट

<dimen name="item_offset">5dp</dimen>


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow