TextView多个超链接实现跳转

2,584 阅读1分钟

现在大部分的App都会有《软件服务协议》及《隐私协议》,比如手机QQ的注册页:

这样的需求,在App越来越规范化的今天,非常的常见,实现的方式也五花八门,我这里提供一种简单方便的,拓展性强的实现方式,先看效果:

1. 上代码

public SpannableStringBuilder setTextLink(final Context context,
                                              String answerstring) {
        if(!TextUtils.isEmpty(answerstring)) {

            //fromHtml(String source)在Android N中已经弃用,推荐使用fromHtml(String source, int
            // flags),flags 参数说明,
            // Html.FROM_HTML_MODE_COMPACT:html块元素之间使用一个换行符分隔
            // Html.FROM_HTML_MODE_LEGACY:html块元素之间使用两个换行符分隔
            Spanned htmlString = Html.fromHtml(answerstring, Html.FROM_HTML_MODE_COMPACT);
            if(htmlString instanceof SpannableStringBuilder) {
                SpannableStringBuilder spannablestringbuilder =
                        (SpannableStringBuilder) htmlString;
                //取得与a标签相关的span
                Object[] objs = spannablestringbuilder.getSpans(0,
                        spannablestringbuilder.length(), URLSpan.class);
                if(null != objs && objs.length != 0) {
                    for(Object obj : objs) {
                        int start = spannablestringbuilder.getSpanStart(obj);
                        int end = spannablestringbuilder.getSpanEnd(obj);
                        if(obj instanceof URLSpan) {
                            //先移除这个span,再新添加一个自己实现的span。
                            URLSpan span = (URLSpan) obj;
                            final String url = span.getURL();
                            spannablestringbuilder.removeSpan(obj);
                            spannablestringbuilder.setSpan(new ClickableSpan() {
                                @Override
                                public void onClick(View widget) {
                                    //这里可以实现自己的跳转逻辑
                                    Toast.makeText(MainActivity.this, url,
                                            Toast.LENGTH_LONG).show();
                                }
                            }, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                        }
                    }
                }
                return spannablestringbuilder;
            }
        }
        return new SpannableStringBuilder(answerstring);
    }

2. 使用方式

String conent = "文本超链接<a href='https://www.google.com/'>Google谷歌</a>及<a " +
            "href='https://www.baidu.com/'>Baidu百度</a>";
tvLink.setMovementMethod(LinkMovementMethod.getInstance());//使超链接可点击
tvLink.setText(setTextLink(this, conent));

参考引用:Android使用内置WebView打开TextView超链接的实现方法