使用带有<a> tag won&#39;t color!</a>的Html.fromHTML

时间:2011-03-05 20:56:49

标签: java android html

我正在尝试使用Android Html.fromHtml方法解析文本,就像推文中的@ mentions一样。但是,我有当前用户的用户名,我希望将此作为自己突出显示。

我正在尝试使用此代码,但这不起作用:

in = in.replace("@" + u.username, "@<font background=#0099ff color=#fff><a href='dailybooth://user/"+ u.username+"'>"+u.username+"</a></font>");

理论上,我认为它应该有用,但它根本不着色!

1 个答案:

答案 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 docssplit()中的-1是处理字符串末尾匹配所需的内容。