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.
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!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With