Android 动态设置控件文字颜色和背景色

一般我们要实现一个控件按压变背景色,我们会写selector的xml文件,比如:

今天我告诉大家一个动态的方法改变文字的颜色和控件的背景色,以后不需要那么麻烦的写xml文件了:

/**
 * 控件背景色选择器
 *
 * @param context   当前上下文
 * @param idNormal  默认图片
 * @param idPressed 按压时图片
 * @return
 */
public static StateListDrawable setSelector(Context context, int idNormal, int idPressed) {
StateListDrawable bg = new StateListDrawable();
Drawable normal = idNormal == -1 ? null : context.getResources().getDrawable(idNormal);
Drawable pressed = idPressed == -1 ? null : context.getResources().getDrawable(idPressed);
bg.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed);
bg.addState(new int[]{android.R.attr.state_enabled}, normal);
bg.addState(new int[]{}, normal);
return bg;
}


/**
 * 控件字体颜色选择器
 *
 * @param mContext 当前上下文
 * @param normal   默认显示颜色
 * @param pressed  按压后显示的颜色
 * @return
 */
public static ColorStateList createColorStateList(Context mContext, int normal, int pressed) {
int pressColor = mContext.getResources().getColor(pressed);
int normalColor = mContext.getResources().getColor(normal);
int[] colors = new int[]{pressColor, pressColor, normalColor, pressColor, pressColor, normalColor};
int[][] states = new int[6][];
states[0] = new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled};
states[1] = new int[]{android.R.attr.state_enabled, android.R.attr.state_focused};
states[2] = new int[]{android.R.attr.state_enabled};
states[3] = new int[]{android.R.attr.state_focused};
states[4] = new int[]{android.R.attr.state_window_focused};
states[5] = new int[]{};
ColorStateList colorList = new ColorStateList(states, colors);
return colorList;
}

在Activity中调用也很方便,如这样:


好了,就到这里,亲测没问题,不会上传动态图,有什么问题可以留言!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值