EditText setError () sans message juste l'icône

Actuellement, j'ai un code très simple qui valide les champs EditText et lorsque l'utilisateur appuie sur le bouton à la fin, il les vérifie. Il mettra des erreurs dans tous les champs avec ceci:

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

Mon problème qui est le clavier apparaîtra et déplacera la bulle d'erreur à un endroit aléatoire. J'espérais ne pas avoir une erreur bulles avec un message, mais garder les icônes d'erreur dans invalide EditText champs. J'ai essayé d'Entrer setError(null) mais cela ne fonctionne pas. Des Idées?

29
demandé sur Nick 2011-06-30 21:28:19

5 réponses

Votre code parfait pour afficher l'icône seulement.

Comme EditText montre tout ce qui est lié à quand il s'est concentré. Alors changez simplement votre code pour comme ça...

if (!emailmatcher.matches()) {
    email.requestFocus();
    email.setError("Invalid Email");  
}
if (!zipmatcher.matches()) {
    zipcode.requestFocus();
    zipcode.setError("Invalid ZipCode");                     
}
53
répondu Tofeeq 2015-08-11 19:29:56

Vous pouvez utiliser

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

Pour définir l'icône d'erreur à droite de votre saisie de texte. Vous devrez peut-être également vous inscrire

View.OnKeyListener pour réinitialiser l'icône d'erreur sur la saisie de l'utilisateur:

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;
        }
    });
}
4
répondu Мао Хýевич 2012-10-26 05:56:59

Cela fonctionne pour moi. Maintenant, obtenir des messages d'erreur pop-up ouvert.

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

Pop ouvert même si mon focus est sur password editText, il sera redirigé vers email editText.

2
répondu BK19 2016-10-05 09:20:35

Créez simplement votre propre edittext et remplacer 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 puis utiliser où vous voulez et.setError("", drawableToShow);

0
répondu Amol Desai 2015-05-06 13:42:30

Vous pouvez utiliser ma solution personnalisée pour les popups. Dans ce cas, le popup est indépendant de L'état de mise au point EditText. De plus, il est utilisable avec plusieurs EditTexts. https://plus.google.com/ + AlexanderZaitsevDev / messages / W9XcZNZrsMB

0
répondu rocknow 2015-10-23 11:17:59