前言
/1240)
如上图所示功能实现,有两种方法实现:
(1)直接几个textview拼接成一段文字进行实现;这种方式不太实用,多个textview实现有点浪费资源。
(2)采用SpannableString进行实现;此篇文章主要进行该方法实现
话不多说,我们开始吧:
思路
1.首先上图这段文字我们可以分成5个字符串:
①用户协议前面一段文字
②用户协议
③和
④隐私条款
⑤隐私条款后面文字
2.主要需要我们处理的就是用户协议和隐私条款
定义字符串 String user_agreement = "《用户协议》",String privacy_policy = "《隐私条款》",分别进行其点击事件,下划线,字体颜色等相关处理
代码实现
String privacy_policy = "《隐私条款》";
String tv_he = "和";
String empennage_content = "。如您选择不同意,我们将无法为您提供XXX相关等功能,同时我们可能在您使用相关功能和服务时,需要在您的设备中开启特定的访问权限,以实现这些权限的对用功能";
tvContent.setText("欢迎使用XXX,在您使用XXX前,请认真阅读并了解我们的 ");
//用户协议部分
SpannableString spStr = new SpannableString(user_agreement);
spStr.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#FFFF4849")); //设置文件颜色
ds.setUnderlineText(true); //设置下划线
}
@Override
public void onClick(View widget) {
// 。。。用户协议点击事件
}
}, 0, user_agreement.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvContent.append(spStr);
tvContent.append(tv_he);
//隐私条款部分
SpannableString spStrPolicy = new SpannableString(privacy_policy);
spStrPolicy.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#FFFF4849")); //设置文件颜色
ds.setUnderlineText(true); //设置下划线
}
@Override
public void onClick(View widget) {
// 。。。隐私条款点击事件
}
}, 0, spStrPolicy.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvContent.append(spStrPolicy);
tvContent.append(empennage_content);
tvContent.setMovementMethod(LinkMovementMethod.getInstance());//开始响应点击事件
结束
至此结束 主要是SpannableString 的使用以及相关点击事件处理。大家有好的方案可以分享一下。
原创,转载请注明出处:https://www.jianshu.com/p/ed04fa30cd09