-
-
Save buddhasaikia/711e630187c3bcc7e39be51df17ab1b3 to your computer and use it in GitHub Desktop.
Equal column spacing for Android RecyclerView GridLayoutManager by using custom ItemDecoration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### ItemOffsetDecoration | |
```java | |
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); | |
} | |
} | |
``` | |
### Implementation | |
In your source code, add ItemOffsetDecoration to your recyclerview. | |
Item offset value should be half size of the actual value you want to add as space between items. | |
```java | |
mRecyclerView.setLayoutManager(new GridLayoutManager(context, NUM_COLUMNS); | |
ItemOffsetDecoration itemDecoration = new ItemOffsetDecoration(context, R.dimen.item_offset); | |
mRecyclerView.addItemDecoration(itemDecoration); | |
``` | |
Also, set item offset value as padding for its recyclerview, and specify android:clipToPadding=false. | |
``` | |
<android.support.v7.widget.RecyclerView | |
android:id="@+id/recyclerview_grid" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
android:clipToPadding="false" | |
android:padding="@dimen/item_offset"/> | |
``` | |
DONE. You will get an equal spaces around items. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment