我想在验证失败时改变我的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) {}
});
答案 0 :(得分:1)
您是否尝试过创建副本:
final Drawable originalBg = tv.getBackground();
final BitmapDrawable errorBg = new BitmapDrawable(getResources(), (BitmapDrawable) tv.getBackground();
答案 1 :(得分:1)
您可以使用setColorFilter(null)
删除滤色器tv.getBackgroundDrawable().setColorFilter(0xFFff6347, Mode.MULTIPLY);
tv.invalidate();
tv.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
tv.getBackgroundDrawable().setColorFilter(null);
tv.invalidate();
}
答案 2 :(得分:0)
您可以创建一个xml文件,该文件定义带有圆角的drawable以用作背景。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#ff6347"/>
<corners android:radius="3dp"/>
</shape>
将此文件放在drawables文件夹中,并使用EditText上的setBackgroundDrawable()
方法来使用它。您可能需要使用颜色和角半径来获得它想要的方式。不完全是你的问题的答案,但希望它可以帮助。