Android 文本视图中的可点击字符串

Clickable string in textview in Android

我已经在 strings.xml 中添加了代码,例如

<string name="terms_agree_text">By Logging in, you are agreeing to our &lt;u>terms and condition&lt;/u> and &lt;u>privacy policy&lt;/u></string>

我也像这样用巴哈萨语添加了相同的字符串

 <string name="terms_agree_text">Dengan masuk, Anda menyatakan bahwa Anda telah menyetujui &lt;u>syarat dan ketentuan&lt;/u> dan &lt;u>kebijakan privasi&lt;/u> kami</string>

然后我就这样设置了标签

mBinding.termsAndCondition.setText(Html.fromHtml(getString(R.string.terms_agree_text)));

这里我必须为这个 2underline 文本做可点击事件。但是,我尝试使用

sp.setSpan(click, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

但是这个字符串索引对于其他语言环境是错误的。 所以目前我已经在文本中添加了View to clickable。

所以请你建议这样做。 谢谢

如果要成为字符串的跨越区域,则跨度必须基于字符串的一部分。我假设您正在尝试对跨度的起始索引进行硬编码。如果你打算这样做,那么你需要对每种语言都有一个硬编码索引,并且需要你将它提取到一个 values-en 和 values-jp 和 values-sp 以及你支持的所有其他值,并且具有 <start_index_of_terms_span>40 而在另一种语言中它将是 <start_index_of_terms_span>59 例如。

但是,您需要知道每种受支持语言的索引。

为什么不将字符串分成多个部分呢?将颜色和样式应用于为条款和条件或隐私政策翻译的一个部分或短语,而不是试图在较大的字符串中突出显示或更改它的颜色。与应用基于所有语言的动态跨度相比,这将是一个更容易的修复。

但如果您必须这样做,请为每种语言创建维度值文件夹并调整起点的维度值。或者您可以欺骗并检查用户的语言,并根据每种语言的大型开关案例确定要使用的起始索引。无论哪种方式都会有点凌乱,所以你可以接受哪种凌乱取决于你。

祝你好运。