textview 设置SpannableStringBuilder实现点击事件

实现目标:用TextView加载HTML代码 实现自定义点击URL事件
钱先生不哔哔 直接上代码

   msg_context = (TextView) this.findViewById(R.id.msg_context);
   msg_context.setText(getClickableHtml(response.getResponseObject().getData().getMsgContent()));
   msg_context.setMovementMethod(LinkMovementMethod.getInstance()); //响应Span点击事件


    private CharSequence getClickableHtml(String html) {
        Spanned spannedHtml = Html.fromHtml(html);
        SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
        URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
        for ( URLSpan span : urls) {
            Log.e("WebView_SpanUrl",span.getURL());
            setLinkClickable(clickableHtmlBuilder, span);
        }
        return clickableHtmlBuilder;
    }


    private void setLinkClickable( SpannableStringBuilder clickableHtmlBuilder,  URLSpan urlSpan) {
        int start = clickableHtmlBuilder.getSpanStart(urlSpan);
        int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
        int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
        String newUrl= urlSpan.getURL();
        clickableHtmlBuilder.setSpan(new ClickableSpan() {// 可以实现各种效果(点击事件 颜色等)
            public void onClick(View view) {      //在这里添加点击事件
                Log.e("WebView", "响应点击事件"+newUrl);
                if ( newUrl.startsWith("tel:")) {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(newUrl));
                    startActivity(intent);
                } else if (newUrl.startsWith("http:") || newUrl.startsWith("https:")) {
                    Intent intent = new Intent(MessageDetailAty.this, WebViewAty.class);
                    if (newUrl.contains("skip_product.htm")) {
                        intent.putExtra("title", "产品详情");
                    } else {
                        intent.putExtra("title", getResources().getString(R.string.app_name));
                    }
                    intent.putExtra("url", newUrl);
                    startActivity(intent);
                }
            }
        }, start, end, flags);
        Log.e("WebView", "点击的url:" + newUrl+"=="+start+"=="+end);
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值