Android 以编程方式更改按钮的颜色

Android 以编程方式更改按钮的颜色,android,button,Android,Button,首先,我已经阅读了关于这个主题的多个主题。方法,如PorterDuff colorfilter和更改setBackgroundResource。它们都能起作用,但会出现完全随机的奇怪打嗝 我有一个具有以下样式的按钮(未按下状态=白色,按下状态=灰色): 要让它恢复正常(白色),我需要: 这会使按钮恢复正常(白色),但当我按下按钮时,它不是灰色(与设置ColorFilter之前一样),而是绿色。不知怎的,滤色器被转移到按钮按下的状态 第二种方法。我创建了一个额外的可绘制按钮样式,除了项目颜色为绿色

首先,我已经阅读了关于这个主题的多个主题。方法,如PorterDuff colorfilter和更改setBackgroundResource。它们都能起作用,但会出现完全随机的奇怪打嗝

我有一个具有以下样式的按钮(未按下状态=白色,按下状态=灰色):

要让它恢复正常(白色),我需要:

这会使按钮恢复正常(白色),但当我按下按钮时,它不是灰色(与设置ColorFilter之前一样),而是绿色。不知怎的,滤色器被转移到按钮按下的状态

第二种方法。我创建了一个额外的可绘制按钮样式,除了项目颜色为绿色(而不是白色)之外,与我的普通按钮样式相同 因此,通过这种方法,我可以如下更改按钮颜色:

b6.setBackgroundResource(R.drawable.green_button);
我把它改回正常状态:

b6.setBackgroundResource(R.drawable.normal_button);
这和预期的一样,只是当我试图将按钮重置回正常状态时,发生了1/10的奇怪行为。按钮变为灰色,似乎没有读取setBackgroundResource。这一切都是随机发生的,日志中没有任何内容会辱骂任何东西


请有人帮我找出这是什么原因,或者提出你的方法。我宁愿不使用文本字段与按钮重叠的imagebutton,也不愿通过更改imagebutton rsc来更改颜色。但请一定要有另一种方法吗?

使按钮无效以强制刷新

b6.invalidate();

这样,你的按钮应该每次都重新绘制

我忘了试一下,好主意,但没有说。请详细说明状态列表,我在谷歌(“android”+“状态列表”)上找不到关于它的任何信息。一些沉重的阅读,pskink,我试着把它槽,也许它以某种方式改变按钮按下的状态,可以删除somehow@user3711421您是否尝试创建自定义的
StateListDrawable
类?否,将查看它。@DerGolem他已经使用了:StateListDrawable==嗯,是的,但它没有正确使用。
b6.setBackgroundResource(R.drawable.green_button);
b6.setBackgroundResource(R.drawable.normal_button);
b6.invalidate();