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?
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");
}
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;
}
});
}
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
.
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);
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