Android 将可组合高度调整为与宽度相同

Android 将可组合高度调整为与宽度相同,android,android-jetpack-compose,Android,Android Jetpack Compose,我试图在Jetpack Compose中实现一个具有2列的网格UI 我的要求是 每个项目的宽度必须是父项宽度的一半(减去填充等) 高度必须相同,以便项目为正方形 在这里面,我应该能够做其他的事情,比如在列中使用权重 这应该如下所示 <-- parent width --> ____ ____ | | | | |____| |____| ____ ____ | | | | |____| |____| ... and more it

我试图在Jetpack Compose中实现一个具有2列的网格UI

我的要求是

  • 每个项目的宽度必须是父项宽度的一半(减去填充等)
  • 高度必须相同,以便项目为正方形
  • 在这里面,我应该能够做其他的事情,比如在
    列中使用
    权重
这应该如下所示

<-- parent 
    width -->
 ____   ____
|    | |    |
|____| |____|

 ____   ____
|    | |    |
|____| |____|

 ... and more items

这将创建以下UI

由于下一个
有空间,因此显示的
曲面布局正确。但该柱似乎没有达到全高。这也意味着列项目的
weight()
不起作用。将
weight
修饰符添加到列子项会使它们消失

我该如何解决上述问题,让孩子们知道身高并达到预期效果

作为参考,我正在使用Jetpack Compose
alpha09


更新:我尝试过使用
首选高度(IntrinsicSize.Max)
,它似乎工作得更好,但它确实需要将代码标记为
@experimentalYout
,因此如果有其他可用选项,我宁愿先不使用它。

自己为平铺设置约束,根据瓷砖的宽度:

layout { measurable, constraints ->
                val tileSize = constraints.maxWidth / columnCount

                val placeable = measurable.measure(constraints.copy(
                    minWidth = tileSize,
                    maxWidth = tileSize,
                    minHeight = tileSize,
                    maxHeight = tileSize,
                ))

                layout(placeable.width, placeable.width) {
                    placeable.place(x = 0, y = 0, zIndex = 0f)
                }
}
有关完整示例,请参见

layout { measurable, constraints ->
                val tileSize = constraints.maxWidth / columnCount

                val placeable = measurable.measure(constraints.copy(
                    minWidth = tileSize,
                    maxWidth = tileSize,
                    minHeight = tileSize,
                    maxHeight = tileSize,
                ))

                layout(placeable.width, placeable.width) {
                    placeable.place(x = 0, y = 0, zIndex = 0f)
                }
}