在我的目录中我有recyclerviews我想让recyclerview条目之间有空格,所以这里我有两个选项
- 我可以子类
RecyclerView.ItemDecoration
- 我可以将
margin
添加到项目本身
显然,第二个选项是简单的一个,使用该选项,我得到了所需的结果,但在网上,我看到人们使用ItemDecoration
,也推荐它。
我想知道使用ItemDecoration
是否有一些优势,即使我的用例非常简单,如在项目之间添加间距?ItemDecoration
是否提供性能优势或其他优势?
使用ItemDecoration
:
-
易于实现,只需
recyclerView.addItemDecoration(DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL))
-
这是自然的,它只增加项目之间的差距,这意味着你不会看到它在第一项的顶部,或最后一项的底部。
-
您可以自定义分隔符,通过以下命令:
val dividerDrawable = getDrawable(context, R.drawable.divider) itemDecoration.setDrawable(dividerDrawable)
UsingMargin
on Item View Layout:
- 也很容易实现,但它有一些明显的缺点:它将出现在第一个项目的顶部和最后一个项目的底部。除非你编写更多的代码(逻辑)来处理它。
您在各种资源中读到的内容确实是正确的。使用ItemDecoration
更加干净代码为可重用在某种意义上。
这消除了我们在UI中为item_layout手动调整页边距的需要,即使如此,最上面和最下面的项目也包含页边距问题。
使用ItemDecoration
,我们可以创建一个单独的类(见下面的例子)来添加偏移量。(
RecyclerView
项之间添加所需的间距:class MarginItemDecoration(private val spaceSize: Int) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect, view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
with(outRect) {
if (parent.getChildAdapterPosition(view) == 0) {
top = spaceSize
}
left = spaceSize
right = spaceSize
bottom = spaceSize
}
}
}
感谢@cmorigaki提供了上面的例子。