我注意到setColorFilter()的一个奇怪的行为。我的活动中有一些按钮,当用户点击其中一个按钮时,如果某个条件为真,我想为它设置绿色背景,否则为红色。这不起作用。但是在另一种方法中,如果没有任何条件,则相同的语句有效。
我只在ICS上遇到这个问题,而在Lollipop上一切运作良好。我通过使用drawable来设置背景来解决这个问题,但我想了解为什么会出现这个问题。
第一种方法:
private void setButtons() {
buttonList = new ArrayList<>();
/*buttons initialization*/
for (int i = 0; i < btnNumber; i++) {
buttonList.get(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button btn = (Button) v;
String buttonText = btn.getText().toString();
if (buttonText.equals(getAnswer())) {
//set background to GREEN
btn.getBackground().setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.GREEN), PorterDuff.Mode.MULTIPLY);
}
else {
//set background to RED
btn.getBackground().setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.RED), PorterDuff.Mode.MULTIPLY);
}
}
});
}
}
同一类中的第二种方法:
private void revealAnswer() {
String answer = getAnswer();
for (int i = 0; i < btnNumber; i++) {
Button currentBtn = buttonList.get(i);
String currentText = (String) currentBtn.getText();
if (currentText.equals(answer)) {
//set background to GREEN
buttonList.get(i).getBackground().setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.GREEN), PorterDuff.Mode.MULTIPLY);
break;
}
}
}