当验证失败时,我想更改我的edittext的背景颜色为红色,然后,当用户开始更正它时,返回原始颜色。
EditText 有圆角边框,因此在这里使用setBackgroundColor( )不起作用,因为它绘制了一个丑陋的矩形而不是漂亮的圆角矩形。
我试图保存背景并在之后恢复它。并使用新的 bakground 将其涂成红色。下面的代码不起作用,因为tv.getBackground()返回对originalBg和errorBg的相同引用。当我将滤色器设置为errorBg 时,我实际上也将其更改为originalBg。
如何将背景对象复制到errorBg 中,以便在那里更改颜色?
final Drawable originalBg = tv.getBackground();
final Drawable errorBg = tv.getBackground(); <-- this does not create a new Drawable, just the same reference
errorBg.setColorFilter(0xFFff6347, Mode.MULTIPLY);
tv.setBackgroundDrawable(errorBg);
tv.invalidate();
tv.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
tv.setBackgroundDrawable(originalBg);
tv.invalidate();
}
public void afterTextChanged(Editable s) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});