Il n'est pas nécessaire d'utiliser une bibliothèque tierce puisque Google a introduit le TextInputLayoutdans 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, EditTextvous devez simplement appeler #setErrorle 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, TextInputLayoutvous devez ajouter les éléments suivants à vos build.gradledépendances:
dependencies {
compile 'com.android.support:design:25.1.0'
}
Définition d'une couleur personnalisée
Par défaut, la ligne du EditTextsera 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 clearColorFilterfonction, comme ceci:
editText.getBackground().clearColorFilter();
EditText. Plus probablement, vous aurez besoin de quelque chose qui l'enveloppeEditTextou y ajoute autrement. Voir github.com/rengwuxian/MaterialEditText .