web-dev-qa-db-fra.com

Erreur TextInputLayout après la saisie de la valeur dans edittext

Comment masquer une erreur TextInputLayout après avoir saisi un texte dans EditText. Est-ce possible? 

comment puis-je atteindre ceci ou je fais quelque chose de mal ici !!

 enter image description here

code

    layoutEdtPhone =(TextInputLayout)rootView.findViewById(R.id.layoutEdtPhone);
    layoutEdtPhone.setErrorEnabled(true);
    layoutEdtPhone.setError(getString(R.string.ui_no_phone_toast));
    layoutEdtPassword =   (TextInputLayout)rootView.findViewById(R.id.layoutEdtPassword);
    layoutEdtPassword.setErrorEnabled(true);
    layoutEdtPassword.setError(getString(R.string.ui_no_password_toast));

    edtPhone=(EditText)rootView.findViewById(R.id.edtPhone);
    edtPassword=(EditText)rootView.findViewById(R.id.edtPassword);

xml

            <EditText
                Android:id="@+id/edtPhone"
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="100dp"
                Android:background="@drawable/edt_background_selector"
                Android:drawableLeft="@drawable/phone_icon"
                Android:drawableStart="@drawable/phone_icon"
                Android:hint="@string/phone"
                Android:inputType="phone"
                Android:padding="5dip"
                Android:singleLine="true"
                Android:textSize="14sp" />
        </Android.support.design.widget.TextInputLayout>

        <Android.support.design.widget.TextInputLayout
            Android:id="@+id/layoutEdtPassword"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content" >

            <EditText
                Android:id="@+id/edtPassword"
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="16dp"
                Android:background="@drawable/edt_background_selector"
                Android:drawableLeft="@drawable/password_icon"
                Android:drawableStart="@drawable/password_icon"
                Android:hint="@string/password"
                Android:inputType="textPassword"
                Android:padding="5dip"
                Android:singleLine="true"
                Android:textSize="14sp" />
        </Android.support.design.widget.TextInputLayout>
14
Kishore Jethava

Pour illustrer davantage la réponse donnée par Prithviraj, TextInputLayout ne fait pas la validation elle-même. C'est juste un mécanisme pour montrer l'erreur ou l'indice. Vous êtes responsable de la définition/suppression de l'erreur. Voici comment vous pouvez le faire. Notez qu'en plus de TextChangedListener, vous pouvez également avoir besoin de OnFocusChangeListener pour définir l'erreur lorsque l'utilisateur passe au deuxième texte édité sans effectuer aucune modification dans le premier champ.

protected void onCreate(Bundle savedInstanceState) {
        //.....

        edtPhone.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                validateEditText(s);
            }
        });

        edtPhone.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    validateEditText(((EditText) v).getText());
                }
            }
        });
    }

    private void validateEditText(Editable s) {
        if (!TextUtils.isEmpty(s)) {
            layoutEdtPhone.setError(null);
        }
        else{
            layoutEdtPhone.setError(getString(R.string.ui_no_password_toast));
        }
    }
}
15
Ganesh Kumar

Vous pouvez définir layoutEdtPhone.setErrorEnabled(false);

11
fab

Faire 

mTextInputLayout.setError(null);

pour effacer le message d'erreur.

Une bonne pratique peut être une méthode pour vérifier les erreurs comme ceci:

@Override
public void checkErrorBeforeAction() {

    boolean error = false;

    mTextInputLayout.setError(null);

    if (mEditText.getText().toString().length == 0)) {
        mTextInputLayout.setError("Field empty");
    }
    else if (mEditText.getText().toString().isValid) { // Other condition
        mTextInputLayout.setError("Field is invalid");
    }
    if (!error) {
        // Call action
    }
}

De cette façon, le message d'erreur est actualisé avant d'en définir un nouveau.

6
Teo Inke

J'ai utilisé @TextChanged de ButterKnife et a travaillé pour moi, regardez:

@Bind(R.id.layoutEdtPhone)
TextInputLayout tlayoutEdtPhone;
@Bind(R.id.edtPhone)
EditText edtPhone;

//start ButterKnife (I spent the URL with full description for initilize)

@OnTextChanged(R.id.edtPhone)
public void changedTextOnEditPhone() {
    tlayoutEdtPhone.setError("");
}

Si vous voulez en savoir plus sur ButterKnife, j’ai écrit un article plus détaillé, mais dans ma langue maternelle, c’est-à-dire pt_br. http://blog.alura.com.br/aumentando-a-produtividade-com-butter-knife-no-Android/

5
Alex Felipe
textInputLatout.getEditText().addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() < 1) {
               textInputLayout.setErrorEnabled(true);
                textInputLayout.setError("Please enter a value");
            }

            if (s.length() > 0) {
                textInputLayout.setError(null);
                textInputLayout.setErrorEnabled(false);
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
2
Gowsik K C

Si vous souhaitez supprimer l'affichage d'erreur de TextInputLayout, utilisez: -

YourtextInputLayout.setErrorEnabled(false);

else Si vous souhaitez supprimer l’affichage des erreurs d’edittextfield, utilisez: -

edittext_id.setError(null);

Je suggère d'utiliser Textwatcher fucntion dans Android pour une gestion de validation plus efficace ..

par exemple:

editText.addTextChangedListener(new TextWatcher() { 
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (!validatefName()) {
                    return;
                }
            }
        });
0
user6602265