首页 > 解决方案 > 如何在 RecyclerView.ItemDecoration() 中使用 dp 而不是像素?

问题描述

我有一个自定义类来使用我的 RecyclerView 中的偏移量。

class SpacesItemDecoration(private var space: Int) : RecyclerView.ItemDecoration() {

    override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
        super.getItemOffsets(outRect, view, parent, state)
        outRect.bottom = space
    }
}

然后我像这样在我的代码中设置偏移量:

addItemDecoration(SpacesItemDecoration(25))

它有效,但它以像素为单位设置偏移量。我应该如何使用 dp 而不是像素?为什么谷歌更喜欢在这里使用像素?它已经应该被弃用了。

标签: androidandroid-recyclerview

解决方案


通过这种方法,您应该首先将 dp 转换为像素而不是设置

fun Context.dpToPixel(dp: Float): Float {
    return dp * (resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)
}

这样

addItemDecoration(SpacesItemDecoration(dpToPixel(25f)))

推荐阅读