现在大部分的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));