EditText setError()没有消息只是图标

Nic*_*ick 36 android android-edittext

目前我有一个非常简单的代码来验证EditText字段,当用户点击按钮时,它会检查它们.它将在所有字段中放入错误:

if (!emailmatcher.matches()) {
    email.setError("Invalid Email");  
}
if (!zipmatcher.matches()) {
    zipcode.setError("Invalid ZipCode");                     
}
Run Code Online (Sandbox Code Playgroud)

我的问题是键盘会弹出并将错误气泡移动到一个随机的位置.我希望没有错误气泡与消息,但将错误图标保留在无效EditText字段中.我尝试输入,setError(null)但这不起作用.有任何想法吗?

Tof*_*mad 57

您的代码非常适合仅显示图标.

正如EditText显示任何与其聚焦时间相关的内容.所以只需将代码更改为...

if (!emailmatcher.matches()) {
    email.requestFocus();
    email.setError("Invalid Email");  
}
if (!zipmatcher.matches()) {
    zipcode.requestFocus();
    zipcode.setError("Invalid ZipCode");                     
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用

setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.my_error_icon, 0);

将错误图标设置在文本输入的右侧.您可能还需要注册

View.OnKeyListener 重置用户输入的错误图标:

EditText myEdit = (EditText)findViewById(R.id.my_edit);

if (TextUtils.isEmpty(myEdit.getText().toString())) {
    // set the warning
    myEdit.requestFocus();

    // show error icon
    myEdit.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.error_sign, 0);

    // remove the error icon on key press
    myEdit.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            EditText eText = (EditText)v;

            // remove error sign
            eText.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);

            // remove this key handler
            eText.setOnKeyListener(null);

            return false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)