このような場合は、ItemDecorationを使用して解決することをお勧めします。 
public class ListSpacingDecoration extends RecyclerView.ItemDecoration {
  private static final int VERTICAL = OrientationHelper.VERTICAL;
  private int orientation = -1;
  private int spanCount = -1;
  private int spacing;
  public ListSpacingDecoration(Context context, @DimenRes int spacingDimen) {
    spacing = context.getResources().getDimensionPixelSize(spacingDimen);
  }
  public ListSpacingDecoration(int spacingPx) {
    spacing = spacingPx;
  }
  @Override
  public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    super.getItemOffsets(outRect, view, parent, state);
    if (orientation == -1) {
        orientation = getOrientation(parent);
    }
    if (spanCount == -1) {
        spanCount = getTotalSpan(parent);
    }
    int childCount = parent.getLayoutManager().getItemCount();
    int childIndex = parent.getChildAdapterPosition(view);
    int itemSpanSize = getItemSpanSize(parent, childIndex);
    int spanIndex = getItemSpanIndex(parent, childIndex);
    
    if (spanCount < 1) return;
    setSpacings(outRect, parent, childCount, childIndex, itemSpanSize, spanIndex);
  }
  protected void setSpacings(Rect outRect, RecyclerView parent, int childCount, int childIndex, int itemSpanSize, int spanIndex) {
    if (isBottomEdge(parent, childCount, childIndex, itemSpanSize, spanIndex)) {
        outRect.bottom = spacing;
    }
  }
  @SuppressWarnings("all")
  protected int getTotalSpan(RecyclerView parent) {
    RecyclerView.LayoutManager mgr = parent.getLayoutManager();
    if (mgr instanceof GridLayoutManager) {
        return ((GridLayoutManager) mgr).getSpanCount();
    } else if (mgr instanceof StaggeredGridLayoutManager) {
        return ((StaggeredGridLayoutManager) mgr).getSpanCount();
    } else if (mgr instanceof LinearLayoutManager) {
        return 1;
    }
    return -1;
  }
  @SuppressWarnings("all")
  protected int getItemSpanSize(RecyclerView parent, int childIndex) {
    RecyclerView.LayoutManager mgr = parent.getLayoutManager();
    if (mgr instanceof GridLayoutManager) {
        return ((GridLayoutManager) mgr).getSpanSizeLookup().getSpanSize(childIndex);
    } else if (mgr instanceof StaggeredGridLayoutManager) {
        return 1;
    } else if (mgr instanceof LinearLayoutManager) {
        return 1;
    }
    return -1;
  }
  @SuppressWarnings("all")
  protected int getItemSpanIndex(RecyclerView parent, int childIndex) {
    RecyclerView.LayoutManager mgr = parent.getLayoutManager();
    if (mgr instanceof GridLayoutManager) {
        return ((GridLayoutManager) mgr).getSpanSizeLookup().getSpanIndex(childIndex, spanCount);
    } else if (mgr instanceof StaggeredGridLayoutManager) {
        return childIndex % spanCount;
    } else if (mgr instanceof LinearLayoutManager) {
        return 0;
    }
    return -1;
  }
  @SuppressWarnings("all")
  protected int getOrientation(RecyclerView parent) {
    RecyclerView.LayoutManager mgr = parent.getLayoutManager();
    if (mgr instanceof LinearLayoutManager) {
        return ((LinearLayoutManager) mgr).getOrientation();
    } else if (mgr instanceof GridLayoutManager) {
        return ((GridLayoutManager) mgr).getOrientation();
    } else if (mgr instanceof StaggeredGridLayoutManager) {
        return ((StaggeredGridLayoutManager) mgr).getOrientation();
    }
    return VERTICAL;
  }
  protected boolean isBottomEdge(RecyclerView parent, int childCount, int childIndex, int itemSpanSize, int spanIndex) {
    if (orientation == VERTICAL) {
        return isLastItemEdgeValid((childIndex >= childCount - spanCount), parent, childCount, childIndex, spanIndex);
    } else {
        return (spanIndex + itemSpanSize) == spanCount;
    }
  }
  protected boolean isLastItemEdgeValid(boolean isOneOfLastItems, RecyclerView parent, int childCount, int childIndex, int spanIndex) {
    int totalSpanRemaining = 0;
    if (isOneOfLastItems) {
        for (int i = childIndex; i < childCount; i++) {
            totalSpanRemaining = totalSpanRemaining + getItemSpanSize(parent, i);
        }
    }
    return isOneOfLastItems && (totalSpanRemaining <= spanCount - spanIndex);
  }
}
私はここで私の元の答えから編集したものをコピーしました。これは実際には等間隔ですが、同じ概念です。