We have decided to shift our images Gallery code from GridView to using Grid Layout manager in RecyclerView in Phimpme Android application. RecyclerView has many advantages as compare to Grid/ List view.
- Advantages of using layout manager either List, Grid or Staggered.
- We can use many built in animations.
- Item decorator for customizing the item.
- Recycle items using the View Holder pattern
Recycler View documentation
Adding recyclerview in xml
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rv" />
Setting layout manager
mLayoutManager = new GridLayoutManager(this, 3); recyclerView.setLayoutManager(mLayoutManager);
In phimpme we have an item as an ImageView, to show into the grid. Setup the Grid using layout manager as above.
Gallery of images is set but there is no spacing in between grid items. Padding will not help in this case.
Found a way to set offset by creating a Custom item decoration class. Add a constructor with parameter as a dimension resource.
public class ItemOffsetDecoration extends RecyclerView.ItemDecoration { private int mItemOffset; public ItemOffsetDecoration(int itemOffset) { mItemOffset = itemOffset; } public ItemOffsetDecoration(@NonNull Context context, @DimenRes int itemOffsetId) { this(context.getResources().getDimensionPixelSize(itemOffsetId)); } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); outRect.set(mItemOffset, mItemOffset, mItemOffset, mItemOffset); } }
Author: gist.github.com/yqritc/ccca77dc42f2364777e1
Usage:
ItemOffsetDecoration itemDecoration = new ItemOffsetDecoration(context, R.dimen.item_offset); mRecyclerView.addItemDecoration(itemDecoration)
Pass the item_offset value in the function. Go through the material design guidelines for a clear understanding of dimensions in item offset.