使 Row 中的第一个元素换行而不占用所有可用空间

Eyj*_*afl 5 android kotlin android-jetpack-compose

在 Android Compose 中,我想创建一个Row占据所有可用宽度并包含两个文本的文本:

这应该是什么样子

  1. 第一个文本应位于行的开头。
  2. 第二个文本应该紧接在第一个文本之后。
  3. 第一个文本的大小可变,可以软换行,并且应该首先溢出。
  4. 第二个文本是固定的,最多占用一行,并且仅当第一个文本无法进一步缩小时才会溢出。

我尽力做到这一点,但我只能实现以下目标之一:

A。使第二个文本紧接在第一个文本之后,但首先溢出(只需将它们一个接一个地放在代码中)。

Row(
    modifier = Modifier.fillMaxWidth(),
    verticalAlignment = Alignment.CenterVertically
) {
    Text(text = title)

    Text(
        text = "Fixed text",
        maxLines = 1
    )
}
Run Code Online (Sandbox Code Playgroud)

我的尝试

b. 让第一个文本首先溢出,但在它不溢出时占据整个可用空间(通过添加Modifier.weight(1f)到第一个文本)。

Row(
    modifier = Modifier.fillMaxWidth(),
    verticalAlignment = Alignment.CenterVertically
) {
    Text(
        text = title,
        modifier = Modifier.weight(1f)
    )

    Text(
        text = "Fixed text",
        maxLines = 1
    )
}
Run Code Online (Sandbox Code Playgroud)

我的尝试b

我怎样才能实现所描述的行为?我知道我可能可以使用ConstraintLayout,但如果可能的话我想避免它。

Tha*_*oro 8

您可以使用fill的参数weight,默认设置为 true,因此自动占用所有可用空间。但如果你切换到 false 你就会得到你想要的。

例子:

// PreviewShortTextWithNoFill
Row(
    modifier = Modifier
        .fillMaxWidth()
        .padding(all = 16.dp),
    horizontalArrangement = Arrangement.spacedBy(space = 8.dp),
    verticalAlignment = Alignment.CenterVertically
) {
    Text(
        modifier = Modifier.weight(weight = 1F, fill = false),
        text = "random short text"
    )

    Text(
        text = "fixed text",
        maxLines = 1
    )
}
Run Code Online (Sandbox Code Playgroud)

预览无填充短文本