首页 > 解决方案 > Jetpack Compose LazyColumn 的 ItemDecoration 是什么?

问题描述

在 JetpackCompose 中,我们可以使用LazyColumnForas RecyclerView

RecyclerView中,要在项目之间有适当的边距/填充,我们需要使用ItemDecoration,根据本文

像下面

class MarginItemDecoration(private val spaceHeight: Int) : RecyclerView.ItemDecoration() {
    override fun getItemOffsets(outRect: Rect, view: View,
                                parent: RecyclerView, state: RecyclerView.State) {
        with(outRect) {
            if (parent.getChildAdapterPosition(view) == 0) {
                top = spaceHeight
            }
            left =  spaceHeight
            right = spaceHeight
            bottom = spaceHeight
        }
    }
}

对于 JetpackCompose LazyColumnFor,相当于ItemDecoration什么?

标签: androidandroid-recyclerviewandroid-jetpack-composeitem-decorationandroid-jetpack-compose-list

解决方案


您可以使用Arrangement.spacedBy()在项目之间添加间距。

就像是:

LazyColumn(
    verticalArrangement = Arrangement.spacedBy(8.dp),
) {
    // ...
}

下面的示例8.dp在每个项目之间添加了空间

之前和之后:
在此处输入图像描述 在此处输入图像描述

如果要在内容边缘添加填充,可以使用该contentPadding参数。

  LazyColumn(
        verticalArrangement = Arrangement.spacedBy(8.dp),
        contentPadding = PaddingValues(horizontal = 24.dp, vertical = 8.dp)
  ){ ...  }

在上面的示例中,第一项将8.dp在其顶部添加内边距,最后一项将8.dp在其底部添加内边距,并且所有项将24.dp在左侧和右侧添加内边距。

在此处输入图像描述


推荐阅读