转自:http://www.jianshu.com/p/06703d56cab8

通常selector 都是在drawable/color文件夹中定义好,但有时候一些特殊需求需要我们动态通过代码去更改,这个时候就要用到StateListDrawable 和 ColorStateList 了,这两个分别是设置图片和颜色的类

1、对不同状态的控件设置不同的图片(StateListDrawable)

通常我们在设置不同状态下图片不同时是这么写的:比如checkBox

a、定义一个selector文件

<?xml version= "1.0" encoding="utf-8">

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/ic_toolbar_huabuwan_selected"                                 android:state_checked="true"/>

<item android:drawable="@drawable/ic_toolbar_huabuwan_normal"                                   android:state_checked="false"/>

</selector>

b、然后设置给checkBox

<CheckBox

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:background="@drawable/selector_check"/>

这是在图标没有定死的情况下,如果图标是要动态替换则需要通过下面这种方式了

2、通过代码动态设置图标

/**

* 设置底部tab图标

* @paramradioButton控件

* @paramdrawableNormal常态时的图片

* @paramdrawableSelect选中时的图片

*/

public void setSelectorDrawable(CheckBox cbButton,Drawable drawableNormal,Drawable drawableSelect){

StateListDrawable drawable =newStateListDrawable();

//选中

drawable.addState(new int[]{android.R.attr.state_checked},drawableSelect);

//未选中

drawable.addState(new int[]{-android.R.attr.state_checked},drawableNormal);

cbButton.setBackgroundDrawable(drawable);

}

同理selector的颜色也是如此设置,设置颜色的类是ColorStateList

/**

* 设置底部tab文字颜色

* @paramradioButton控件

* @paramnormal正常时的颜色值

* @paramchecked选中时的颜色值

*/

public void setSelectorColor(RadioButton radioButton,intnormal,intchecked){

int[] colors =new int[] { normal, checked,normal};

int[][] states =new int[3][];

states[0] =new int[] { -android.R.attr.state_checked};

states[1] =new int[] { android.R.attr.state_checked};

states[2] =new int[] {};

ColorStateList colorStateList =newColorStateList(states,colors);

radioButton.setTextColor(colorStateList);

}

注意:-android.R.attr.state_checked 和 android.R.attr.state_checked 的区别在于 “-” 号代表值里的true 和 false ,有“-”为false 没有则为true

转载于:https://www.cnblogs.com/jinglecode/p/6909038.html

Android 使用代码设置selector 的图片或文字颜色相关推荐

  1. Android kotlin 代码设置短信指定SIM卡发送

    Android kotlin 代码设置短信指定SIM卡发送 前言 逻辑 权限 获取全部手机卡信息 修改短信使用的卡 发送短信 完事 前言 在双卡双待,甚至多卡多待的Android设备中,实现调用自己想 ...

  2. Android仿微信朋友圈发图片和文字

    Android仿微信朋友圈发图片和文字的一个开源项目,其在github上的项目主页是:https://github.com/zhangphil/FangWeiXinPengYouQuanFaTuPia ...

  3. android 图片绑定按钮,Android编程实现给Button添加图片和文字的方法

    本文实例讲述了Android编程实现给Button添加图片和文字的方法.分享给大家供大家参考,具体如下: //为按钮添加图片和文字的方法 public Spanned getSpan(int id, ...

  4. 设置html里面图片和文字的位置

    如何设置html里面图片和文字的位置 1.首先是图片 <style type="text/css">body{ background-image:url("s ...

  5. android RadioGroup中设置selector后出现多个别选中的RadioButton的解决办法

    在一个RadioGroup组中假如有三个或者以上的RadioButton,当然你需要给这些RadioButton设置selector.设置其中的一个为默认选中状态(在xml中设置).当程序在手机上运行 ...

  6. android 后台代码设置动画

    1.设置旋转动画 final RotateAnimation animation =new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF, 0. ...

  7. android通过代码设置铃声_使用VS Code调试Android C_C++代码(无需Android源码)

    需求分析 在开发 Android Native 程序时(仅 C/C++代码,无 APK 应用),之前在调试的过程中一直只是使用添加 LOG 的方式来定位程序的问题,而在 Linux 上开发平台程序时, ...

  8. android 自定义铃声 代码,Android通过代码设置铃声

    对安卓手机进行铃声操作,设置默认铃声.删除当前默认铃声.更改铃声 以默认振铃为例子,通过代码设置手机铃声 设置默认振铃 // 将铃声的路径插入contentResolver,以数据库的形式插入 /** ...

  9. android中用代码设置edittext属性为密码,Android中EditText常用属性设置

    EditText继承关系:View–>TextView–>EditText 常用属性如下:android:layout_gravity="center_vertical" ...

最新文章

  1. nlp 中文停用词数据集
  2. wxWidgets:wxWindowCreateEvent类用法
  3. 普及一下equals和==的区别的误区
  4. Swift之extension的使用
  5. 10、什么是WEB端
  6. MySQL 时间戳转换成秒
  7. maven私服Nexus3.2的使用
  8. STM32+DWM1000开发uwb测距系列教程之三:使用官方例程实现p2p双向 twr测距
  9. badboy使用手册
  10. [解决]Windows 8 丢失 MSVCR71.dll 或 MSVCP71.dll
  11. 总所周知,Github是一个读小说的网站!《Re0:从零开始的异世界生活》Web版
  12. MySQL--通过mysqladmin命令修改密码提示:single quotes were not trimmed line client(Windows)
  13. gluster分布式存储总结与实践
  14. Mac OSX 安装qemu
  15. thinkpad重装系统不引导_联想电脑重装win7系统后引导不了的原因是什么?
  16. 海外众筹:产品出海kickstarter海外众筹流程
  17. js(EcamaScript)
  18. ES6 语法糖(一)
  19. react基础 - 模块与组件 - 组件化开发
  20. matlab怎么定义矩阵函数,怎么在matlab定义一个函数,而这个函数输入值是矩阵,并且输出的值也是相应的矩阵?...

热门文章

  1. 计算机和学数制和码制,[文学]第二章 计算机中的数制和码制.ppt
  2. portal认证 php,如何用PHP制作OSSH 免费版华为Portal系统认证前端页面
  3. mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞
  4. mysql三高讲解(二):2.2 B+树的B的意义
  5. oracle 数据为当前月 查询结果为累计到当前月的数据_Oracle里的执行计划——使用explain plan命令...
  6. php字符串如何比较大小写,PHP字符串函数strcmp(二进制安全比较字符串,区分大小写)...
  7. virtual box linux 安装增强功能,Linux 开发环境中为VirtualBox安装增强功能
  8. c++ 一个函数包括多个返回值判断_go语言学习笔记(10)-函数、包的使用
  9. sqlalchemy 聚合
  10. MySQL Window Function Descriptions