Html.fromHtml()方法确实是一个非常好用的方法,它可以解析html标签,来展示图文混合的丰富的界面.昨天遇到了一个bug就是关于fromHtml()的.
在解析html中<a>
标签的时候,部分标签内的链接类似href='/member/abc'
这样的形式,是一个相对的路径,Android找不到能够处理这种没有http://
超链接的app,整个程序就崩溃了.解决办法就是在这解析到这种<a>
标签的时候移除该URLSpan
,再添加一个ClickableSpan
.
/**
* 点击@后面的人名崩溃的问题,并且点击@用户名跳转到用户详情页
* http://androblip.huiges.nl/2010/11/28/handling-html-in-a-textview/
*/
URLSpan[] urlSpans = htmlSpannable.getSpans(0,htmlSpannable.length(),URLSpan.class);
for (URLSpan span : urlSpans){
int start = htmlSpannable.getSpanStart(span);
int end = htmlSpannable.getSpanEnd(span);
int flag = htmlSpannable.getSpanFlags(span);
if (!span.getURL().startsWith("http")&&span.getURL().contains("/member/")){
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(getContext(),"@",Toast.LENGTH_SHORT).show();
}
};
htmlSpannable.removeSpan(span);
htmlSpannable.setSpan(clickableSpan,start,end,flag);
}
}