Compose多行文本表情显示行高适配问题求助
Compose中AnnotatedString嵌入表情的行高适配问题
问题背景
我正在开发带有表情的聊天功能,使用Compose的AnnotatedString中的InlineTextContent替代XML里的SpannableString,实现代码如下:
inlineContentMap["dragon"] = InlineTextContent( Placeholder(32.sp, 32.sp, PlaceholderVerticalAlign.TextCenter) { AsyncImage( model = dragonUrl, contentDescription = null, modifier = Modifier.size(32.dp), contentScale = ContentScale.Crop ) } ) var annotedString = buildAnnotatedString { append("a test with multiline text and an emote") appendInlineContent(id = "dragon") } Text( text = annotatedString, inlineContent = inlineContentMap, fontSize = 16.sp )
现有问题
当前实现在单行文本或表情尺寸不超过文本行高的多行文本中表现正常,但和SpannableString存在差异:SpannableString会自动调整表情所在行的行高以适配图片尺寸,而Compose不会——表情会被当前行高截断,无法完整显示。
尝试的解决方案及崩溃问题
我尝试给表情所在行单独设置行高,代码如下:
addStyle(ParagraphStyle(lineHeight = 32.sp), start = 35, end = annotedString.length)
但只要给包含InlineTextContent的行添加ParagraphStyle,就会触发越界崩溃,报错信息如下:
FATAL EXCEPTION: main Process: video.joinbits.beta, PID: 21884 java.lang.IllegalArgumentException: ParagraphStyle range [40, 46) is out of boundary at androidx.compose.ui.text.AnnotatedString.<init>(AnnotatedString.kt:70) at androidx.compose.ui.text.AnnotatedString$Builder.toAnnotatedString(AnnotatedString.kt:519)
求助需求
希望找到方法实现和XML中SpannableString一致的表情行高适配效果:表情所在行自动增高,完整显示表情,同时不影响其他行的正常行高。
内容的提问来源于stack exchange,提问作者Bastien Calone
相关产品推荐
相关产品推荐

