/**
* 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
今日推荐
周排行