2

众所周知, JetpackCompose 中的AnnotatedString提供了Android 的 SpannedString 的一些 API 。

但我没有找到将ImageSpan内联到文本的任何方法/解决方法(使用 AndroidView 除外)

4

1 回答 1

7

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

  • 在里面buildAnnotatedString { ... },我们需要为我们的内联内容定义一些id使用appendInlineContent(id = ...)
  • 然后在TextComposable in参数中,我们提供了一个将此id与对象inlineContent匹配的映射。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)
于 2021-11-23T19:32:10.170 回答