TextInputLayout: vad är det, Material Design och konfiguration i Android

Författare: IT Sectr Publicerad: 2026-07-07 Lästid: 9 min

TextInputLayout — är en komponent från Material Components-biblioteket för Android som omsluter EditText och lägger till utökade möjligheter för textinmatning. Huvudfunktionen för TextInputLayout är den flytande etiketten (floating label), som höjs över fältet vid textinmatning, sparar utrymme och förbättrar läsbarheten. Dessutom stöder komponenten visning av felmeddelanden, ikoner i fältet, en teckenräknare och olika visningsstilar. Enligt Material Design Guidelines (2025) är TextInputLayout det rekommenderade sättet att skapa textfält i Android-applikationer som följer Material Design 3-standarderna.

Huvudpunkter

  • TextInputLayout — omslag för EditText från Material Components med floating label.
  • Floating label — etiketten höjs över fältet vid textinmatning, sparar skärmutrymme.
  • Fel — inbyggd visning av felmeddelanden under inmatningsfältet.
  • Ikoner — stöd för vänster- och högerikoner för åtgärder (visa lösenord, rensa).
  • Stilar — två huvudstilar: FilledBox och OutlinedBox, samt anpassade teman.

Vad är TextInputLayout i Android

TextInputLayout — är en ViewGroup från paketet com.google.android.material.textfield som utökar LinearLayout och innehåller en EditText. Komponenten är en del av Material Components-biblioteket för Android, från version 1.0.0. Huvuduppgiften för TextInputLayout är att tillhandahålla en färdig implementering av Material Design Text Fields med minimal ansträngning från utvecklaren.

Till skillnad från standard EditText hanterar TextInputLayout animeringen av den flytande etiketten, som ställs in via android:hint-attributet för den interna EditText. När fältet är tomt visas etiketten inuti fältet som en vanlig ledtråd. Så snart användaren börjar skriva flyttas etiketten animerat till den övre delen av fältet och blir mindre. Enligt Material Design Guidelines (2025) förbättrar en sådan animering uppfattningen av formuläret, eftersom användaren alltid ser fältets namn, även efter att ha angett data.

Arkitektoniskt implementerar TextInputLayout dekoratörmönstret: det fångar upp EditText-händelser, hanterar visningen av ytterligare element (etikett, fel, ikoner, räknare) och samordnar deras animering. Den interna EditText är tillgänglig via metoden getEditText() och kan konfigureras med standardattribut, inklusive inputType, maxLines och hint.

xml
<!-- 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>

Floating label och dess konfiguration

Floating label (flytande etikett) — är huvudfunktionen i TextInputLayout. När fältet är tomt visas texten från android:hint i EditText som en vanlig ledtråd. Vid fokus eller vid textinmatning höjs etiketten till den övre delen av TextInputLayout, minskar teckenstorleken och ändrar färg. Detta beteende löser problemet med att ledtråden blir osynlig efter att inmatningen påbörjats.

Konfiguration av floating label görs via TextInputLayout-attribut: app:hintEnabled bestämmer om den flytande etiketten är aktiverad (standard true), app:hintAnimationEnabled aktiverar eller inaktiverar övergångsanimationen, app:expandedHintEnabled tillåter visning av etiketten även när fältet är tomt och utan fokus. Etikettens färg i olika tillstånd hanteras via stilarna colorPrimary och colorControlHighlight.

Enligt Google Material Components Team (2025) är floating label särskilt användbar i formulär med många fält, där användaren kan glömma fältets namn efter att ha börjat skriva. Till skillnad från enkel android:hint som försvinner vid inmatning, förblir floating label alltid synlig och ger sammanhang för varje fält.

AttributBeskrivningStandard
hintEnabledAktiverar eller inaktiverar den flytande etikettentrue
hintAnimationEnabledAktiverar animering av etikettens höjning/sänkningtrue
expandedHintEnabledVisar etiketten även när fältet är tomt och utan fokusfalse
hintTextAppearanceStil för texten i den flytande etikettenApplikationens tema

Visning av fel i TextInputLayout

TextInputLayout tillhandahåller ett inbyggt system för felvisning som är visuellt integrerat med inmatningsfältet. Vid inställning av ett fel via metoden error, markerar komponenten fältet (färgen på linjen eller konturen ändras till röd) och visar feltexten under fältet. Detta ersätter behovet av en separat TextView för felmeddelanden.

Hantering av felvisning görs via metoderna setError(CharSequence) och setErrorEnabled(boolean). Vid anrop av setError med text visas felet omedelbart; vid anrop av setError(null) — döljs det. TextInputLayout stöder också en anpassad felikon via attributet app:errorIconDrawable och hantering av fel färg via app:errorTextColor.

Enligt Material Design Guidelines (2025) ska felmeddelanden vara specifika och användbara: skriv i stället för "Ogiltig inmatning" "E-post måste innehålla @". Felvisning bör ske efter att inmatningen slutförts (efter fokusförlust eller efter att formuläret skickats), inte i realtid — detta minskar användarens stress vid ifyllning av formuläret.

kotlin
// Programmatisk felinställning
textInputLayout.error = "Password min 8 chars"

// Fel döljning
textInputLayout.error = null

// Valideringsfel kontroll och inställning
if (email.isNullOrBlank()) {
    tilEmail.error = "Email is required"
} else {
    tilEmail.error = null
}

Ikoner och åtgärder i TextInputLayout

TextInputLayout stöder visning av ikoner både i början av fältet (start icon) och i slutet (end icon). Ikoner kan utföra olika funktioner: växla lösenordssynlighet, rensa fältet, anpassad åtgärd. Varje ikontyp hanteras av ett separat attribut och kan ersättas med en anpassad ikon via attributet app:startIconDrawable eller app:endIconDrawable.

End icon mode ställs in via attributet app:endIconMode, som kan ta värdena: password_toggle — växling av lösenordssynlighet, clear_text — rensning av fältet, dropdown_menu — pil för rullgardinsmeny, custom — anpassad ikon. För password_toggle hanterar TextInputLayout automatiskt växlingen av inputType mellan textPassword och textVisiblePassword, och animerar även ögonikonen.

  • password_toggle — ögonikon för att visa/dölja lösenord, inbyggd animering.
  • clear_text — kryss för att rensa fältet, visas när text finns.
  • dropdown_menu — pil för Exposed Dropdown Menu (Material Design 3).
  • custom — valfri anpassad ikon med hantering via setEndIconOnClickListener.
xml
<!-- 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>

TextInputLayout-stilar: FilledBox och OutlinedBox

Material Components för Android tillhandahåller två huvudstilar för TextInputLayout: FilledBox (fylld) och OutlinedBox (med kontur). Stilen FilledBox har en färgad bakgrund och en linje under fältet som ändrar färg vid fokus. Stilen OutlinedBox har en transparent bakgrund och en kontur runt hela fältet, vilket skapar tydligare gränser och passar bättre för formulär med många fält.

Valet av stil beror på applikationens design: FilledBox rekommenderas för ofta använda formulär, eftersom det drar mindre uppmärksamhet till enskilda fält. OutlinedBox föredras för korta formulär (inloggning, registrering), där varje fält måste vara tydligt markerat. Stilen ställs in via style-attributet i XML eller via applikationens tema.

EgenskapFilledBoxOutlinedBox
BakgrundFärgfyllning (vanligtvis grå)Transparent
GränsLinje längst nerKontur runt fältet
FokusLinjen blir tjockare och ändrar färgKonturen ändrar färg och blir tjockare
RekommendationFormulär med frekvent inmatningKorta formulär, betoning på fält
StilWidget.MaterialComponents.TextInputLayout.FilledBoxWidget.MaterialComponents.TextInputLayout.OutlinedBox

Material Design 3 (M3) introducerade uppdaterade stilar för TextInputLayout med förbättrad typografi, nya färgtoken och stöd för dynamiska Material You-färger. I M3 blev OutlinedBox den rekommenderade standardstilen och FilledBox anpassade mellanrum och avrundningsradie till den nya specifikationen.

Kodexempel med TextInputLayout

Ett komplett exempel på implementering av ett registreringsformulär med TextInputLayout, inklusive validering av e-post och lösenord, felvisning och ikon för lösenordsvisning. När registreringsknappen trycks kontrolleras alla fält och motsvarande felmeddelanden visas.

XML-markering av registreringsformuläret

xml
@+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>

Formulärvalidering i Kotlin

kotlin
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
}

Vanliga frågor

Vilken version av Material Components behövs för TextInputLayout?

TextInputLayout är tillgängligt från version 1.0.0 av com.google.android.material-biblioteket. För Material Design 3-funktioner, använd version 1.6.0 och högre. Anslutning: implementation "com.google.android.material:material:1.12.0" i modulens build.gradle.

Hur ändrar man färgen på den flytande etiketten vid fokus?

Färgen på den flytande etiketten i fokustillstånd hanteras av attributet app:hintTextColor eller via temat med colorPrimary. För olika tillstånd (fokus, fel, inaktiverad) använd en väljare i res/color/ eller attributen boxStrokeColor, errorTextColor från Material Components-biblioteket.

Hur lägger man till en teckenräknare i TextInputLayout?

Ställ in attributet app:counterEnabled="true" och ange maximalt antal tecken via app:counterMaxLength="100". TextInputLayout visar automatiskt räknaren längst ner i fältet (t.ex. "25/100"). Räknarens färg kan konfigureras via app:counterTextColor och app:counterOverflowTextColor för överskridande av gränsen.

Vad är skillnaden mellan stilarna FilledBox och OutlinedBox?

FilledBox — färgad bakgrund, betoning på den nedre linjen. Tar mindre visuellt utrymme. OutlinedBox — transparent bakgrund med kontur runt fältet, mer synliga gränser. FilledBox rekommenderas för ofta använda fält, OutlinedBox för korta formulär där tydligheten i varje fält är viktig.

Kan TextInputLayout användas utan Floating Label?

Ja, ställ in attributet app:hintEnabled="false" för att inaktivera den flytande etiketten. I detta fall fungerar TextInputLayout som ett vanligt omslag för EditText, med bibehållen funktionalitet för fel, ikoner och teckenräknare, men utan etikettanimering. Användbart för fält där ledtråd inte behövs eller en anpassad etikett används.

Sammanfattning

  • TextInputLayout — omslag för EditText från Material Components med floating label, fel och ikoner.
  • Floating label löser problemet med att ledtråden döljs vid inmatning — etiketten höjs och förblir synlig.
  • Fel visas under fältet med röd kantmarkering, utan separat TextView.
  • Ikoner endIconMode stöder password_toggle, clear_text, dropdown_menu och custom.
  • Stilarna FilledBox och OutlinedBox — två huvudvarianter av inmatningsfältets utseende.
  • Teckenräknare aktiveras via counterEnabled och counterMaxLength.
  • Material Design 3 lägger till dynamiska Material You-färger och uppdaterade OutlinedBox-stilar.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också