如何在jetpack中添加ImageSpan撰写文本

bei*_*rad 11 android spannablestring spannable android-jetpack-compose android-jetpack-compose-text

我们知道, JetpackCompose 中的AnnotatedString提供了Android 的 SpannedString的一些 API 。

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

Mac*_*ęga 41

将图像放入文本中可以使用 Composable的参数AnnotatedString来完成。inlineContentText

  • 在里面buildAnnotatedString { ... }我们需要使用以下命令为内联内容定义一些idappendInlineContent(id = ...)
  • 然后在TextComposable in参数中,我们提供一个将此id与对象inlineContent匹配的映射。InlineTextContent()

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

Image这是在文本中间 添加一个 put 的效果:在此输入图像描述

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)
Run Code Online (Sandbox Code Playgroud)

  • 你应该把`inlineContentMap`放在记住 (3认同)
  • 这里有一个有趣的警告,您必须预先知道内容的大小。就我而言,我只能通过花时间预先渲染图像来解决这个问题,这很糟糕。我想知道如果我输入错误的尺寸会发生什么...... (2认同)