checkbox文字点击跳转以及 Html.fromHtml()失效

Android开发过程中会遇到很多一行文字里有其他颜色的字体,或者给一行文里的某个短语给予点击事件,类似于超链接进行跳转…说的这些,最具代表性的就是登陆或者注册界面的:
在这里插入图片描述
需求:
1.单选框----我们第一感觉checkbox是最合适的;
2.文字改变颜色----- Html.fromHtml(),可以简单实现;
3.有其他颜色字体拥有点击事件-------click?
需求1,2可以实现样式效果,说功能之前先简单了解下Html.fromHtml(),该Api可以把h5样式的文字直接转化为Android TextView可展现样式,但是有时候会没效果,可以注意两点:

  1. textview.setText()时里面的内容为一个字符串,而不是两个拼接的字符串----意思就是说
String str1 = "12345";
String str2 = "678910";
textview.setText(str1 + str2);//这样就会把样式冲掉,不显示
//应该是
String str3 = str1 + str2;
textview.setText(str3);

2.Html.fromHtml() API24 之后废除
总结来说,终极样式为:

public static Spanned formatStringBlue(Context context,String string,String num){
        // Html.fromHtml()   API24   之后废除
        Spanned result;
        String num2 ="<font color=\"#009FE8\">" + num +"</font>";
        String format = string+num2;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            result =  Html.fromHtml(format,Html.FROM_HTML_MODE_LEGACY);
        }else
            result = Html.fromHtml(format);

        return result;
    }

调用的地方为;

 String str1 = "服务协议";
 String str2 = "我同意";
 textview.setText(HtmlFormatUtil.formatStringBlue(RegisterActivity.this, str2, str));

好了,下面开始说功能。
显示样式以上方法即可实现,但是点击事件,checkbox本身自带点击功能,点击文字,复选框也会跟着变化,并且点击的是全部文字,需求重新整理:点击带有颜色的文字响应点击事件,且该点击事件不会影响复选框的改变:

            String str = "服务协议";
            String str2 = "我同意";
          //  Spanned spanned = HtmlFormatUtil.formatStringBlue(RegisterActivity.this, str2, str);

            String text = str2 +str;
            SpannableString spannableString = new SpannableString(text);
            ClickableSpan clickableSpan = new ClickableSpan() {
                @Override
                public void onClick(View view) {
                    cb.setChecked( !cb.isChecked());
                    ToastUtils.showToast("click");
                }
            };

            spannableString.setSpan(clickableSpan,str2.length(),str2.length()+str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            cb.setText(spannableString);
            cb.setMovementMethod(LinkMovementMethod.getInstance());

其中cb为checkbox,onclick为事件的响应,cb.setChecked( !cb.isChecked());只是为了保持复选框的状态,虽然也会有个渐变,但是可以满足需求,另外,你做的是跳转,这个渐变会被跳转隐藏掉-----------------这是比较省力省时,你如果时间够多,是可以考虑自定义

猜你喜欢

转载自blog.csdn.net/julystroy/article/details/84763595