1. ホーム
  2. アンドロイド

[解決済み】Android Recyclerview GridLayoutManagerの列間隔について

2022-03-31 11:01:42

質問

RecyclerViewでGridLayoutManagerを使って列の間隔を設定するにはどうしたらよいですか? レイアウトの中でmargin/paddingを設定しても効果がありません。

解決方法を教えてください。

RecyclerViewは、以下の概念をサポートしています。 アイテムデコレーション : 各要素の周囲に特別なオフセットと描画を行います。で見られるように この答え を使用することができます。

public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
  private int space;

  public SpacesItemDecoration(int space) {
    this.space = space;
  }

  @Override
  public void getItemOffsets(Rect outRect, View view, 
      RecyclerView parent, RecyclerView.State state) {
    outRect.left = space;
    outRect.right = space;
    outRect.bottom = space;

    // Add top margin only for the first item to avoid double space between items
    if (parent.getChildLayoutPosition(view) == 0) {
        outRect.top = space;
    } else {
        outRect.top = 0;
    }
  }
}

そして、以下の方法で追加します。

mRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view);
int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.spacing);
mRecyclerView.addItemDecoration(new SpacesItemDecoration(spacingInPixels));