Кто-нибудь может объяснить эту разницу во внешнем виде?
SetColorFilter() действует на фон Drawable, независимо от того, устанавливает ли setBackgroundResource() цвет фона.
В версии Android 2.3 я безопасно использовал SetColorFilter() для изменения цвета фона EditText, так как очень легко восстановить первоначальный цвет, очистив фильтр. Не нужно брать и запоминать. Теперь, кажется, есть разница между двумя способами.
Это диалоговое окно EditTextPreference, это идентификатор EditText.
public void afterTextChanged(Editable s) {
String source = s.toString();
et.removeTextChangedListener(this);
if( !source.matches("^[0-9]+$") ) {
et.getBackground().setColorFilter(getResources().getColor(R.color.invalid), Mode.OVERLAY);
et.invalidate();
et.selectAll();
} else {
et.getBackground().clearColorFilter();
et.invalidate();
}
et.addTextChangedListener(this);
}
И это тот же код, использующий SetBackgroundResource()
public void afterTextChanged(Editable s) {
String source = s.toString();
et.removeTextChangedListener(this);
if( !source.matches("^[0-9]+$") ) {
et.setBackgroundResource(R.color.invalid);
et.selectAll();
} else {
et.setBackgroundResource(R.color.valid);
}
et.addTextChangedListener(this);
}