J'ai besoin d'un EditText
qui ressemble à ceci surError:
appeler onError ressemble à ceci à la place:
Remarque: l'application fonctionne sur le SDK 19 (4.4.2).
min SDK est 1
Existe-t-il une méthode similaire à setError qui le fait automatiquement ou dois-je écrire le code correspondant?
Je vous remercie
Il n'est pas nécessaire d'utiliser une bibliothèque tierce depuis que Google a introduit le TextInputLayout
dans le cadre du design-support-library
.
En suivant un exemple de base:
<Android.support.design.widget.TextInputLayout
Android:id="@+id/text_input_layout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:errorEnabled="true">
<Android.support.design.widget.TextInputEditText
Android:id="@+id/edit_text"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="Enter your name" />
</Android.support.design.widget.TextInputLayout>
Note: Si vous définissez app:errorEnabled="true"
comme attribut de la variable TextInputLayout
, sa taille ne changera pas une fois qu'une erreur sera affichée. Elle bloque donc l'espace.
Afin d’afficher l’Erreur sous la EditText
, il vous suffit d’appeler #setError
sur la TextInputLayout
(PAS sur l’enfant EditText
):
TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");
Pour masquer l'erreur et réinitialiser la teinte, appelez simplement til.setError(null)
.
Pour utiliser TextInputLayout
, vous devez ajouter ce qui suit à vos dépendances build.gradle
:
dependencies {
compile 'com.Android.support:design:25.1.0'
}
Par défaut, la ligne de la EditText
sera rouge. Si vous devez afficher une couleur différente, vous pouvez utiliser le code suivant dès que vous appelez setError
.
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
Pour l'effacer, appelez simplement la fonction clearColorFilter
, comme ceci:
editText.getBackground().clearColorFilter();
Votre EditText
devrait être enveloppé dans un TextInputLayout
<Android.support.design.widget.TextInputLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:id="@+id/tilEmail">
<EditText
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:inputType="textEmailAddress"
Android:ems="10"
Android:id="@+id/etEmail"
Android:hint="Email"
Android:layout_marginTop="10dp"
/>
</Android.support.design.widget.TextInputLayout>
Pour obtenir un message d'erreur comme vous le souhaitez, définissez error sur TextInputLayout
TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail);
if (error){
tilEmail.setError("Invalid email id");
}
Vous devez ajouter une dépendance à la bibliothèque de support de conception. Ajouter cette ligne dans vos dépendances
compile 'com.Android.support:design:22.2.0'
Appelez myTextInputLayout.setError()
au lieu de myEditText.setError()
.
Ces conteneur et confinement ont une double fonctionnalité pour les erreurs de paramétrage. La fonctionnalité dont vous avez besoin est celle du conteneur. Mais vous pourriez avoir besoin d'une version minimale de 23 pour cela.
la réponse de reVerse est excellente, mais elle n'a pas indiqué comment supprimer le type d'infobulle d'erreur flottante.
Vous aurez besoin de edittext.setError(null)
pour l'enlever.
En outre, comme quelqu'un l'a fait remarquer, vous n'avez pas besoin de TextInputLayout.setErrorEnabled(true)
mise en page
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/edittext"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="Enter something" />
</Android.support.design.widget.TextInputLayout>
Code
TextInputLayout til = (TextInputLayout) editText.getParent();
til.setError("Your input is not valid...");
editText.setError(null);
TextInputLayout til = (TextInputLayout)editText.getParent();
til.setErrorEnabled(true);
til.setError("some error..");
Si quelqu'un se trouve toujours confronté à l'erreur d'utilisation de la bibliothèque de conception de Google, comme indiqué dans la réponse, veuillez l'utiliser comme indiqué par @h_k, qui est -
Au lieu d'appeler setError sur TextInputLayout, vous pourriez utiliser setError sur EditText lui-même.