1

谁能解释这种外观上的差异?
SetColorFilter() 作用于背景 Drawable,setBackgroundResource() 是否设置背景颜色。
在 Android 2.3 版本中,我安全地使用 SetColorFilter() 来更改 EditText 的背景颜色,因为通过清除过滤器很容易恢复原始颜色。无需获取并记住它。现在这两种方式似乎有所不同。

这是一个 EditTextPreference 对话框,et 是 EditText id。

        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);
        }

在此处输入图像描述

4

1 回答 1

-1

你可以使用textView.setError("Error message")上面提到的。但是,如果您想自定义 setError() 的行为(例如更改背景颜色),您将需要重写 EditText 并为 setError 编写自己的处理程序,如下所示:EditText setError() with icon but without Popup message

于 2013-04-02T15:11:30.423 回答