如何在 Android Jetpack Compose 中的文本行末尾显示省略号(三个点)?

时间:2021-01-15 12:45:50

标签: android android-jetpack android-jetpack-compose

无论我使用 androidx.compose.foundation.text.BasicText 还是 androidx.compose.material.Text,如果没有足够的空间放置文本,它会自动换行到下一行,例如:

@Composable
fun EllipsisExample() {
    Box(modifier = Modifier.width(160.dp)) {
        Text("Lorem ipsum dolor sit amet.")
    }
}

渲染:

enter image description here

我怎么能强制它成为一条线并在它的末尾画省略号?在这种情况下我想要的结果是这样的:

<块引用>

Lorem ipsum dolor s...

2 个答案:

答案 0 :(得分:5)

BasicTextText 都有 overflowmaxLines 参数可以帮助您。

Text(myText, maxLines = 1, overflow = TextOverflow.Ellipsis)

这是一个完整的单行示例:

import androidx.compose.material.Text
import androidx.compose.ui.text.style.TextOverflow

@Composable
fun EllipsisExample() {
    Box(modifier = Modifier.width(160.dp)) {
        Text(
            text = "Lorem ipsum dolor sit amet.",
            maxLines = 1,
            overflow = TextOverflow.Ellipsis
        )
    }
}

enter image description here

当然,您可以调整 maxLines 以满足您的需要:

Text(
    text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    maxLines = 2,
    overflow = TextOverflow.Ellipsis
)

enter image description here

答案 1 :(得分:0)

您可以将 overflow 可组合中的 Text 属性设置为 TextOverflow.Ellipsis 例如:

Text(
    text = "Compose Previews are great to check quickly how a composable layout looks like",
    maxLines = 2,
    overflow = TextOverflow.Ellipsis
)

如果您想让省略号动态化,您应该使用 Compose 的状态 API,例如 remembermutableStateOf,这样状态的任何更改都会自动更新 UI

@Composable
fun MessageCard(msg: String) {
var isExpanded by remember { mutableStateOf(false) }
Text(
     text = msg,
     modifier = Modifier.padding(all = 4.dp),
     style = MaterialTheme.typography.body2,
     maxLines = if (isExpanded) Int.MAX_VALUE else 1,
     overflow = if (isExpanded) TextOverflow.Visible else TextOverflow.Ellipsis
    )
}