Android开发过程中会遇到很多一行文字里有其他颜色的字体,或者给一行文里的某个短语给予点击事件,类似于超链接进行跳转…说的这些,最具代表性的就是登陆或者注册界面的:
需求:
1.单选框----我们第一感觉checkbox是最合适的;
2.文字改变颜色----- Html.fromHtml(),可以简单实现;
3.有其他颜色字体拥有点击事件-------click?
需求1,2可以实现样式效果,说功能之前先简单了解下Html.fromHtml(),该Api可以把h5样式的文字直接转化为Android TextView可展现样式,但是有时候会没效果,可以注意两点:
- 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());
只是为了保持复选框的状态,虽然也会有个渐变,但是可以满足需求,另外,你做的是跳转,这个渐变会被跳转隐藏掉-----------------这是比较省力省时,你如果时间够多,是可以考虑自定义