如何在 Android Jetpack Compose 中的文本行末尾显示省略号(三个点)?
How to show ellipsis (three dots) at the end of a Text line in Android Jetpack Compose?
我是否使用 androidx.compose.foundation.text.BasicText or androidx.compose.material.Text,如果没有足够的 space 用于换行到下一行的文本,例如:
@Composable
fun EllipsisExample() {
Box(modifier = Modifier.width(160.dp)) {
Text("Lorem ipsum dolor sit amet.")
}
}
呈现:
如何强制它成为单行并在其末尾绘制省略号?在这种情况下我想要的结果是这样的:
Lorem ipsum dolor s…
BasicText and Text 都有 overflow
和 maxLines
参数可以帮助你。
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
)
}
}
当然,您可以调整 maxLines
以满足您的需要:
Text(
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
maxLines = 2,
overflow = TextOverflow.Ellipsis
)
您可以将 Text
可组合项中的 overflow
属性设置为 TextOverflow.Ellipsis
例如:
Text(
text = "Compose Previews are great to check quickly how a composable layout looks like",
maxLines = 2,
overflow = TextOverflow.Ellipsis
)
如果你想让省略号动态化,你应该使用 Compose 的状态 API,比如 remember
和 mutableStateOf
,这样对状态的任何更改都会自动更新 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
)
}
要显示三个点,您需要给您的根指定宽度参数。我的情况就是这样。
Column(modifier = Modifier.width(150.dp)) {
MovieImage(
url = movie.posterPath, modifier = Modifier
.height(190.dp)
.padding(8.dp)
.clip(
RoundedCornerShape(CornerSize(8.dp))
)
)
Text(
text = movie.title,
color = Color.White,
modifier = Modifier.padding(8.dp),
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
我是否使用 androidx.compose.foundation.text.BasicText or androidx.compose.material.Text,如果没有足够的 space 用于换行到下一行的文本,例如:
@Composable
fun EllipsisExample() {
Box(modifier = Modifier.width(160.dp)) {
Text("Lorem ipsum dolor sit amet.")
}
}
呈现:
如何强制它成为单行并在其末尾绘制省略号?在这种情况下我想要的结果是这样的:
Lorem ipsum dolor s…
BasicText and Text 都有 overflow
和 maxLines
参数可以帮助你。
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
)
}
}
当然,您可以调整 maxLines
以满足您的需要:
Text(
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
maxLines = 2,
overflow = TextOverflow.Ellipsis
)
您可以将 Text
可组合项中的 overflow
属性设置为 TextOverflow.Ellipsis
例如:
Text(
text = "Compose Previews are great to check quickly how a composable layout looks like",
maxLines = 2,
overflow = TextOverflow.Ellipsis
)
如果你想让省略号动态化,你应该使用 Compose 的状态 API,比如 remember
和 mutableStateOf
,这样对状态的任何更改都会自动更新 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
)
}
要显示三个点,您需要给您的根指定宽度参数。我的情况就是这样。
Column(modifier = Modifier.width(150.dp)) {
MovieImage(
url = movie.posterPath, modifier = Modifier
.height(190.dp)
.padding(8.dp)
.clip(
RoundedCornerShape(CornerSize(8.dp))
)
)
Text(
text = movie.title,
color = Color.White,
modifier = Modifier.padding(8.dp),
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}