TextInputLayout: mi ez, Material Design és beállítás Androidban

Szerző: IT Sectr Megjelenés: 2026-07-07 Olvasási idő: 9 perc

TextInputLayout — egy komponens a Material Components könyvtárból Androidhoz, amely beburkolja az EditText-et és kibővített szövegbeviteli lehetőségeket ad hozzá. A TextInputLayout fő funkciója a lebegő címke (floating label), amely szövegbevitelkor a mező fölé emelkedik, helyet takarítva meg és javítva az olvashatóságot. Ezenkívül a komponens támogatja a hibaüzenetek megjelenítését, ikonokat a mezőn belül, karakterszámlálót és különböző megjelenési stílusokat. A Material Design Guidelines (2025) szerint a TextInputLayout az ajánlott módja a szövegmezők létrehozásának Android-alkalmazásokban, amelyek megfelelnek a Material Design 3 szabványoknak.

Főbb pontok

  • TextInputLayout — burkoló az EditText-hez a Material Components-ből floating label-lel.
  • Floating label — a címke szövegbevitelkor a mező fölé emelkedik, helyet takarítva a képernyőn.
  • Hibák — beépített hibaüzenet-megjelenítés a beviteli mező alatt.
  • Ikonok — bal és jobb oldali ikonok támogatása műveletekhez (jelszó mutatása, törlés).
  • Stílusok — két fő stílus: FilledBox és OutlinedBox, valamint egyéni témák.

Mi az a TextInputLayout Androidban

TextInputLayout — egy ViewGroup a com.google.android.material.textfield csomagból, amely kiterjeszti a LinearLayout-ot és egy EditText-et tartalmaz. A komponens része a Material Components könyvtárnak Androidhoz, az 1.0.0 verziótól kezdve. A TextInputLayout fő feladata, hogy kész implementációt nyújtson a Material Design Text Fields-hez minimális fejlesztői erőfeszítéssel.

A szabványos EditText-től eltérően a TextInputLayout kezeli a lebegő címke animációját, amely a belső EditText android:hint attribútumán keresztül van beállítva. Amikor a mező üres, a címke a mező belsejében jelenik meg szokásos súgóként. Amint a felhasználó elkezd gépelni, a címke animáltan a mező felső részébe mozog, méretét csökkentve. A Material Design Guidelines (2025) szerint egy ilyen animáció javítja az űrlap érzékelését, mivel a felhasználó mindig látja a mező nevét, még az adatok beírása után is.

Architekturálisan a TextInputLayout a dekorátor mintát implementálja: elkapja az EditText eseményeit, kezeli a kiegészítő elemek (címke, hiba, ikonok, számláló) megjelenítését és koordinálja azok animációját. A belső EditText a getEditText() metóduson keresztül érhető el, és szabványos attribútumokkal konfigurálható, beleértve az inputType, maxLines és hint elemeket.

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 és beállítása

Floating label (lebegő címke) — a TextInputLayout kulcsfontosságú képessége. Amikor a mező üres, az android:hint szövege az EditText-ben jelenik meg szokásos súgóként. Fókuszba kerüléskor vagy szöveg beírásakor a címke a TextInputLayout felső részébe emelkedik, csökkentve a betűméretet és megváltoztatva a színt. Ez a viselkedés megoldja a súgó láthatatlanságának problémáját a gépelés megkezdése után.

A floating label beállítása a TextInputLayout attribútumain keresztül történik: az app:hintEnabled meghatározza, hogy a lebegő címke be van-e kapcsolva (alapértelmezett true), az app:hintAnimationEnabled be- vagy kikapcsolja az átmenet animációját, az app:expandedHintEnabled lehetővé teszi a címke megjelenítését akkor is, ha a mező üres és nincs fókuszban. A címke színét különböző állapotokban a colorPrimary és colorControlHighlight stílusok kezelik.

A Google Material Components Team (2025) szerint a floating label különösen hasznos a sok mezőt tartalmazó űrlapoknál, ahol a felhasználó elfelejtheti a mező nevét a gépelés megkezdése után. Az egyszerű android:hint-tel ellentétben, amely eltűnik gépeléskor, a floating label mindig látható marad, kontextust biztosítva minden mezőhöz.

AttribútumLeírásAlapértelmezett
hintEnabledBe- vagy kikapcsolja a lebegő címkéttrue
hintAnimationEnabledBe- vagy kikapcsolja a címke emelkedés/süllyedés animációjáttrue
expandedHintEnabledMegjeleníti a címkét akkor is, ha a mező üres és nincs fókuszbanfalse
hintTextAppearanceA lebegő címke szövegének stílusaAlkalmazás témája

Hibák megjelenítése a TextInputLayout-ban

TextInputLayout beépített hiba-megjelenítési rendszert biztosít, amely vizuálisan integrálódik a beviteli mezővel. Hiba beállításakor az error metóduson keresztül, a komponens kiemeli a mezőt (a vonal vagy keret színe pirosra változik), és megjeleníti a hiba szövegét a mező alatt. Ez helyettesíti a külön TextView szükségességét a hibaüzenetekhez.

A hibák megjelenítésének kezelése a setError(CharSequence) és setErrorEnabled(boolean) metódusokon keresztül történik. A setError szöveggel történő meghívásakor a hiba azonnal megjelenik; a setError(null) meghívásakor — elrejtődik. A TextInputLayout támogatja az egyéni hibaikont is az app:errorIconDrawable attribútumon keresztül, valamint a hiba színének kezelését az app:errorTextColor segítségével.

A Material Design Guidelines (2025) szerint a hibaüzeneteknek konkrétnak és hasznosnak kell lenniük: az „Érvénytelen bevitel" helyett írja, hogy „Az emailnek tartalmaznia kell a @ jelet". A hiba megjelenítésének a bevitel befejezése után kell történnie (fókusz elvesztése vagy az űrlap elküldése után), nem valós időben — ez csökkenti a felhasználó stresszét az űrlap kitöltésekor.

kotlin
// Programozott hibabeállítás
textInputLayout.error = "Password min 8 chars"

// Hiba elrejtése
textInputLayout.error = null

// Érvényesítési hiba ellenőrzése és beállítása
if (email.isNullOrBlank()) {
    tilEmail.error = "Email is required"
} else {
    tilEmail.error = null
}

TextInputLayout ikonok és műveletek

TextInputLayout támogatja az ikonok megjelenítését mind a mező elején (start icon), mind a végén (end icon). Az ikonok különböző funkciókat láthatnak el: jelszó láthatóságának váltása, mező törlése, egyéni művelet. Minden ikontípust egy külön attribútum kezel, és helyettesíthető egyéni ikonnal az app:startIconDrawable vagy app:endIconDrawable attribútumon keresztül.

End icon mode az app:endIconMode attribútumon keresztül van beállítva, amely a következő értékeket veheti fel: password_toggle — jelszó láthatóságának váltása, clear_text — mező törlése, dropdown_menu — nyíl a legördülő menühöz, custom — egyéni ikon. A password_toggle esetében a TextInputLayout automatikusan kezeli az inputType váltását a textPassword és textVisiblePassword között, valamint animálja a szem ikont.

  • password_toggle — szem ikon a jelszó mutatásához/elrejtéséhez, beépített animáció.
  • clear_text — kereszt a mező törléséhez, szöveg jelenlétekor jelenik meg.
  • dropdown_menu — nyíl az Exposed Dropdown Menu-hoz (Material Design 3).
  • custom — bármilyen egyéni ikon a setEndIconOnClickListener-en keresztüli kezeléssel.
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 stílusok: FilledBox és OutlinedBox

A Material Components Androidhoz két fő stílust biztosít a TextInputLayout számára: FilledBox (kitöltött) és OutlinedBox (körvonalazott). A FilledBox stílus színes háttérrel és a mező alatti vonallal rendelkezik, amely fókuszban színt vált. Az OutlinedBox stílus átlátszó háttérrel és a teljes mező körüli körvonallal rendelkezik, ami tisztább határokat hoz létre, és jobban megfelel a sok mezőt tartalmazó űrlapokhoz.

A stílus kiválasztása az alkalmazás design-jától függ: FilledBox ajánlott a gyakran használt űrlapokhoz, mivel kevesebb figyelmet vonz az egyes mezőkre. OutlinedBox előnyösebb rövid űrlapokhoz (bejelentkezés, regisztráció), ahol minden mezőnek egyértelműen jelölve kell lennie. A stílus a style attribútumon keresztül XML-ben vagy az alkalmazás témáján keresztül állítható be.

JellemzőFilledBoxOutlinedBox
HáttérSzínkitöltés (általában szürke)Átlátszó
HatárVonal alulKörvonal a mező körül
FókuszA vonal vastagabb lesz és színt váltA körvonal színt vált és vastagabb lesz
AjánlásGyakori bevitelű űrlapokRövid űrlapok, hangsúly a mezőkön
StílusWidget.MaterialComponents.TextInputLayout.FilledBoxWidget.MaterialComponents.TextInputLayout.OutlinedBox

A Material Design 3 (M3) frissített stílusokat vezetett be a TextInputLayout számára javított tipográfiával, új szín tokenekkel és a Material You dinamikus színeinek támogatásával. Az M3-ban az OutlinedBox lett az ajánlott alapértelmezett stílus, a FilledBox pedig igazította a térközöket és a lekerekítési sugarat az új specifikációhoz.

Kódpéldák TextInputLayout-tal

Teljes példa egy regisztrációs űrlap implementációjára TextInputLayout-tal, beleértve az email és jelszó validálását, hibajelzést és jelszómutatás ikont. A regisztrációs gomb megnyomásakor az összes mező ellenőrzésre kerül, és a megfelelő hibaüzenetek jelennek meg.

A regisztrációs űrlap XML jelölése

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>

Űrlap validálása Kotlinban

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
}

Gyakran Ismételt Kérdések

Milyen Material Components verzió szükséges a TextInputLayout-hoz?

TextInputLayout elérhető a com.google.android.material könyvtár 1.0.0 verziójától kezdve. A Material Design 3 funkciókhoz használja az 1.6.0 és újabb verziót. Csatlakoztatás: implementation „com.google.android.material:material:1.12.0" a modul build.gradle-jében.

Hogyan változtatható meg a lebegő címke színe fókuszban?

A lebegő címke színét fókusz állapotban az app:hintTextColor attribútum vagy a témán keresztül a colorPrimary segítségével lehet kezelni. Különböző állapotokhoz (fókusz, hiba, disabled) használjon szelektort a res/color/-ban vagy a boxStrokeColor, errorTextColor attribútumokat a Material Components könyvtárból.

Hogyan adható karakterszámláló a TextInputLayout-hoz?

Állítsa be az app:counterEnabled="true" attribútumot, és adja meg a maximális karakterszámot a app:counterMaxLength="100" segítségével. A TextInputLayout automatikusan megjeleníti a számlálót a mező alján (pl. „25/100"). A számláló színe az app:counterTextColor és app:counterOverflowTextColor segítségével konfigurálható a limit túllépéséhez.

Mi a különbség a FilledBox és OutlinedBox stílusok között?

FilledBox — színes háttér, hangsúly az alsó vonalon. Kevesebb vizuális helyet foglal. OutlinedBox — átlátszó háttér körvonallal a mező körül, láthatóbb határok. FilledBox gyakran használt mezőkhöz ajánlott, OutlinedBox rövid űrlapokhoz, ahol az egyes mezők egyértelműsége fontos.

Használható a TextInputLayout Floating Label nélkül?

Igen, állítsa be az app:hintEnabled="false" attribútumot a lebegő címke kikapcsolásához. Ebben az esetben a TextInputLayout szokásos burkolóként működik az EditText számára, megtartva a hiba-, ikon- és karakterszámláló funkciókat, de a címke animációja nélkül. Hasznos olyan mezőkhöz, ahol nincs szükség hint-re vagy egyéni címkét használnak.

Összefoglalás

  • TextInputLayout — burkoló az EditText-hez a Material Components-ből floating label-lel, hibákkal és ikonokkal.
  • Floating label megoldja a súgó elrejtésének problémáját gépeléskor — a címke felemelkedik és látható marad.
  • Hibák a mező alatt jelennek meg piros szegélykiemeléssel, külön TextView nélkül.
  • Ikonok endIconMode támogatja a password_toggle, clear_text, dropdown_menu és custom elemeket.
  • FilledBox és OutlinedBox stílusok — a beviteli mező két fő megjelenési változata.
  • Karakterszámláló a counterEnabled és counterMaxLength segítségével aktiválható.
  • Material Design 3 dinamikus Material You színeket és frissített OutlinedBox stílusokat ad hozzá.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is