我正在尝试使用Android Html.fromHtml方法解析文本,就像推文中的@ mentions一样。但是,我有当前用户的用户名,我希望将此作为自己突出显示。
我正在尝试使用此代码,但这不起作用:
in = in.replace("@" + u.username, "@<font background=#0099ff color=#fff><a href='dailybooth://user/"+
u.username+"'>"+u.username+"</a></font>");
理论上,我认为它应该有用,但它根本不着色!
答案 0 :(得分:4)
事实证明这是一种愚蠢的行为。
font
标记上的a
标记和内联样式都不适用于我。 我不得不直接使用Spannables :
TextView text = (TextView) findViewById(R.id.text);
text.setText("");
String linkName = "@appamatto";
String linkUrl = "http://twitter.com/appamatto"
SpannableString str = SpannableString.valueOf(linkName);
str.setSpan(new URLSpan(linkUrl), 0, linkName.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
str.setSpan(new ForegroundColorSpan(0xffffffff), 0, linkName.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(0xff0099ff), 0, linkName.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
text.append(str);
例如,这将以您想要的方式设置链接的颜色。您可以在android.text.style中查找其他Spannables以实现其他效果。
修改以进行替换,您可以执行以下操作:
String[] components = in.split("@" + u.username, -1);
text.append(components[0]);
for (int i = 1; i < components.length; i++) {
text.append(str); // using the spannable from above
text.append(components[i]);
}
根据split docs,split()
中的-1是处理字符串末尾匹配所需的内容。