TextView 显示html字符串,超链接可点击

在开发论坛功能时,当帖子的评论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);

这样就实现了评论中有超链接的点击和显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值