在开发论坛功能时,当帖子的评论content内容为html格式时,我们需要显示这些html,我们知道webview 可以显示,其实TextView也可以显示。
//让html标签可以在TextView中展示。
String txt =""<b>text3:</b> Text with a " + "<a href="http://www.google.com">link</a> " +"created in the Java source code using HTML."";
Spanned text_first = Html.fromHtml(txt);
tv_hint_reply.setText(text_first);
这样的就可以将html字符串用TextView展示出来了,但是此时如果html有超链接的话,是无法点击,这显示不利于用户体验。
那么有没有解决办法呢,当然有,
办法如下:
/**
* 使用TextView 显示Html时,让超链接有点击事件,跳转到默认的浏览器显示该网页。。
* @param context
* @param tv
*/
public static void textHtmlClick(Context context, TextView tv) {
tv.setMovementMethod(LinkMovementMethod.getInstance());
CharSequence text = tv.getText();
if (text instanceof Spannable) {
int end = text.length();
Spannable sp = (Spannable) text;
URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
SpannableStringBuilder style = new SpannableStringBuilder(text);
style.clearSpans();//should clear old spans
for (URLSpan url : urls) {
MyURLSpan myURLSpan =new MyURLSpan(url.getURL(), context);
style.setSpan(myURLSpan,sp.getSpanStart(url),sp.getSpanEnd(url),Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
tv.setText(style);
}
}
private static class MyURLSpan extends ClickableSpan {
private String mUrl;
private Context mContext;
MyURLSpan(String url, Context context) {
mContext = context;
mUrl = url;
}
@Override
public void onClick(View widget) {
//点击跳转到网页显示
}
}
只要在设置文字前,调用该方法,就可以了。
//让html标签可以在TextView中展示。
String txt =""<b>text3:</b> Text with a " + "<a href="http://www.google.com">link</a> " +"created in the Java source code using HTML."";
Spanned text_first = Html.fromHtml(txt);
//注意:就是在设置字符串的时候,调用上面的方法。
textHtmlClick(context,tv_hint_reply)
tv_hint_reply.setText(text_first);
这样就实现了评论中有超链接的点击和显示。