Per-item margins with ItemDecoration

suggest change

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

    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()) {
   = extraMargin;

    public MyItemDecoration(Context context) {
        extraMargin = context.getResources()

To enable the decoration, simply add it to your RecyclerView:

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

Feedback about page:

Optional: your email if you want me to get back to you:

Table Of Contents