我们如何在 Android Jetpack Compose UI 中将 Text 格式化为上标或下标?

pRa*_*NaY 9 android android-jetpack android-jetpack-compose

我正在研究一个使用Android Jetpack Compose 的示例,我在其中显示了一些文本方程,如下所示:

<html>
<body>

<!-- Superscript-->
<p> E = mc<sup>2</sup></p>

<!--Subscript-->
<p> CH<sub>4</sub> + H<sub>2</sub>O = CO + 3H<sub>2</sub></p>
</body>
</html>  
Run Code Online (Sandbox Code Playgroud)

我可以使用 Text 的任何装饰或样式机制来实现相同的输出吗?

pRa*_*NaY 16

使用BaselineShift,我们可以使用Span for Text 小部件,它允许将文本装饰为下标或上标。

以下是实现上述输出的工作代码:

    @Composable
    fun Equations(name: String) {
    val defaultStyle = TextStyle(fontSize = 20.sp,
            color = Color.White)
    val scriptStyleSuper = TextStyle(
            baselineShift = BaselineShift.Superscript,
            fontSize = 12.sp,
            color = Color.Green)
    val scriptStyleSub = TextStyle(
            baselineShift = BaselineShift.Subscript,
            fontSize = 12.sp,
            color = Color.Green)
    Text {
        Span(text = "E = mc", style = defaultStyle) {
            Span(
                    text = "2",
                    style =scriptStyleSuper
            ) {
                Span(text = "\n")
                Span(text = "CH", style = defaultStyle)
                Span(text = "4 ",style = scriptStyleSub)
                Span(text = "+ H", style = defaultStyle)
                Span(text = "2",style = scriptStyleSub)
                Span(text = "O = CO + 3H", style = defaultStyle)
                Span(text = "2",style = scriptStyleSub)
            }
        }
      }
    }
    
Run Code Online (Sandbox Code Playgroud)

输出:

喷气背包构成基线偏移

查看更多信息:https : //developer.android.com/reference/kotlin/androidx/compose/ui/text/style/package-summary


Gab*_*tti 13

您可以SpanStyle使用BaselineShift.Superscript和来定义 a BaselineShift.Subscript

就像是:

    val superscript = SpanStyle(
        baselineShift = BaselineShift.Superscript,
        fontSize = 16.sp,
        color = Color.Red
    )
    val subscript = SpanStyle(
        baselineShift = BaselineShift.Subscript,
        fontSize = 16.sp,
        color = Color.Blue
    )
Run Code Online (Sandbox Code Playgroud)

然后您可以使用AnnotatedString来显示多种样式的文本。

就像是:

Text(
    fontSize = 20.sp,
    text = buildAnnotatedString {
        append("E = mc")
        withStyle( superscript) {
            append("2")
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

    Text(
        fontSize = 20.sp,
        text = buildAnnotatedString {
            append("CH")
            withStyle( subscript) {
                append("4")
            }
            append(" + H")
            withStyle( subscript) {
                append("2")
            }
            append("O = CO + 3H")
            withStyle( subscript) {
                append("2")
            }
        }
    )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述