1. 程式人生 > >checkbox文字點選跳轉以及 Html.fromHtml()失效

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());只是為了保持複選框的狀態,雖然也會有個漸變,但是可以滿足需求,另外,你做的是跳轉,這個漸變會被跳轉隱藏掉-----------------這是比較省力省時,你如果時間夠多,是可以考慮自定義