与RelativeSizeSpan 等价的SpanStyle 是什么?

Luk*_*uke 2 android kotlin android-jetpack-compose

在 Compose 中,我们AnnotatedString使用Spanned. 但是,我似乎无法找到一种方法来使用SpanStyle复制relativesizespan的行为。

我可以看到的相关选项SpanStyle是:

  • fontSize: TextUnit - 没有用,因为它只接受绝对文本大小,并且我需要我的跨度样式按某个因子缩放原始字体大小
  • textGeometricTransform:TextGeometricTransform - 没有用,因为TextGeometricTransform仅执行 X 变换,并且我需要在 X 和 Y 方向上缩放文本。

有人可以分享一些见解吗?

Mac*_*ęga 7

您可以使用 来实现SpanStyle,但需要使用em TextUnit,它是相对字体大小单位。这意味着1em等于当前字体大小,2em是两倍大的字体。

下面的代码演示了它在两个Texts不同字体大小的情况下的行为方式:

val annotatedString = buildAnnotatedString {
    append("This is a ")
    withStyle(style = SpanStyle(fontSize = 2.em)) {
        append("big")
    }
    append(" text")
}
Column {
    Text(annotatedString, fontSize = 20.sp)
    Text(annotatedString, fontSize = 40.sp)
}
Run Code Online (Sandbox Code Playgroud)

“大”这个词比同一个词中的其他词大 2 倍Text
您还可以看到,它使第一个Text单词的大小 ( 2 * 20sp ) 与第二个单词中的其他单词Text( 40sp ) 相同。

在此输入图像描述