gpt4 book ai didi

android - 自定义布局忽略可组合项的大小

转载 作者:行者123 更新时间:2023-12-05 00:17:47 26 4
gpt4 key购买 nike

我目前正在研究 Jetpack Compose 中的自定义布局。这是我到目前为止仅用于测试的内容:

@Preview(widthDp = 1000, heightDp = 1000)
@Composable
fun MyLayout() {
Layout({ Box(Modifier.size(48.dp).background(Color.Blue)) }) { measurables, constraints ->
val placeables = measurables.map { it.measure(constraints) }
layout(constraints.maxWidth, constraints.maxHeight) {
placeables.forEach { it.place(0, 0) }
}
}
}

我的问题是 Box 填满了整个布局,而不仅仅是 48.dp 的大小。有人可以向我解释这是为什么吗?我读了here关于创建自定义布局但找不到任何有用的东西。

最佳答案

Layout 大小由传入 layout(width, height) 的大小决定。

您的 Layout 没有任何修饰符,这就是为什么它具有等于可用间距的 maxWidth/maxHeight 约束。使用 layout(constraints.maxWidth, constraints.maxHeight) 与应用 Modifier.fillMaxSize 具有相同的效果。实际上,使用 Modifier.fillMaxSize,您会将最大和最小约束设置为可用大小。

要解决这个问题,您有两个选择:

  1. Modifier.size 应用于 Layout 本身,而不是应用于 Box - 在本例中为最大/最小约束将是 48.dp

  2. 根据 placeable 计算布局大小。实际代码取决于您希望获得的布局。您的代码看起来像 Box 模拟,因此您需要所有可放置尺寸中的最大值:

    layout(placeables.maxOfOrNull { it.width } ?: 0, placeables.maxOfOrNull { it.height } ?: 0) {

关于android - 自定义布局忽略可组合项的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72238840/

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