अक्टूबर 2016 अपडेट
एंड्रॉइड सपोर्ट लाइब्रेरी के संस्करण 25.0.0 ने DividerItemDecoration
कक्षा शुरू की:
DividerItemDecoration एक RecyclerView.ItemDecoration है जिसे एक के आइटम के बीच एक विभक्त के रूप में इस्तेमाल किया जा सकता है LinearLayoutManager
। यह दोनों HORIZONTAL
और VERTICAL
झुकाव का समर्थन करता है ।
उपयोग:
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
layoutManager.getOrientation());
recyclerView.addItemDecoration(dividerItemDecoration);
पिछला उत्तर
कुछ उत्तर या तो उन विधियों का उपयोग करते हैं जो तब से समाप्त हो गए हैं, या संपूर्ण समाधान नहीं देते हैं, इसलिए मैंने एक छोटा, अप-टू-डेट रैप-अप करने की कोशिश की।
इसके विपरीत ListView
, RecyclerView
वर्ग में कोई विभक्त-संबंधित पैरामीटर नहीं है। इसके बजाय, आपको विस्तार करने की आवश्यकता है ItemDecoration
, एक RecyclerView
आंतरिक वर्ग:
एक ItemDecoration
एप्लिकेशन को एडेप्टर के डेटा सेट से विशेष आइटम दृश्यों के लिए एक विशेष ड्राइंग और लेआउट ऑफसेट को जोड़ने की अनुमति देता है। यह आइटम, हाइलाइट्स, विज़ुअल ग्रुपिंग सीमाओं और अधिक के बीच डिवाइडर खींचने के लिए उपयोगी हो सकता है।
सभी ItemDecorations
, ताकि उन्हें जोड़ा गया था में तैयार कर रहे हैं (में आइटम विचारों से पहले onDraw()
() और आइटम के बाद onDrawOver (में Canvas
, RecyclerView
, RecyclerView.State)
।
Vertical
अंतर ItemDecoration
विस्तार करें ItemDecoration
, कस्टम कंस्ट्रक्टर जोड़ें जो height
एक पैरामीटर के रूप में जगह लेता है और getItemOffsets()
विधि को ओवरराइड करता है:
public class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration {
private final int verticalSpaceHeight;
public VerticalSpaceItemDecoration(int verticalSpaceHeight) {
this.verticalSpaceHeight = verticalSpaceHeight;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
outRect.bottom = verticalSpaceHeight;
}
}
यदि आप अंतिम आइटम के नीचे स्थान नहीं डालना चाहते हैं, तो निम्न शर्त जोड़ें:
if (parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1) {
outRect.bottom = verticalSpaceHeight;
}
नोट: यदि आप भी संशोधित कर सकते हैं outRect.top
, outRect.left
और outRect.right
वांछित प्रभाव के लिए गुण।
डिवाइडर ItemDecoration
विस्तार ItemDecoration
और ओवरराइड onDraw()
विधि:
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
private Drawable divider;
/**
* Default divider will be used
*/
public DividerItemDecoration(Context context) {
final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS);
divider = styledAttributes.getDrawable(0);
styledAttributes.recycle();
}
/**
* Custom divider will be used
*/
public DividerItemDecoration(Context context, int resId) {
divider = ContextCompat.getDrawable(context, resId);
}
@Override
public void onDraw(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 + divider.getIntrinsicHeight();
divider.setBounds(left, top, right, bottom);
divider.draw(c);
}
}
}
आप या तो पहले निर्माता को कॉल कर सकते हैं जो डिफ़ॉल्ट एंड्रॉइड डिवाइडर विशेषताओं का उपयोग करता है, या दूसरा जो आपके स्वयं के ड्रॉबल का उपयोग करता है, उदाहरण के लिए ड्रॉबल / डिवाइडर। 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="#ff992900" />
</shape>
नोट: यदि आप चाहते हैं कि विभक्त आपके आइटम पर आरेखित हो , तो onDrawOver()
इसके बजाय विधि को ओवरराइड करें ।
प्रयोग
अपने नए वर्ग ऐड उपयोग करने के लिए VerticalSpaceItemDecoration
या DividerSpaceItemDecoration
करने के लिए RecyclerView
अपने टुकड़ा के दशक में उदाहरण के लिए, onCreateView()
विधि:
private static final int VERTICAL_ITEM_SPACE = 48;
private RecyclerView recyclerView;
private LinearLayoutManager linearLayoutManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_feed, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.fragment_home_recycler_view);
linearLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
//add ItemDecoration
recyclerView.addItemDecoration(new VerticalSpaceItemDecoration(VERTICAL_ITEM_SPACE));
//or
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity()));
//or
recyclerView.addItemDecoration(
new DividerItemDecoration(getActivity(), R.drawable.divider));
recyclerView.setAdapter(...);
return rootView;
}
वहाँ भी है लुकास रोचा के पुस्तकालय जो आइटम सजावट की प्रक्रिया को सरल करने के लिए माना जाता है। हालांकि यह कोशिश नहीं की है।
इसकी विशेषताएं इस प्रकार हैं:
- सहित स्टॉक आइटम सजावट का एक संग्रह:
- क्षैतिज / लंबवत डिवाइडर के अंतर वाली वस्तु।
- सामग्री सूचीबद्ध करें