TextInputLayout ist eine Komponente aus der Material Components-Bibliothek für Android, die ein EditText umschließt und erweiterte Texteingabefunktionen hinzufügt. Die Hauptfunktion von TextInputLayout ist das Floating Label, das bei der Texteingabe über das Feld steigt, Platz spart und die Lesbarkeit verbessert. Zusätzlich unterstützt die Komponente die Anzeige von Fehlermeldungen, Symbole innerhalb des Feldes, einen Zeichenzähler und verschiedene Gestaltungsmöglichkeiten. Laut den Material Design Guidelines (2025) ist TextInputLayout die empfohlene Methode zur Erstellung von Textfeldern in Android-Apps, die den Material Design 3-Standards entsprechen.
Wichtige Punkte
TextInputLayout ist eine ViewGroup aus dem Paket com.google.android.material.textfield, die LinearLayout erweitert und ein EditText enthält. Die Komponente ist Teil der Material Components-Bibliothek für Android, beginnend mit Version 1.0.0. Das Hauptziel von TextInputLayout ist es, eine fertige Implementierung von Material Design-Textfeldern mit minimalem Aufwand für den Entwickler bereitzustellen.
Im Gegensatz zu einem standardmäßigen EditText verwaltet TextInputLayout die Animation des Floating Labels, das über das Attribut android:hint des inneren EditText festgelegt wird. Wenn das Feld leer ist, wird das Label als normaler Hinweis im Feld angezeigt. Sobald der Benutzer mit der Eingabe beginnt, bewegt sich das Label animiert an die obere Seite des Feldes und verkleinert sich. Laut den Material Design Guidelines (2025) verbessert diese Animation die Wahrnehmung des Formulars, da der Benutzer den Feldnamen auch nach der Dateneingabe immer sieht.
Architektonisch implementiert TextInputLayout das Dekorator-Muster: Es fängt EditText-Ereignisse ab, verwaltet die Anzeige zusätzlicher Elemente (Label, Fehler, Symbole, Zähler) und koordiniert deren Animation. Das innere EditText ist über die Methode getEditText() zugänglich und kann mit Standardattributen wie inputType, maxLines und hint konfiguriert werden.
<!-- Basic TextInputLayout markup -->
@+id/tilEmail
android:layout_width="match_parent"
android:layout_height="wrap_content">
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>
Das Floating Label ist die Hauptfunktion von TextInputLayout. Wenn das Feld leer ist, wird der Text von android:hint als normaler Platzhalter im EditText angezeigt. Wenn das Feld den Fokus erhält oder Text eingegeben wird, steigt das Label an die Oberseite von TextInputLayout, reduziert die Schriftgröße und ändert die Farbe. Dieses Verhalten löst das Problem, dass der Hinweis nach Beginn der Eingabe unsichtbar wird.
Die Konfiguration des Floating Labels erfolgt über TextInputLayout-Attribute: app:hintEnabled bestimmt, ob das Floating Label aktiviert ist (Standard true), app:hintAnimationEnabled aktiviert oder deaktiviert die Übergangsanimation, app:expandedHintEnabled erlaubt die Anzeige des Labels auch wenn das Feld leer und nicht fokussiert ist. Die Farbe des Labels in verschiedenen Zuständen wird über die Stile colorPrimary und colorControlHighlight gesteuert.
Laut Google Material Components Team (2025) ist das Floating Label besonders nützlich in Formularen mit vielen Feldern, bei denen der Benutzer den Feldnamen nach Beginn der Eingabe vergessen könnte. Im Gegensatz zu einem einfachen android:hint, das bei der Eingabe verschwindet, bleibt das Floating Label stets sichtbar und bietet Kontext für jedes Feld.
| Attribut | Beschreibung | Standard |
|---|---|---|
| hintEnabled | Aktiviert oder deaktiviert das Floating Label | true |
| hintAnimationEnabled | Aktiviert die Auf-/Abbewegungsanimation des Labels | true |
| expandedHintEnabled | Zeigt das Label auch bei leerem und unfokussiertem Feld | false |
| hintTextAppearance | Textstil des Floating Labels | App-Design |
TextInputLayout bietet ein integriertes Fehleranzeigesystem, das visuell mit dem Eingabefeld verbunden ist. Beim Setzen eines Fehlers über die Methode setError hebt die Komponente das Feld hervor (die Linien- oder Umrandungsfarbe wechselt zu Rot) und zeigt den Fehlertext unter dem Feld an. Dies macht ein separates TextView für Fehlermeldungen überflüssig.
Die Verwaltung der Fehleranzeige erfolgt über die Methoden setError(CharSequence) und setErrorEnabled(boolean). Beim Aufruf von setError mit Text wird der Fehler sofort angezeigt; beim Aufruf von setError(null) wird er ausgeblendet. TextInputLayout unterstützt auch ein benutzerdefiniertes Fehlersymbol über das Attribut app:errorIconDrawable und die Fehlerfarbverwaltung über app:errorTextColor.
Laut den Material Design Guidelines (2025) sollten Fehlermeldungen spezifisch und hilfreich sein: Statt „Ungültige Eingabe“ schreiben Sie „E-Mail muss @ enthalten“. Die Fehleranzeige sollte nach Abschluss der Eingabe erfolgen (bei Fokusverlust oder nach dem Absenden des Formulars), nicht in Echtzeit — dies reduziert den Stress des Benutzers beim Ausfüllen von Formularen.
// Programmgesteuerte Fehlereinrichtung
textInputLayout.error = "Password min 8 chars"
// Fehlerausblendung
textInputLayout.error = null
// Validierungsfehlerprüfung und -setzung
if (email.isNullOrBlank()) {
tilEmail.error = "Email is required"
} else {
tilEmail.error = null
}
TextInputLayout unterstützt die Anzeige von Symbolen sowohl am Anfang des Feldes (Start-Symbol) als auch am Ende (End-Symbol). Symbole können verschiedene Funktionen ausführen: Umschalten der Passwortsichtbarkeit, Löschen des Feldes, benutzerdefinierte Aktionen. Jeder Symboltyp wird durch ein separates Attribut gesteuert und kann über app:startIconDrawable oder app:endIconDrawale durch ein benutzerdefiniertes Symbol ersetzt werden.
Der End-Symbol-Modus wird über das Attribut app:endIconMode festgelegt, das folgende Werte annehmen kann: password_toggle — Umschalten der Passwortsichtbarkeit, clear_text — Löschen des Feldes, dropdown_menu — Pfeil für eine Dropdown-Liste, custom — benutzerdefiniertes Symbol. Bei password_toggle verwaltet TextInputLayout automatisch das Umschalten des inputType zwischen textPassword und textVisiblePassword und animiert auch das Augensymbol.
<!-- TextInputLayout with password toggle icon -->
@+id/tilPassword
android:layout_width="match_parent"
app:endIconMode="password_toggle"
app:passwordToggleTint="@color/primary">
@+id/etPassword
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
Material Components für Android bietet zwei Hauptstile für TextInputLayout: FilledBox (gefüllt) und OutlinedBox (mit Umrandung). Der Stil FilledBox hat einen farbig gefüllten Hintergrund und eine Linie unter dem Feld, die bei Fokus die Farbe wechselt. Der Stil OutlinedBox hat einen transparenten Hintergrund und eine Umrandung um das gesamte Feld, wodurch klarere Grenzen entstehen und Formulare mit vielen Feldern besser geeignet sind.
Die Wahl des Stils hängt vom App-Design ab: FilledBox wird für häufig verwendete Formulare empfohlen, da es weniger Aufmerksamkeit auf einzelne Felder lenkt. OutlinedBox ist für kurze Formulare (Anmeldung, Registrierung) zu bevorzugen, bei denen jedes Feld deutlich gekennzeichnet sein sollte. Der Stil wird über das style-Attribut in XML oder über das App-Design festgelegt.
| Eigenschaft | FilledBox | OutlinedBox |
|---|---|---|
| Hintergrund | Farbfüllung (normalerweise grau) | Transparent |
| Grenze | Linie an der Unterseite | Umrandung um das Feld |
| Fokus | Linie verdickt sich und wechselt die Farbe | Umrandung wechselt Farbe und verdickt sich |
| Empfehlung | Formulare mit häufiger Eingabe | Kurze Formulare, Betonung auf Feldern |
| Stil | Widget.MaterialComponents.TextInputLayout.FilledBox | Widget.MaterialComponents.TextInputLayout.OutlinedBox |
Material Design 3 (M3) führte aktualisierte Stile für TextInputLayout mit verbesserter Typografie, neuen Farb-Tokens und Unterstützung für dynamische Material You-Farben ein. In M3 wurde OutlinedBox zum standardmäßigen empfohlenen Stil, und FilledBox passte seine Innenabstände und Rahmenradien an die neue Spezifikation an.
Ein vollständiges Beispiel zur Implementierung eines Registrierungsformulars mit TextInputLayout, einschließlich E-Mail- und Passwortvalidierung, Fehleranzeige und Passwort-anzeigen-Symbol. Beim Drücken der Registrierungsschaltfläche werden alle Felder überprüft und entsprechende Fehlermeldungen angezeigt.
@+id/tilName
app:boxBackgroundMode="outlined">
@+id/etName
android:hint="Name" />
</...TextInputLayout>
@+id/tilRegEmail
app:boxBackgroundMode="outlined">
@+id/etRegEmail
android:hint="Email"
android:inputType="textEmailAddress" />
</...TextInputLayout>
@+id/tilRegPassword
app:boxBackgroundMode="outlined"
app:endIconMode="password_toggle">
@+id/etRegPassword
android:hint="Password"
android:inputType="textPassword" />
</...TextInputLayout>
private fun validateForm(): Boolean {
var isValid = true
if (etName.text.isNullOrBlank()) {
tilName.error = "Enter your name"
isValid = false
} else {
tilName.error = null
}
val email = etRegEmail.text.toString()
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
tilRegEmail.error = "Invalid email format"
isValid = false
} else {
tilRegEmail.error = null
}
val password = etRegPassword.text.toString()
if (password.length < 8) {
tilRegPassword.error = "Password min 8 chars"
isValid = false
} else {
tilRegPassword.error = null
}
return isValid
}
Häufig gestellte Fragen
TextInputLayout ist ab Version 1.0.0 der Bibliothek com.google.android.material verfügbar. Für Material Design 3-Funktionen verwenden Sie Version 1.6.0 und höher. Fügen Sie implementation „com.google.android.material:material:1.12.0“ in der build.gradle des Moduls hinzu.
Die Farbe des Floating Labels im Fokuszustand wird über das Attribut app:hintTextColor oder über das Design mit colorPrimary gesteuert. Für verschiedene Zustände (Fokus, Fehler, deaktiviert) verwenden Sie einen Selektor in res/color/ oder die Attribute boxStrokeColor, errorTextColor aus der Material Components-Bibliothek.
Setzen Sie das Attribut app:counterEnabled=„true“ und geben Sie die maximale Anzahl von Zeichen mit app:counterMaxLength=„100“ an. TextInputLayout zeigt automatisch den Zähler am unteren Rand des Feldes an (z. B. „25/100“). Die Zählerfarbe kann über app:counterTextColor und bei Überschreitung des Limits über app:counterOverflowTextColor konfiguriert werden.
FilledBox — Hintergrund farbig gefüllt, Betonung auf der unteren Linie. Nimmt weniger visuellen Raum ein. OutlinedBox — transparenter Hintergrund mit Umrandung um das Feld, deutlichere Grenzen. FilledBox wird für häufige Eingabefelder empfohlen, OutlinedBox für kurze Formulare, bei denen die Klarheit jedes Feldes wichtig ist.
Ja, setzen Sie das Attribut app:hintEnabled=„false“, um das Floating Label zu deaktivieren. In diesem Fall funktioniert TextInputLayout als normaler Wrapper für EditText, behält die Fehler-, Symbol- und Zeichenzählerfunktionalität, jedoch ohne Label-Animation. Nützlich für Felder, bei denen kein Hinweis benötigt wird oder ein benutzerdefiniertes Label verwendet wird.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch