我想找到当前 Jetpack 撰写的一行中可以容纳的字符总数文本
我可以获得此信息的任何领域。谢谢
Column {
var size by remember { mutableStateOf(IntSize.Zero) }
val textMeasurer = rememberTextMeasurer()
val longText = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book."
val shortText = getShortenedText(longText, textMeasurer, size.width)
Text(
modifier = Modifier
.fillMaxWidth()
.onSizeChanged { size = it },
text = shortText,
maxLines = 1,
style = yourStyle,
)
在这种情况下,我们可以根据需要多次测量缩减文本,直到得到适合
Text
的字符串。首先,我们将测量 longText
的全长。如果它适合Text
,我们将打印它。如果不合适,我们将减少文字并重新测量。您可以根据需要使用二分搜索或按比例除法。
@Composable
private fun getShortenedText(
longText: String,
textMeasurer: TextMeasurer,
maxWidth: Int,
): String {
var start = 0
var end = longText.length
var text = longText.substring(0, end)
var width = textMeasurer.measure(text, yourStyle).size.width
if (width <= maxWidth) return text
while (start < end - 1) {
val newBorder = start + (end - start) / 2
text = longText.substring(0, newBorder)
width = textMeasurer.measure(text, yourStyle).size.width
if (width <= maxWidth) {
start = newBorder
} else {
end = newBorder
}
}
return longText.substring(0, start)
}
您可能认为
Text()
可组合项是一些具有固定尺寸的占位符(框)
然后你在其中放置一些文本
并询问我们,您可以使用多少个字符来容纳此占位符。
但事情却相反:
Text()
可组合 without 文本字符串。Text()
可组合项占据尽可能多的空间。因此,例如,它占据整个屏幕,如果没有其他元素,尽管文本仅包含 1 个字符。
所以你现在的问题没有任何意义。
您可能想解决一件事,但向我们询问另一件事 – 请参阅什么是 X-Y 问题? 并可能编辑您的问题。