安卓超链接工具类

/**
 * Create by Mazhanzhu on 2020/9/9
 * textview 超链接工具类
 */
public class TextViewUtils {
    public interface OnClickListener {
        void onListener(View view, String url);
    }

    public static void setTxt(TextView tv, String html, OnClickListener listener) {
        tv.setMovementMethod(LinkMovementMethod.getInstance());//使超链接可点击
        tv.setText(setTextLink(listener, html));
    }

    private static SpannableStringBuilder setTextLink(OnClickListener listener, 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;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
                htmlString = Html.fromHtml(answerstring, Html.FROM_HTML_MODE_COMPACT);
            } else {
                htmlString = Html.fromHtml(answerstring);
            }
            if (htmlString instanceof SpannableStringBuilder) {
                SpannableStringBuilder spanStr = (SpannableStringBuilder) htmlString;
                //取得与a标签相关的span
                Object[] objs = spanStr.getSpans(0, spanStr.length(), URLSpan.class);
                if (null != objs && objs.length != 0) {
                    for (Object obj : objs) {
                        int start = spanStr.getSpanStart(obj);
                        int end = spanStr.getSpanEnd(obj);
                        if (obj instanceof URLSpan) {
                            //先移除这个span,再新添加一个自己实现的span。
                            URLSpan span = (URLSpan) obj;
                            final String url = span.getURL();
                            spanStr.removeSpan(obj);
                            spanStr.setSpan(new ClickableSpan() {
                                @Override
                                public void onClick(View widget) {
                                    listener.onListener(widget, url);
                                }

                                @Override
                                public void updateDrawState(TextPaint ds) {
                                    super.updateDrawState(ds);
                                    ds.setColor(Color.parseColor("#5997FE")); // 设置字体颜色
                                    ds.setUnderlineText(false); //去掉下划线
                                }
                            }, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                        }
                    }
                }
                return spanStr;
            }
        }
        return new SpannableStringBuilder(answerstring);
    }
}

猜你喜欢

转载自blog.csdn.net/fengyeNom1/article/details/113973406