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

时间:2011-06-30 17:28:20

标签: android android-edittext

目前我有一个非常简单的代码可以验证EditText字段,当用户点击按钮时,它会检查它们。它会在所有字段中输出错误:

if (!emailmatcher.matches()) {
    email.setError("Invalid Email");  
}
if (!zipmatcher.matches()) {
    zipcode.setError("Invalid ZipCode");                     
}

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

5 个答案:

答案 0 :(得分:56)

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

因为EditText显示与焦点何时相关的任何内容。所以只需将代码改为那样......

if (!emailmatcher.matches()) {
    email.requestFocus();
    email.setError("Invalid Email");  
}
if (!zipmatcher.matches()) {
    zipcode.requestFocus();
    zipcode.setError("Invalid ZipCode");                     
}

答案 1 :(得分: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;
        }
    });
}

答案 2 :(得分:2)

这对我有用。 现在弹出错误消息。

public boolean isValid() {
        String email = ediTextEmail.getText().toString();
        String password = ediTextPassword.getText().toString();
        if (TextUtils.isEmpty(email)) {
            ediTextEmail.requestFocus();
            ediTextEmail.setError("Email cannot be blank");
            return false;
        }

        if (!isEmailValid(email)) {
            ediTextEmail.requestFocus();
            ediTextEmail.setError("Enter a valid email id");
            return false;
        }

        if (TextUtils.isEmpty(password)) {
            ediTextPassword.requestFocus();
            ediTextPassword.setError("Password cannot be blank");
            return false;
        }

        mEmail = email;
        mPassword = password;
        return true;
    }

即使我的焦点在password editText,弹出也会打开,它会被重定向到email editText

答案 3 :(得分:0)

只需创建自己的edittext即可 并覆盖setError

    public class MyEditText extends EditText {

public MyEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public void setError(CharSequence error, Drawable icon) {
    setCompoundDrawables(null, null, icon, null);
 }
}  

然后随时随地使用 et.setError(“”,drawableToShow);

答案 4 :(得分:0)

您可以将我的自定义解决方案用于弹出窗口。在这种情况下,弹出窗口独立于EditText焦点状态。此外,它可用于多个EditTexts。 https://plus.google.com/+AlexanderZaitsevDev/posts/W9XcZNZrsMB