ForegroundColorSpan不生效的解决办法

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());
    }

在这里插入图片描述

搞定!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值