组合布局:相对于居中项目对齐(例如 toRightOf)

Compose Layout: Align relative to centered item (eg. toRightOf)

Compose 中是否有一种方法可以在不使用 ConstraintLayout 的情况下将可组合项与居中的项目对齐?

我想实现这个:

我可以像这样使用 SpacerWeights

Row(
    modifier = Modifier.fillMaxWidth(),
    horizontalArrangement = Arrangement.Center,
    verticalAlignment = Alignment.CenterVertically,
) {

    Spacer(Modifier.weight(1f))
    Button(...)
    Label(Modifier.weight(1f),...)
}

问题是我有条件地显示 Label,如果我用权重隐藏两个元素,按钮会轻微移动。

也不确定使用权重是否比最初的 ConstraintLayout 产生更大的性能影响。

Modifier.weight 是创建此类布局的正确方法。我不确定性能是否优于 ConstraintLayout,但肯定不会更差。

如果您 运行 遇到性能问题,您应该在 google 问题跟踪器上创建一个问题,因为这就是应该使用 Compose 的方式。就我个人而言,我没有遇到任何与 weight 相关的性能问题,但该技术相当新,因此您不能完全排除这种可能性。

在您的情况下,您需要在任何给定时间都有一些代表,您可以向其申请 Modifier.weight。您可以使用 if-else 并在 else 的情况下添加 Spacer,但我更喜欢使用带有可选内容的 Box:它看起来更干净并且可以正常工作如果你添加动画。

默认 Box contentAlignmentAlignment.TopStart,这将根据您的情况完全按照需要工作,但在其他一些情况下,您可以覆盖它或添加更多 Spacers里面。

Row(
    modifier = Modifier.fillMaxWidth(),
    horizontalArrangement = Arrangement.Center,
    verticalAlignment = Alignment.CenterVertically,
) {
    Spacer(Modifier.weight(1f))
    Button(...)
    Box(Modifier.weight(1f)) { 
        if (condition) {
            Label(...)
        }
    }
}