Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Jetpack Compose LazyColumn的项目装饰是什么?_Android_Android Recyclerview_Android Jetpack Compose_Item Decoration_Android Jetpack Compose List - Fatal编程技术网

Android Jetpack Compose LazyColumn的项目装饰是什么?

Android Jetpack Compose LazyColumn的项目装饰是什么?,android,android-recyclerview,android-jetpack-compose,item-decoration,android-jetpack-compose-list,Android,Android Recyclerview,Android Jetpack Compose,Item Decoration,Android Jetpack Compose List,在JetpackCompose中,我们可以使用LazyColumnFor作为RecyclerView 在RecyclerView中,为了在项目之间有适当的边距/填充,我们需要使用ItemDecoration,如下所示 如下 class MarginItemDecoration(private val spaceHeight: Int) : RecyclerView.ItemDecoration() { override fun getItemOffsets(outRect: Rect,

在JetpackCompose中,我们可以使用
LazyColumnFor
作为
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
ItemEdition
的等价物是什么?

我使用
LazyColumnFor
contentPadding
作为所有项目的底部填充

@Composable
fun MyComposeList(
    modifier: Modifier = Modifier,
    listItems: List<String>,
) {
    LazyColumnFor(
        modifier = modifier, items = listItems,
        contentPadding = PaddingValues(16.dp, 16.dp, 16.dp)
    ) { itemText ->
        ViewItem(
            itemText = itemText
        )
        Spacer(modifier = Modifier.fillMaxWidth().height(16.dp))
    }
}
@Composable
有趣的作曲家(
修饰符:修饰符=修饰符,
列表项:列表,
) {
懒散的(
修饰符=修饰符,项=列表项,
contentPadding=填充值(16.dp、16.dp、16.dp)
){itemText->
视图项(
itemText=itemText
)
间隔符(修饰符=修饰符.fillMaxWidth().height(16.dp))
}
}

这似乎得到了我所需要的结果,因为
contentPadding
可以在
LazyColumnFor
中一起滚动,您可以使用
LazyColumn
itemsIndexed
(以前是
LazyColumnForIndexed
,不推荐使用)并根据索引应用填充

LazyColumn{
itemsIndexed(items=…){索引,item->
框(修改器。填充)(
开始=16.dp,结束=16.dp,底部=16.dp,顶部=如果(指数==0)16.dp否则0.dp
))
}
}
使用
1.0.0
(使用
1.0.0-beta07测试)可用于在项目之间添加间距

比如:

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
填充


太好了。谢谢它是否也允许在两者之间绘制任何图形(即,item decorator不仅允许填充,还允许任何图形,如线条)。@Elye目前它仅提供内容间距。其他装饰程序当前的解决方法是将它们放在
items/item
块的内容中