如果 EditText 的验证返回 false,我们有 setError 方法用于在框的末尾设置带有红色感叹号的错误消息:

Android:EditText 中的验证符号-LMLPHP

我想设置一个 绿色勾号符号 ,就像我的验证返回 true 时框末尾的红色感叹号:

password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {

                if (password.getText().toString().length() < 6) {
                    password.setError("Password should be greater than 6 characters!");
                }
                else {
                    //validation is true, so what to put here?
                }
            }
        }
    });
}

编辑 1
看似不可能,但问题更多。我这样做了:
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!!! ,但我看不到 EditText 末尾的验证符号。

然而,令我惊讶的是,当我将 if 语句更改为 always false 时,我可以看到带有 log 语句的符号。

关于为什么会发生这种情况的任何解释?

最佳答案

我刚刚在我自己的项目中使用 setError(CharSequence error, Drawable icon) 对其进行了测试

  • 获取新图标:
    转到我的可绘制文件夹
    添加新的矢量 Assets 。
    我选择了“素材图标”并浏览,
    然后选择 ic_done_24pp。
  • 颜色:
    接下来,我进入 xml 并通过更改填充颜色使其变为绿色:android:fillColor="#FF00FF00"

  • 3:更改代码:
    Drawable myIcon = getResources().getDrawable(R.drawable.ic_done_24dp);
    myIcon.setBounds(0, 0, myIcon.getIntrinsicWidth(), myIcon.getIntrinsicHeight());
    mPasswordView.setError("Good", myIcon);
    

    Android:EditText 中的验证符号-LMLPHP

    关于Android:EditText 中的验证符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34847356/

    10-10 18:32