在strings.xml中定义的文本中使用SpannableString

3

如何使用在strings.xml中定义的字符串设置SpannableString

例如,我有一个字符串:%s喜欢了你的帖子

然后我需要执行以下操作:

SpannableString usernameSS = new SpannableString(username);
usernameSS.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 0, username.length(), 0);
getString(R.string.like_post, usernameSS);

但是它不起作用-样式没有被应用,我知道我可以使用HTML的<b><i>,但有没有一种方法可以在不使用HTML的情况下实现这一点?因为我可能需要通过TextAppearanceSpan插入更复杂的样式。
1个回答

4

没错,这里的顺序很重要:

String finalString = getString(R.string.like_post, username);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(finalString); 
int startIndex = finalString.indexOf(username);
spannableStringBuilder.setSpannable(new StyleSpan(Typeface.BOLD_ITALIC), startIndex, startIndex + username.length(), 0);

应该这样做。请检查正确的起始/结束索引。

非常好!如果我有两个要在内部进行样式设置的字符串,我需要调用“setSpannable”两次吗?谢谢! - Andreas Wong
好的,非常感谢!我还有另一个问题,就是两个字符串可能相同,例如“%s评论了%s的帖子”,当帖子作者在自己的帖子上发表评论时,indexOf总是会选择第一个(因此不会对第二个进行样式设置)。但这是另一个问题,我会解决的。谢谢。接受正在路上。 - Andreas Wong
你可以使用 indexOf(String str, int fromIndex) - Blackbelt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接