setBackgroundColor方法,android

setBackgroundColor方法,android,android,android-layout,Android,Android Layout,现在我正在构建一个简单的表单,我正在设计它,如果用户在点击提交按钮之前没有输入必要的信息,背景就会变成红色。如果他们输入了正确的信息,表单就会回到以前的状态 // "if empty then set fields to red" checks if (firstLastName.getText().toString().equals("")) { firstLastName.setBackgroundColor(Color.RED);

现在我正在构建一个简单的表单,我正在设计它,如果用户在点击提交按钮之前没有输入必要的信息,背景就会变成红色。如果他们输入了正确的信息,表单就会回到以前的状态

// "if empty then set fields to red" checks
            if (firstLastName.getText().toString().equals("")) {
                firstLastName.setBackgroundColor(Color.RED);
            }
            else
                firstLastName.setBackgroundColor(Color.WHITE);
        }
问题是白色显然与以前不同,因为它看起来不同。是否有办法在不删除用户输入的信息的情况下重置表单


如果我不清楚,请告诉我,我会尽力详细说明。

设置和删除滤色器而不是更改背景色如何:

if (firstLastName.getText().toString().equals("")) {
    // 0xFFFF0000 is red
    firstLastName.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.DARKEN);}
else {
    //Setting to null removes filter
    firstLastName.getBackground().setColorFilter(null);
}

设置和删除颜色过滤器而不是更改背景色如何:

if (firstLastName.getText().toString().equals("")) {
    // 0xFFFF0000 is red
    firstLastName.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.DARKEN);}
else {
    //Setting to null removes filter
    firstLastName.getBackground().setColorFilter(null);
}

另一种选择是:您可以使用
firstLastName.setError(“需要填写此字段,哟!”)在EditText上设置错误消息这是编辑文本吗?首先尝试对其调用getBackground(),并暂时存储此结果,以便可以重置它。更可能的是,默认背景不是Color.WHITE。我建议使用默认背景色,但我不知道这是否可行。但是你可以定义自己的主题,这可能会有帮助,尤其是最后一个答案。另一种选择是:您可以使用
firstLastName.setError(“需要填写此字段,哟!”)在EditText上设置错误消息这是编辑文本吗?首先尝试对其调用getBackground(),并暂时存储此结果,以便可以重置它。更可能的是,默认背景不是Color.WHITE。我建议使用默认背景色,但我不知道这是否可行。但是你可以定义自己的主题,这可能会有帮助,尤其是最后一个答案+1,以及关于OP实现失败原因的更多信息:任何SDK小部件的默认背景通常是
或9-patch图像。设置颜色将清除此复杂的可绘制文件,并将其替换为单个
可绘制文件
。一旦修改,就无法返回到原始的
StateListDrawable
,因为这些可绘制ID没有暴露给SDK。+1,还有一些关于OP实现被破坏的原因的更多信息:任何SDK小部件的默认背景通常是
或9-patch图像。设置颜色将清除此复杂的可绘制文件,并将其替换为单个
可绘制文件
。一旦修改,就无法返回到原始的
StateListDrawable
,因为这些可绘制的ID不会向SDK公开。