首先,我在SO上阅读了有关此主题的多个主题。方法如PorterDuff colorfilter和更改setBackgroundResource。它们都有效,但是完全随机发生了奇怪的打嗝。
我有一个按钮具有以下样式(未按下状态=白色,按下=灰色):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item>
<shape>
<solid android:color="#ffafafaf" />
<corners android:radius="30dip"/>
</shape>
</item>
</layer-list>
</item>
<item>
<layer-list>
<!-- SHADOW LAYER -->
<item>
<shape>
<solid android:color="#66000000" />
<corners android:radius="30dp"/>
</shape>
</item>
<!-- CONTENT LAYER -->
<item android:left="1dp" android:top="1dp" android:bottom="2dp" android:right="2dp">
<shape>
<solid android:color="#ffffff" />
<corners android:radius="30dp"/>
</shape>
</item>
</layer-list>
</item>
</selector
&GT;
所以为了点击这个按钮绿色而不是白色,我尝试了两种不同的方法。第一个
button.getBackground().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
比让它恢复正常(白色)我做:
Drawable d = button.getBackground();
button.invalidateDrawable(d);
d.clearColorFilter();
这使按钮恢复正常(白色),但是当我按下它时不是灰色(就像在setColorFilter之前那样)而是绿色。不知何故,colorfilter被转移到按钮按下状态。
第二种方法。除了项目颜色为绿色(而不是白色)外,我创建了一个与我的正常相同的可绘制按钮样式 因此,通过这种方法,我可以像这样更改按钮颜色:
b6.setBackgroundResource(R.drawable.green_button);
我将其改回正常状态:
b6.setBackgroundResource(R.drawable.normal_button);
这可以正常工作,除了当我尝试将按钮重置为正常时发生的奇怪行为1/10。按钮变为灰色,似乎没有读取setBackgroundResource。这种情况都是随机发生的,而logcat中没有任何东西可以辱骂
请有人帮我弄清楚造成这种情况的原因或提出你这样做的方法。我宁愿不使用带有相对布局重叠按钮的文本字段的图像按钮,而不是通过更改图像按钮rsc来改变颜色。但是,还有另一种方式吗?
答案 0 :(得分:0)
使按钮无效以强制刷新。
b6.invalidate();
这样每次都应该重绘你的按钮。