【问题标题】:Add space between cells in RecyclerView? [duplicate]在 RecyclerView 中的单元格之间添加空间? [复制]
【发布时间】:2021-01-31 04:08:12
【问题描述】:
在我的回收站视图中,项目被紧紧地粘在一起,我想在项目之间添加空间而不在项目本身中添加边距。我想知道如何才能做到这一点?
目前它看起来像这样:
我希望它看起来像:
我可以编辑 XML 本身来完成这个吗?
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:background="@color/gray6"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animationCache="false"
android:cacheColorHint="@color/transparent"
android:descendantFocusability="afterDescendants"
android:divider="@color/transparent"
android:dividerHeight="0dp"
android:listSelector="@color/transparent"
android:scrollingCache="false" />
【问题讨论】:
标签:
android
android-recyclerview
【解决方案1】:
也可以像这样制作自定义recyclerview装饰器,
class MarginItemDecoration(private val spaceHeight: Int) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View,
parent: RecyclerView, state: RecyclerView.State) { with(outRect) {
if (parent.getChildAdapterPosition(view) == 0) {
top = spaceHeight
}
left = spaceHeight
right = spaceHeight
bottom = spaceHeight
}
}
}
并将其添加到您的回收站视图中,
recyclerView.addItemDecoration(MarginItemDecoration(
resources.getDimension(R.dimen.default_padding).toInt()))
但是,这种方法有点冗长,我建议将margin放在recyclerview行的xml中,这也是一种不用担心的好方法!
希望得到问题的答案。
【解决方案2】:
你可以使用DividerItemDecoration如:
public static class DividerItemDecoration extends RecyclerView.ItemDecoration {
int spacing;
public DividerItemDecoration(Context context, int spacing) {
this.spacing=spacing;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.bottom=spacing;
}
}
然后添加这个
recyclerView.addItemDecoration(new DividerItemDecoration(30));
其中 30 是您需要的间距,您可以将其更改为任意数字。
//将这两个代码添加到包含recyclerview的activity中。