效果图
实现代码如下,有注释:
String content = "请你务必审慎阅读、充分理解“服务协议和隐私政策”个条款,包括但不限于:为了向你提供内容等服务,我们需要收集你的设备信息、操作日志等个人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。你可以阅读《用户协议》和《用户隐私政策》了解详细信息。如你同意,请点击“同意”开始接受我们的服务";
SpannableStringBuilder spannableString = new SpannableStringBuilder(content);
int privateBeginIndex = content.indexOf("《");
int privateEndIndex = content.indexOf("》") + 1;
int policyBeginIndex = content.lastIndexOf("《");
int policyEndIndex = content.lastIndexOf("》") + 1;
//抽出公共方法
setUserPolicy(spannableString,policyBeginIndex,policyEndIndex,"policy");
setUserPolicy(spannableString,privateBeginIndex,privateEndIndex,"private");
//设置点击事件,加上这句话才有效果
tvContent.setMovementMethod(LinkMovementMethod.getInstance());
//设置点击后的颜色为透明(有默认背景)
tvContent.setHighlightColor(getResources().getColor(R.color.transparent));
tvContent.setText(spannableString);
public void setUserPolicy(SpannableStringBuilder spannableString,int start,int end,String type){
//设置部分文字点击事件
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
//超链接形式的下划线,false 表示不显示下划线,true表示显示下划线
ds.setUnderlineText(false);
}
@Override
public void onClick(View widget) {
showShortToast(type);
// Intent intent = new Intent(LoginActivity.this, AgreeActivity.class);
// startActivity(intent);
}
};
spannableString.setSpan(clickableSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// //设置部分文字颜色
// ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#5e89ef"));
//使用ForegroundColorSpan添加点击事件会出现冲突
UnderlineSpan colorSpan = new UnderlineSpan() {
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(Color.parseColor("#5e89ef"));//设置颜色
}
};
spannableString.setSpan(colorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}