前言
RecyclerView 的 Item 默认没有间距是因为 RecyclerView 是一个高度自定义的控件,它的目标是提供一个高效灵活的列表展示,并且适应各种不同的布局需求。
为了让开发者能够充分自定义列表项的布局和样式,RecyclerView 没有默认设置项来添加 item 之间的间距。这样设计的好处是,开发者可以灵活地根据自己的需求来处理 item 之间的间距,而不被固定的默认间距所限制。
添加间距
想要在 RecyclerView 中实现 Item 之间的间距,可以通过以下几种方式进行处理:
1 在 item 布局文件中设置 item 的内边距,可以使用 padding 来添加间距。
2 自定义 RecyclerView.ItemDecoration 类,然后在 RecyclerView 中添加该 ItemDecoration 对象来控制 item 之间的间距。
3 在使用 RecyclerView 的布局管理器时,设置相关的布局参数或属性来调整 item 之间的间距。
这些方法都可以让你实现 RecyclerView 的 item 之间具有间距。
本篇文章讲第二种方式的实现方法
自定义 ItemDecoration
import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView
class SpacingItemDecoration(private val spacing: Int) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
super.getItemOffsets(outRect, view, parent, state)
val spacingPx = dpToPx(spacing, parent.context)
// 设置左、上、右、下四个方向的间距(这里统一设置为spacingPx的值)
outRect.left = spacingPx
outRect.right = spacingPx
outRect.top = spacingPx
outRect.bottom = spacingPx
}
}
private fun dpToPx(dp: Int, context: Context): Int {
val density = context.resources.displayMetrics.density
return (dp * density).toInt()
}
注意:RecyclerView 的 getItemOffsets() 方法中使用的单位是像素(px)
调用
// 添加间距 ItemDecoration
val spacingInPixels = resources.getDimensionPixelSize(R.dimen.spacing)
recyclerView.addItemDecoration(SpacingItemDecoration(spacingInPixels))
请确保在 dimens.xml 文件中添加 spacing 尺寸的定义,例如:
<resources>
<dimen name="spacing">8dp</dimen>
</resources>
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.youkuaiyun.com/qq_43358469/article/details/131823671