RecyclerViewでアイテム間のmarginを指定する
RecyclerViewでアイテム間のmarginを指定したいときはItemDecorationを使いましょう。 XMLにそれっぽい属性があるはず、とか思いこむとハマります。
public class CustomItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public CustomItemDecoration(int space) {
this.space = space;
}
public static CustomItemDecoration createDefaultDecoration(Context context) {
int spacingInPixels = context.getResources().getDimensionPixelSize(R.dimen.item_margin);
return new CustomItemDecoration(spacingInPixels);
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.top = space;
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
}
}
みたいな感じで独自のItemDecorationクラスを実装します。この例だと上下左右に同じ大きさのmarginが指定されます。
あとはRecyclerViewにセットしてあげればOK。
mRecyclerView.addItemDecoration(SpacesItemDecoration.createDefaultDecoration(this));
RecyclerViewは柔軟だけど覚えなきゃいけないことが多くて大変。凝ったことしないときはあえてListViewを使うのも手ですね。
参考情報
関連(するかもしれない)記事
おススメ