Jetpack Compose:查找文本在组合之前需要多少行

问题描述 投票:0回答:3

我试图确定某个文本在合成之前将在屏幕上占据多少行。有办法做到这一点吗?

android-jetpack-compose
3个回答
23
投票

您可以在

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)
    }

5
投票

虽然接受的答案是正确的,但还有一种替代方法,甚至不需要可组合函数:

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,这可能更适合。


0
投票

没有正确的方法来知道文本将占用多少行,但我猜你必须考虑“行数”的值:

onTextLayout = { textLayoutResult: TextLayoutResult ->
                
                }
            }

Text() 可组合项接受变量

onTextLayout
相同:

查看这篇媒体文章是否有相同的内容:

Jetpack Compose:根据文本行有条件地显示“阅读更多”按钮:

https://medium.com/@manuyadav644/jetpack-compose-conditionally-display-read-more-button-based-on-text-lines-c9c0c5f65556

© www.soinside.com 2019 - 2024. All rights reserved.