0

我在 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>

我也像这样在bhahasa语言中添加了相同的字符串

 <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 到可点击。

所以你能建议这样做吗?谢谢

4

1 回答 1

0

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

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

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

但是如果你必须这样做,那么为每种语言创建你的尺寸值文件夹并调整起点的尺寸值。或者,您可以作弊并检查用户的语言,并根据每种语言的大型 switch case 确定要使用的起始索引。无论哪种方式,它都会有点混乱,所以这取决于你对哪种混乱没问题。

祝你好运。

于 2017-10-05T03:51:26.143 回答