Per-item margins with ItemDecoration
suggest changeYou can use a RecyclerView.ItemDecoration
to put extra margins around each item in a RecyclerView. This can in some cases clean up both your adapter implementation and your item view XML.
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); } }
To enable the decoration, simply add it to your RecyclerView:
// in your onCreate() RecyclerView rv = (RecyclerView) findItemById(R.id.myList); rv.addItemDecoration(new MyItemDecoration(context));
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents