SpannableString设置指定字符串的颜色变化
1、在设置字符串文字颜色
2、添加对应的文字点击跳转事件
正常的写法相信大家都会,但是会遇到三种问题
问题一、文字的颜色设置没有起作用
解决方法:关闭点击事件或者在updateDrawState()方法中写下面的方法为超链接文本设置颜色
ds.setColor(context.getResources().getColor(R.color._4A90E2));
问题二、同时设置了ClickableSpan和ForegroundColorSpan产生了冲突
解决方法:将ForegroundColorSpan替换为UnderlineSpan,并重写updateDrawState方法
问题三、点击对应的变色文字的时候背景颜色不对
解决方法:onClick()方法中调用下面的方法将背景改成透明
((TextView)widget).setHighlightColor(context.getResources().getColor(R.color.transparent));
话不多说,上代码
注:改变“用户协议”和“隐私政策”的文字颜色并且带有跳转
/**
* 同时设置ClickableSpan和ForegroundColorSpan时 指定字符串的颜色无法改变,需要按照下面这样写
* @param context
* @param textView
* @description setHighlightColor方法用来改变点击时的背景透明
*/
public static void setSpannableString(final Context context,TextView textView) {
SpannableString spannableString = new SpannableString("我已阅读并同意 用户协议 与 隐私政策");
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
((TextView)widget).setHighlightColor(context.getResources().getColor(R.color.transparent));//点击后的背景改变透明
String url = Url.webViewUrl + WebDetailActivity.USER_DISPLINE;
UrlUtils.parseUrl(context, url);
}
},8,12,1);
spannableString.setSpan(new UnderlineSpan(){
@Override
public void updateDrawState(@NonNull TextPaint ds) {
ds.setColor(context.getResources().getColor(R.color._4A90E2));//设置颜色
ds.setUnderlineText(false);//去掉下划线
}
},8,12,1);
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
((TextView)widget).setHighlightColor(context.getResources().getColor(R.color.transparent));
String url = Url.webViewUrl + WebDetailActivity.SECURITY_DISPLINE;
UrlUtils.parseUrl(context, url);
}
},15,19,2);
spannableString.setSpan(new UnderlineSpan(){
@Override
public void updateDrawState(@NonNull TextPaint ds) {
ds.setColor(context.getResources().getColor(R.color._4A90E2));
ds.setUnderlineText(false);
}
},15,19,2);
textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
搞定!!!