AnnotatedString 的开始和结束索引因语言而异

Ral*_*kum 6 android textview androidx android-jetpack-compose android-jetpack-compose-text

我使用这个(不再那么好)示例在我的 Android Jetpack Compose Text 可组合项上启用链接化(请参阅“ClickableText 处理文本上的链接”部分)。

到目前为止,对于一种语言来说,这很容易并且很好。正如您在 AnnotatedString.Builder 中看到的:

addStyle(
    style = SpanStyle(
        textDecoration = TextDecoration.Underline
    ),
    start = 8,
    end = 15
)
addStringAnnotation(
    tag = uriTag,
    annotation = "https://developer.android.com/jetpack/compose",
    start = 8,
    end = 15
)
Run Code Online (Sandbox Code Playgroud)

我必须输入开始和结束索引才能通过下划线突出显示链接。想象一下我有多种字符串语言资源,我只想链接网站网站

 "My website" 
 "Meine Webseite"
Run Code Online (Sandbox Code Playgroud)

上面的英文字符串的起始索引和结束索引为 4 到 10。

较低的德语字符串有 7 到 14。这对于多语言资源来说不太有用。如何在不计算索引的情况下更轻松地链接我的文本可组合项。

(请注意:我只想使用自然库 andoridx.* kotlin.*。其他 3rd 方库将被忽略)

Shr*_*hat 1

您可以使用如下所示的偏移量。

onClick = { offset ->
                        annotatedText.getStringAnnotations(start = offset, end = offset)
                            .firstOrNull()?.let {
                                onLinkClick(it.item)
                            }
                    }
 
Run Code Online (Sandbox Code Playgroud)