Antworten:
Es ist nicht erforderlich, eine Drittanbieter-Bibliothek zu verwenden, da Google diese TextInputLayout
als 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 TextInputLayout
festlegen, wird die Größe nicht geändert, sobald ein Fehler angezeigt wird. Dadurch wird der Platz im Grunde genommen blockiert.
Um den Fehler unter EditText
anzuzeigen, müssen Sie nur #setError
die 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.gradle
Abhängigkeiten Folgendes hinzufügen :
dependencies {
compile 'com.android.support:design:25.1.0'
}
Standardmäßig ist die Zeile von EditText
rot. 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 clearColorFilter
Funktion wie folgt auf:
editText.getBackground().clearColorFilter();
textInputLayout.setError("Error messsage")
die Farbe des aufrufen, EditText
sollte 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 EditText
sollten 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ßtEditText
oder auf andere Weise ergänzt. Siehe github.com/rengwuxian/MaterialEditText .