我试图确定某个文本在合成之前将在屏幕上占据多少行。有办法做到这一点吗?
您可以在
onTextLayout
上使用 Text
来获取行数和一些其他功能。
var lineCount = 1
Text(text= "", onTextLayout = {textLayoutResult: TextLayoutResult ->
lineCount = textLayoutResult.lineCount
})
如果您使用的是 Jetpack Compose 版本 1.4.1 或更高版本,您可以使用 TextMeasurer 可使用您提供的任何样式测量文本
val textMeasurer = rememberTextMeasurer()
val textToDraw = "Some text to measure\nSomething something"
val style = TextStyle(
fontSize = 150.sp,
color = Color.Black,
background = Color.Red.copy(alpha = 0.2f)
)
// You can get many information since it's TextLayoutResult as in callback
val textLayoutResult = remember(textToDraw) {
textMeasurer.measure(textToDraw, style)
}
虽然接受的答案是正确的,但还有一种替代方法,甚至不需要可组合函数:
val paragraph = androidx.compose.ui.text.Paragraph(
text = "Foo",
style = MaterialTheme.typography.body1,
constraints = Constraints(maxWidth = maxWidthInPx),
density = LocalDensity.current,
fontFamilyResolver = LocalFontFamilyResolver.current,
)
paragraph.lineCount
如果需要事先知道 lineCount,这可能更适合。
没有正确的方法来知道文本将占用多少行,但我猜你必须考虑“行数”的值:
onTextLayout = { textLayoutResult: TextLayoutResult ->
}
}
Text() 可组合项接受变量
onTextLayout
相同:
查看这篇媒体文章是否有相同的内容:
Jetpack Compose:根据文本行有条件地显示“阅读更多”按钮: