Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android add spacing below last element in recyclerview with gridlayoutmanager

I am trying to add spacing below the last element row in RecyclerView with GridLayoutManager. I used custom ItemDecoration for this purpose with bottom padding when its last element as follows:

public class SpaceItemDecoration extends RecyclerView.ItemDecoration { private int space; private int bottomSpace = 0;  public SpaceItemDecoration(int space, int bottomSpace) {     this.space = space;     this.bottomSpace = bottomSpace; }  public SpaceItemDecoration(int space) {     this.space = space;     this.bottomSpace = 0; }  @Override public void getItemOffsets(Rect outRect, View view,                            RecyclerView parent, RecyclerView.State state) {      int childCount = parent.getChildCount();     final int itemPosition = parent.getChildAdapterPosition(view);     final int itemCount = state.getItemCount();      outRect.left = space;     outRect.right = space;     outRect.bottom = space;     outRect.top = space;      if (itemCount > 0 && itemPosition == itemCount - 1) {         outRect.bottom = bottomSpace;     } } } 

But the problem with this method is that it messed up the element heights in the grid in last row. I am guessing that GridLayoutManager changes the heights for elements based on spacing left. What is the correct way to achieve this?

This will work correctly for a LinearLayoutManager. Just in case of a GridLayoutManager its problematic.

Its very useful in case you have a FAB in bottom and need items in last row to scroll above FAB so that they can be visible.

like image 659
pratsJ Avatar asked Jun 16 '15 11:06

pratsJ


1 Answers

Just add a padding and set android:clipToPadding="false"

<RecyclerView     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="8dp"     android:clipToPadding="false" /> 

Thanks to this wonderful answer!

like image 136
Vedant Agarwala Avatar answered Oct 18 '22 13:10

Vedant Agarwala