gpt4 book ai didi

android - 如何在 Jetpack Compose 中做 Multiline 芯片组?

转载 作者:行者123 更新时间:2023-12-04 23:46:35 24 4
gpt4 key购买 nike

How to get a layout like this in Jetpack compose?
因此,我创建了一个可组合的 Chip 并在 LazyRow 中使用它,如下所示:

LazyRow(
modifier = modifier,
horizontalArrangement = Arrangement.spacedBy(16.dp),
){
items.forEach { it ->
item {
CustomChip(
item = it,
isSelected = it == currentItem,
onItemChanged = {
onItemChanged(it)
}
)
}
}
}
但是,我想获得像上面提到的图像这样的布局。即,如果芯片数量达到屏幕末尾,则新芯片应进入新行。

最佳答案

更新。 现在您可以使用 Accompanist FlowRow :

FlowRow(
modifier = modifier,
mainAxisSpacing = 16.dp,
crossAxisSpacing = 16.dp,
) {
items.forEach { it ->
CustomChip(
item = it,
isSelected = it == currentItem,
onItemChanged = {
onItemChanged(it)
}
)
}
}
原始答案。 如果您有兴趣自己构建类似的东西,您可以使用 Layout :
@Composable
fun ChipVerticalGrid(
modifier: Modifier = Modifier,
spacing: Dp,
content: @Composable () -> Unit
) {
Layout(
content = content,
modifier = modifier
) { measurables, constraints ->
var currentRow = 0
var currentOrigin = IntOffset.Zero
val spacingValue = spacing.toPx().toInt()
val placeables = measurables.map { measurable ->
val placeable = measurable.measure(constraints)

if (currentOrigin.x > 0f && currentOrigin.x + placeable.width > constraints.maxWidth) {
currentRow += 1
currentOrigin = currentOrigin.copy(x = 0, y = currentOrigin.y + placeable.height + spacingValue)
}

placeable to currentOrigin.also {
currentOrigin = it.copy(x = it.x + placeable.width + spacingValue)
}
}

layout(
width = constraints.maxWidth,
height = placeables.lastOrNull()?.run { first.height + second.y } ?: 0
) {
placeables.forEach {
val (placeable, origin) = it
placeable.place(origin.x, origin.y)
}
}
}
}
用法:
val words = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
.split(" ")
ChipVerticalGrid(
spacing = 7.dp,
modifier = Modifier
.padding(7.dp)
) {
words.forEach { word ->
Text(
word,
modifier = Modifier
.background(color = Color.Gray, shape = CircleShape)
.padding(vertical = 3.dp, horizontal = 5.dp)
)
}
}
结果:

关于android - 如何在 Jetpack Compose 中做 Multiline 芯片组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68979046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com