我的电子邮件字段为EditText
。我试图在验证为真时在文本字段的末尾添加绿色勾号图标,并在错误时添加setError
。
这是我现在正在使用的代码:
email.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
String mail = email.getText().toString();
if(!android.util.Patterns.EMAIL_ADDRESS.matcher(mail).matches()) {
email.setError("Please enter a valid email address");
}
else {
Log.i("YaY","Email is valid!!!");
email.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.validated, 0);
}
}
}
});
问题:
虽然我可以看到日志Yay: Email is valid!!!
,但似乎没有设置图标,因为我无法看到它。
但是当我将if-condition
更改为false
时,这意味着永远不会调用setError
,我可以看到日志和图标。
我为什么会看到这种奇怪行为的任何解释?我错过了什么?
答案 0 :(得分:10)
如果要设置任何图标,请尝试从xml中删除该图标 并从代码中设置两个图像 由于某种原因,如果您从xml
设置图像,则图像不会刷新并使用
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
numTxt.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.icon, 0, 0, 0);
} else {
numTxt.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 0, 0, 0);
}
答案 1 :(得分:1)
我不确定这是否是一个错误,但我可以通过在分配新的drawable之前先将drawable设置为零(0)来解决此问题。
在您的情况下,您可以尝试以下方法:
Log.i("YaY","Email is valid!!!");
email.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
email.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.validated, 0);