我有两个String资源:
<string name="give_us_feedback">Give us feedback at %1$s if you want to make the app even better!</string>
<string name="email">[email protected]</string>
字符串
我想风格的电子邮件部分是蓝色和下划线,以表明用户可以点击它我知道使用SpannableString给文本上色,但是当我通过getString组合两个字符串时,它似乎不起作用(int resId,Object... formatArgs),大概是因为getString()将对发送的Object执行强制转换或.toString()。以下是不起作用的地方:
TextView emailTV = new TextView(this);
SpannableString email = new SpannableString(getString(R.string.email));
email.setSpan(new UnderlineSpan(), 0, email.length() - 1, 0);
email.setSpan(new ForegroundColorSpan(Color.BLUE), 0, email.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
String feedback = getString(R.string.give_us_feedback, email);
emailTV.setText(feedback);
型
有什么想法吗?
4条答案
按热度按时间afdcj2ne1#
这有点棘手。转换回charsequence(
String feedback = getString(R.string.give_us_feedback, email);
)会使Spannable
消失。试试这种方法(你想检查字符串中的正确索引)字符串
wz1wpwve2#
如果你的字符串已经包含了与参数相同的文本,那么上面的答案就不起作用了。
所以这就是我所做的(在Kotlin中)。我通过在字符串资源中搜索字面参数文本来获得参数的开始索引。这是使用正则表达式。
字符串
1hdlvixo3#
我写了一个方法来处理它。
isSearchForward
是一个参数,用于切换是向前还是向后搜索字符串,因为这只会突出显示第一次出现的字符串。字符串
xghobddn4#
你可以使用我在here中的答案,所以你的代码应该是这样的:
字符串