Antworten:
Es ist nicht erforderlich, eine Drittanbieter-Bibliothek zu verwenden, da Google diese TextInputLayoutals Teil der Bibliothek eingeführt hat design-support-library.
Nach einem einfachen Beispiel:
<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>
Hinweis: Wenn Sie app:errorEnabled="true"als Attribut für TextInputLayoutfestlegen, wird die Größe nicht geändert, sobald ein Fehler angezeigt wird. Dadurch wird der Platz im Grunde genommen blockiert.
Um den Fehler unter EditTextanzuzeigen, müssen Sie nur #setErrordie TextInputLayout(NICHT das Kind EditText) anrufen :
TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");

Um den Fehler auszublenden und den Farbton zurückzusetzen, rufen Sie einfach an til.setError(null).
Um das zu verwenden TextInputLayout, müssen Sie Ihren build.gradleAbhängigkeiten Folgendes hinzufügen :
dependencies {
compile 'com.android.support:design:25.1.0'
}
Standardmäßig ist die Zeile von EditTextrot. Wenn Sie eine andere Farbe anzeigen müssen, können Sie den folgenden Code verwenden, sobald Sie anrufen setError.
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
Um es zu löschen, rufen Sie einfach die clearColorFilterFunktion wie folgt auf:
editText.getBackground().clearColorFilter();
textInputLayout.setError("Error messsage")die Farbe des aufrufen, EditTextsollte rot werden. Um es zurückzusetzen, reicht es aus, anzurufen textInputLayout.setError(null).
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);wird mit der neuesten Support-Bibliothek nicht mehr benötigt
EditText, nicht auf dem aufgerufen habe TextInputLayout. Ich sah diese Antwort und konnte immer noch nicht herausfinden, was ich ändern musste. Sehr leicht zu übersehen.
Sie EditTextsollten in ein eingewickelt seinTextInputLayout
<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>
Um eine gewünschte Fehlermeldung zu erhalten, setzen Sie error auf TextInputLayout
TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail);
if (error){
tilEmail.setError("Invalid email id");
}
Sie sollten die Abhängigkeit der Designunterstützungsbibliothek hinzufügen. Fügen Sie diese Zeile in Ihre Gradle-Abhängigkeiten ein
compile 'com.android.support:design:22.2.0'
Die Antwort von reVerse ist großartig, aber es wurde nicht darauf hingewiesen, wie der Tooltip für schwebende Fehler entfernt werden kann
Sie müssen edittext.setError(null)das entfernen.
Auch, wie jemand betonte, brauchen Sie nichtTextInputLayout.setErrorEnabled(true)
Layout
<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..");
private EditText edt_firstName;
private String firstName;
edt_firstName = findViewById(R.id.edt_firstName);
private void validateData() {
firstName = edt_firstName.getText().toString().trim();
if (!firstName.isEmpty(){
//here api call for ....
}else{
if (firstName.isEmpty()) {
edt_firstName.setError("Please Enter First Name");
edt_firstName.requestFocus();
}
}
}
EditText. Wahrscheinlicher ist, dass Sie etwas benötigen, das es umschließtEditTextoder auf andere Weise ergänzt. Siehe github.com/rengwuxian/MaterialEditText .