Jetpack Compose:如何为LazyColumn不同contentType设置不同间距?
LazyColumn不同类型项的间距实现方案
针对你需要的contentType1、contentType2项无间距,contentType3项之间加8dp间距的需求,这里有两种简单直接的实现方式:
方式一:用索引判断添加Spacer
借助itemsIndexed获取项的索引,给contentType3中除第一个以外的项前面加上8dp的Spacer,既能实现项间间距,又不会让第一个项多出顶部空白:
LazyColumn { items(itemsOfContentType1.size) { Content1Item(itemsOfContentType1[it]) } items(itemsOfContentType2.size) { Content2Item(itemsOfContentType2[it]) } // 通过索引判断是否添加间距 itemsIndexed(itemsOfContentType3) { index, item -> if (index > 0) { Spacer(modifier = Modifier.height(8.dp)) } Content3Item(item) } }
方式二:给子组件加条件式padding
把间距逻辑封装到Content3Item里,通过参数控制是否添加顶部padding:
先修改Content3Item组件:
@Composable fun Content3Item(item: YourItemType, hasTopSpacing: Boolean = false) { Box( modifier = Modifier .fillMaxWidth() .then( if (hasTopSpacing) Modifier.padding(top = 8.dp) else Modifier ) ) { // 这里放Content3Item原本的内容 } }
然后在LazyColumn中调用时传入判断条件:
LazyColumn { items(itemsOfContentType1.size) { Content1Item(itemsOfContentType1[it]) } items(itemsOfContentType2.size) { Content2Item(itemsOfContentType2[it]) } itemsIndexed(itemsOfContentType3) { index, item -> Content3Item(item, hasTopSpacing = index > 0) } }
这两种方法都能满足你的需求,第一种更直观,第二种适合把间距逻辑和组件封装在一起,根据你的实际场景选就行。
内容的提问来源于stack exchange,提问作者Mikhail Guliaev
相关产品推荐
相关产品推荐

