在 RecyclerView 中使用 ItemDecoration 重写 getItemOffsets 设置每个 Item 的间隔,支持各种 LayoutManager:
SpacingItemDecoration.java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public class SpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount; private int spacing; private boolean includeEdge;
public SpacingItemDecoration(int spacing, int spanCount, boolean includeEdge) { this.spacing = spacing; this.spanCount = spanCount; this.includeEdge = includeEdge; }
@Override public void getItemOffsets(@NotNull Rect outRect, @NotNull View view, RecyclerView parent, @NotNull RecyclerView.State state) { int position = parent.getChildAdapterPosition(view); int column = position % spanCount;
if (includeEdge) { outRect.left = spacing - column * spacing / spanCount; outRect.right = (column + 1) * spacing / spanCount;
if (position < spanCount) { outRect.top = spacing; } outRect.bottom = spacing; } else { outRect.left = column * spacing / spanCount; outRect.right = spacing - (column + 1) * spacing / spanCount; if (position >= spanCount) { outRect.top = spacing; } } } }
|