【发布时间】:2021-12-08 22:10:08
【问题描述】:
是否可以在 compose 中构建一个网格,其中所有元素的大小都是均匀的,由最大的内容决定?我还希望这个网格包装内容,并且不受任何预设高度的约束。
所以像这样。假设网格是全角的,并且我们知道只有 2 列。
____________ ____________
| 1. |2. Medium |
|Short stuff |length |
| |text |
|____________|____________|
|3. This is | |
|a very long |4. hi! |
|content here| |
|____________|____________|
我一直在尝试创建这样的东西,但我认为在 Compose 中不设置某种网格的整体高度是不可能的?
你可以有这样的东西:
@Composable
fun SampleGrid() {
Row(modifier = Modifier.fillMaxWidth()) {
Column(modifier = Modifier.weight(0.5f)) {
Cell(modifier = Modifier.weight(0.5f))
Cell(modifier = Modifier.weight(0.5f))
}
Column(modifier = Modifier.weight(0.5f)) {
Cell(modifier = Modifier.weight(0.5f))
Cell(modifier = Modifier.weight(0.5f))
}
}
}
所以这是一个不错的 2x2 均匀网格,但 weigth 将使元素增长到它想要的高度,直到它被周围的其他视图或具有设定高度的容器限制。
我们可以将height(IntrinsicSize.Max) 添加到列修饰符中,所以它有点包装内容,但是如果另一列中有很多/更少的内容怎么办?高度不同步
____________ ____________
| 1. |2. hi! |
|Short stuff |____________|
| |4. hi! |
|____________|____________|
|3. This is |
|a very long |
|content here|
|____________|
您可以使用 Column 包装器和多个 Rows 构建网格,但您会遇到同样的问题。
我发现即使使用自定义 Layout,尤其是 SubcomposeLayout,这也是一个问题。我们可以让一种布局依赖于另一种布局,但是如果计算一行的高度,结果第二行需要更多空间,因为它有更多内容,该怎么办?然后您必须重新测量第一个以使其更大,但不允许在 Compose 中测量两次。
我的理解正确吗?具有均匀大小的元素的网格是否会随着其最大的内容增长(而不是受到某个高度的限制)不可能?对我来说感觉有点像鸡和蛋的问题......
【问题讨论】:
标签: android kotlin android-jetpack-compose