如何在 jetpack compose Text 中添加 ImageSpan

How adding ImageSpan in jetpack compose Text

据我们所知,AnnotatedString in JetpackCompose has provided some API of Android's SpannedString

但我没有找到任何 way/workaround 将 ImageSpan 内联到文本(使用 AndroidView 除外)

可以使用 Text Composable 的 AnnotatedStringinlineContent 参数将图像放入文本中。

  • buildAnnotatedString { ... } 中,我们需要使用 appendInlineContent(id = ...)
  • 为我们的内联内容定义一些 id
  • 然后在 Text Composable in inlineContent 参数中,我们提供了一个将此 id 匹配到 InlineTextContent() 对象的映射。

只要您可以在 Placeholder.

中预先定义其大小,您基本上可以将任何内容放在那里

这是在文本中间放置 Image 的样子:

val annotatedString = buildAnnotatedString {
    append("This is text ")
    appendInlineContent(id = "imageId")
    append(" with a call icon")
}
val inlineContentMap = mapOf(
    "imageId" to InlineTextContent(
        Placeholder(20.sp, 20.sp, PlaceholderVerticalAlign.TextCenter)
    ) {
        Image(
            imageVector = Icons.Default.Call,
            modifier = Modifier.fillMaxSize(),
            contentDescription = ""
        )
    }
)

Text(annotatedString, inlineContent = inlineContentMap)