我试图用 GridLayoutManager
在 RecyclerView
的最后一个元素行下面添加间距。为此,我使用了定制的 ItemDecoration
,其最后一个元素的底部填充如下:
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;
}
}
}
但是这个方法的问题在于它搞乱了最后一行网格中的元素高度。我猜测 GridLayoutManager
会根据左边的间距改变元素的高度。实现这一目标的正确方法是什么?
这将工作正确的一个 LinearLayoutManager
。只是在情况下,一个 GridLayoutManager
它的问题。
它非常有用的情况下,你有一个 FAB
在底部,需要在最后一行的项目,以上滚动 FAB
,使他们可以看到。