ItemOffsetDecoration for GridLayoutManager in RecycleView

suggest change

Following example will help to give equal space to an item in GridLayout.

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) {

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

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

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

You can call ItemDecoration like below code.

recyclerView = (RecyclerView) view.findViewById(;

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

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

and example item offset
<dimen name="item_offset">5dp</dimen>

Feedback about page:

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

Table Of Contents