【问题标题】:Clickable string in textview in AndroidAndroid中textview中的可点击字符串
【发布时间】:2018-03-16 13:16:30
【问题描述】:

我已经在 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 来点击。

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

【问题讨论】:

  • 你从哪里获得 startIndex。跨度依赖于开始和结束索引,您必须提供它。因此,如果您正在对字符串进行搜索,那么您需要为当前字符串找到它,并确认您在搜索范围和表示层上都获得了本地化字符串。
  • 开始索引是= 40 来自英文但在Bahasa 是59 是开始索引。那么在我的情况下如何使用 Span 呢??

标签: android clickablespan


【解决方案1】:

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

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

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

但如果您必须这样做,请为每种语言创建您的尺寸值文件夹并调整起点的尺寸值。或者,您可以作弊并检查用户的语言,并根据每种语言的大型 switch case 确定要使用的起始索引。无论哪种方式,它都会有点乱,所以你可以选择哪种乱七八糟。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多