[Android] RecyclerView implementa una forma de establecer el espacio entre los elementos de la lista

prefacio

El elemento de RecyclerView no tiene espaciado de forma predeterminada porque RecyclerView es un control altamente personalizado y su objetivo es proporcionar una visualización de lista eficiente y flexible y adaptarse a diversos requisitos de diseño.

Para permitir que los desarrolladores personalicen por completo el diseño y el estilo de los elementos de la lista, RecyclerView no tiene un elemento de configuración predeterminado para agregar espacio entre los elementos. La ventaja de este diseño es que los desarrolladores pueden manejar con flexibilidad el espacio entre los elementos según sus propias necesidades, sin estar limitados por el espacio predeterminado fijo.

agregar espacio

Si desea lograr el espacio entre elementos en RecyclerView, puede hacerlo de las siguientes maneras:

1在 item 布局文件中设置 item 的内边距,可以使用 padding 来添加间距。

2自定义 RecyclerView.ItemDecoration 类,然后在 RecyclerView 中添加该 ItemDecoration 对象来控制 item 之间的间距。

3在使用 RecyclerView 的布局管理器时,设置相关的布局参数或属性来调整 item 之间的间距。

Estos métodos le permiten lograr un espacio entre los elementos de RecyclerView.

第二种方式El método de implementación descrito en este artículo

Artículo personalizadoDecoración

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()
}

Nota: La unidad utilizada en el método getItemOffsets() de RecyclerView es píxel (px)

transferir

// 添加间距 ItemDecoration
val spacingInPixels = resources.getDimensionPixelSize(R.dimen.spacing)
recyclerView.addItemDecoration(SpacingItemDecoration(spacingInPixels))

Asegúrese de agregar la definición de dimensiones de espaciado en el archivo dimens.xml, por ejemplo:

<resources>
    <dimen name="spacing">8dp</dimen>
</resources>

De esta forma, habrá un espacio específico entre cada elemento de RecyclerView.

Supongo que te gusta

Origin blog.csdn.net/qq_43358469/article/details/131823671
Recomendado
Clasificación