Ely*_*lye 6 android android-recyclerview item-decoration android-jetpack-compose android-jetpack-compose-list
在 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于 JetpackCompose LazyColumnFor,相当于ItemDecoration什么?
Gab*_*tti 10
有了1.0.x您可以使用Arrangement.spacedBy()添加项之间的间距。
就像是:
LazyColumn(
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
下面的示例8.dp在每个项目之间添加了空间
如果要在内容边缘添加填充,可以使用该contentPadding参数。
LazyColumn(
verticalArrangement = Arrangement.spacedBy(8.dp),
contentPadding = PaddingValues(horizontal = 24.dp, vertical = 8.dp)
){ ... }
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,第一个项目将8.dp在其顶部添加填充,最后一个项目将添加8.dp到其底部,并且所有项目24.dp的左侧和右侧都有填充。
您可以使用LazyColumnwith itemsIndexed(以前LazyColumnForIndexed已弃用)并根据索引应用填充。
LazyColumn {
itemsIndexed(items = ...) { index, item ->
Box(Modifier.padding(
start = 16.dp, end = 16.dp, bottom = 16.dp, top = if (index == 0) 16.dp else 0.dp
))
}
}
Run Code Online (Sandbox Code Playgroud)
我的解决方法是使用contentPadding的LazyColumnFor顶部、开始和结束填充,以及Spacer所有项目的底部填充。
@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))
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎得到了我需要的结果,因为contentPadding可以在LazyColumnFor
| 归档时间: |
|
| 查看次数: |
1773 次 |
| 最近记录: |