可以通过设置ItemDecoration
来解决这个问题。具体步骤如下:
1.继承ItemDecoration
类,重写getItemOffsets
方法,该方法表示针对某个RecyclerView
中的Item的间距。
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration { private int spanCount; private int spacing; private boolean includeEdge; public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) { this.spanCount = spanCount; this.spacing = spacing; this.includeEdge = includeEdge; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int position = parent.getChildLayoutPosition(view); // item position int column = position % spanCount; // item column if (includeEdge) { // 如果需要设置左右边距 outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing) // outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing) outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f / spanCount) * spacing) if (position < spanCount) { // top edge outRect.top = spacing; } outRect.bottom = spacing; // item bottom } else { // 如果不需要设置左右边距 outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing) outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f / spanCount) * spacing) if (position >= spanCount) { outRect.top = spacing; // item top } } } }
2.在需要使用RecyclerView
的地方,调用addItemDecoration
方法,为该RecyclerView
添加间距。
int spanCount = 3; //列数
int spacing = 50; //item间距
boolean includeEdge = true; //是否设置左右边距
recyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
这样设置后,在使用GridLayoutManager
作为LayoutManager
的时候,左侧所有第一个item
放大时左边就不会出现展示不全的情况了。