[Android] RecyclerView は、リスト内の項目間の間隔を設定する方法を実装します。

序文

RecyclerView は高度にカスタマイズされたコントロールであり、その目標は効率的かつ柔軟なリスト表示を提供し、さまざまなレイアウト要件に適応することであるため、RecyclerView の項目にはデフォルトでスペースがありません。

開発者がリスト項目のレイアウトとスタイルを完全にカスタマイズできるようにするために、RecyclerView には項目間にスペースを追加するためのデフォルト設定項目がありません。この設計の利点は、開発者が固定のデフォルト間隔に制限されることなく、項目間の間隔を独自のニーズに応じて柔軟に処理できることです。

間隔を追加する

RecyclerView で項目間の間隔を確保したい場合は、次の方法で行うことができます。

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

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

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

これらのメソッドを使用すると、RecyclerView 項目間の間隔を確保できます。

この記事で紹介する第二种方式実装方法は、

カスタムアイテム装飾

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 ファイルに間隔寸法の定義を必ず追加してください。次に例を示します。

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

このようにして、RecyclerView の各項目間に指定された間隔が確保されます。

おすすめ

転載: blog.csdn.net/qq_43358469/article/details/131823671