根据字符串长度动态调整行中列的权重

net*_*men 4 android-jetpack-compose

我有一个包含两个文本的布局,一个在左侧,一个在右侧。如果两个文本都很长,则左文本应占宽度的 60%,右文本应占宽度的 40%。但如果右侧文本短于 40%,则左侧文本应占据所有可用空间。

以下是示例: 右长部分 和: 在此输入图像描述 所以我想写这样的东西:

Row {
    Text(text = left, modifier = modifier.padding(8.dp).weight(<min 0.6f>))
    Text(text = right, modifier = modifier.padding(8.dp).weight(<max 0.4f>))
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以实现这一点吗?

net*_*men 7

最后,我想通了。这是修改器:

fun Modifier.maxWidth(
    fraction: Float = 1f,
) = layout { measurable, constraints ->
    val maxWidth = (constraints.maxWidth * fraction).roundToInt()
    val width = measurable.maxIntrinsicWidth(constraints.maxHeight).coerceAtMost(maxWidth)

    val placeable = measurable.measure(Constraints(constraints.minWidth, width, constraints.minHeight, constraints.maxHeight))
    layout(width, placeable.height) {
        placeable.placeRelative(0, 0)
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我们可以这样使用它:

Row {
    Text(text = left, modifier = modifier.padding(8.dp).weight(1f)) // left text uses all the available space
    Text(text = right, modifier = modifier.padding(8.dp).maxWidth(fraction = 0.4f)) // right text can be 40% of the parent or less
}
Run Code Online (Sandbox Code Playgroud)