অক্টোবর 2016 আপডেট
অ্যান্ড্রয়েড সমর্থন লাইব্রেরির 25.0.0 সংস্করণটি DividerItemDecoration
শ্রেণি চালু করেছে :
ডিভাইডার আইটেম ডেকোরেশন হ'ল একটি পুনর্ব্যবহারযোগ্য আইটেমডেকোরেশন যা এ এর আইটেমগুলির মধ্যে বিভাজক হিসাবে ব্যবহার করা যেতে পারে 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;
}
}
আপনি যদি শেষ আইটেমের নীচে স্থান toোকাতে না চান তবে নিম্নলিখিত শর্তটি যুক্ত করুন:
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 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;
}
এছাড়াও লুকাস রচার লাইব্রেরি রয়েছে যা আইটেমের সজ্জা প্রক্রিয়াটি সহজ করার কথা। যদিও চেষ্টা করে দেখেনি।
এর বৈশিষ্ট্যগুলির মধ্যে রয়েছে :
- স্টক আইটেম সজ্জা সহ একটি সংগ্রহ:
- আইটেমের ফাঁকা ফাঁকা অনুভূমিক / উল্লম্ব বিভাজক।
- তালিকাবদ্ধ