Il n'est pas nécessaire d'utiliser une bibliothèque tierce puisque Google a introduit le TextInputLayout
dans le cadre du design-support-library
.
En suivant un exemple basique:
Disposition
<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>
Remarque: en définissant app:errorEnabled="true"
comme attribut de TextInputLayout
, sa taille ne changera pas une fois qu'une erreur est affichée - donc cela bloque essentiellement l'espace.
Code
Afin d'afficher l'erreur ci-dessous, EditText
vous devez simplement appeler #setError
le TextInputLayout
(PAS sur l'enfant EditText
):
TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");
Résultat
Pour masquer l'erreur et réinitialiser la teinte, appelez simplement til.setError(null)
.
Remarque
Pour utiliser le, TextInputLayout
vous devez ajouter les éléments suivants à vos build.gradle
dépendances:
dependencies {
compile 'com.android.support:design:25.1.0'
}
Définition d'une couleur personnalisée
Par défaut, la ligne du EditText
sera rouge. Si vous avez besoin d'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 clearColorFilter
fonction, comme ceci:
editText.getBackground().clearColorFilter();
EditText
. Plus probablement, vous aurez besoin de quelque chose qui l'enveloppeEditText
ou y ajoute autrement. Voir github.com/rengwuxian/MaterialEditText .