列内的 fillMaxSize 优先级不清楚

Phi*_*hov 1 kotlin android-jetpack-compose

我需要做的是一个固定大小的盒子,第一个盒子下面还有一个盒子,它将填充剩余空间。我有以下代码:

Column {
    Box(
        modifier = Modifier
            .background(Color.Red)
            .fillMaxSize()
    )
    Box(
        contentAlignment = Center,
        modifier = Modifier
            .background(Color.Blue)
            .height(50.dp)
            .fillMaxWidth()
    ) {
        Text(
            "hello",
            color = Color.White
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

结果

由于某种原因,底部框的大小是列边界下方的一半,如果我删除 strict .height(50.dp),它就会完全消失。我尝试用 解决第二个问题.wrapContentHeight(),但没有运气 - 看起来fillMaxSize()顶部的盒子使其大小等于 ,Column这就是为什么它将底部的一部分向下推的原因。我希望它在计算其他列子项大小后填充剩余的大小 - 我是否遗漏了一些东西?如果我更改盒子的顺序,它会按预期工作,但我需要底部的盒子大小固定

Phi*_*hov 7

在这种情况下weight,应该在视图上使用修饰符而不是fillMaxSizeweight默认情况下已经填充最大尺寸),在这种情况下,它将在其他视图之后进行测量:

父级会划分测量未加权的子元素后剩余的垂直空间,并根据这个权重进行分配。

Column {
    Box(
        modifier = Modifier
            .background(Color.Red)
            .weight(1f)
    )
    Box(
        contentAlignment = Center,
        modifier = Modifier
            .background(Color.Blue)
            .fillMaxWidth()
    ) {
        Text(
            "hello",
            color = Color.White
        )
    }
}
Run Code Online (Sandbox Code Playgroud)