TextInputLayout: bu nədir, Material Design və Android-də konfiqurasiya

Müəllif: IT Sectr Dərc olunub: 2026-07-07 Oxuma vaxtı: 9 dəq

TextInputLayout — Android üçün Material Components kitabxanasından olan komponentdir, EditText-i əhatə edir və mətn daxil etmək üçün genişləndirilmiş imkanlar əlavə edir. TextInputLayout-un əsas funksiyası üzən etiketdir (floating label), mətn daxil edərkən sahənin üzərinə qalxaraq yerə qənaət edir və oxunaqlılığı yaxşılaşdırır. Əlavə olaraq komponent xəta mesajlarının göstərilməsini, sahə daxilində ikonları, simvol sayğacını və müxtəlif üslub variantlarını dəstəkləyir. Material Design Guidelines (2025)-ə görə, TextInputLayout Material Design 3 standartlarına uyğun Android tətbiqlərində mətn sahələrinin yaradılması üçün tövsiyə olunan üsuldur.

Əsas məqamlar

  • TextInputLayout — Material Components-dən floating label ilə EditText üçün örtük.
  • Floating label — mətn daxil edərkən etiket sahənin üzərinə qalxır, ekranda yerə qənaət edir.
  • Xətalar — daxiletmə sahəsinin altında xəta mesajlarının daxili göstərilməsi.
  • İkonlar — hərəkətlər üçün sol və sağ ikonların dəstəyi (parolu göstər, təmizlə).
  • Üslublar — iki əsas üslub: FilledBox və OutlinedBox, həmçinin fərdi mövzular.

Android-də TextInputLayout nədir

TextInputLayout — com.google.android.material.textfield paketindən olan ViewGroup-dur, LinearLayout-u genişləndirir və daxilində EditText saxlayır. Komponent Android üçün Material Components kitabxanasının tərkib hissəsidir, 1.0.0 versiyasından başlayaraq. TextInputLayout-un əsas vəzifəsi Material Design Text Fields-in hazır implementasiyasını proqramçının minimal səyi ilə təmin etməkdir.

Standart EditText-dən fərqli olaraq, TextInputLayout daxili EditText-in android:hint atributu vasitəsilə təyin olunan üzən etiketin animasiyasını idarə edir. Sahə boş olduqda, etiket sahənin içərisində adi ipucu kimi göstərilir. İstifadəçi mətn daxil etməyə başlayan kimi, etiket animasiya ilə sahənin yuxarı hissəsinə keçir, ölçüsü kiçilir. Material Design Guidelines (2025)-ə görə, belə animasiya formanın qavranılmasını yaxşılaşdırır, çünki istifadəçi məlumat daxil etdikdən sonra belə sahənin adını həmişə görür.

Arxitektura baxımından TextInputLayout dekorator nümunəsini tətbiq edir: EditText hadisələrini ələ keçirir, əlavə elementlərin (etiket, xəta, ikonlar, sayğac) göstərilməsini idarə edir və onların animasiyasını koordinasiya edir. Daxili EditText getEditText() metodu vasitəsilə əldə edilə bilər və inputType, maxLines və hint daxil olmaqla standart atributlarla konfiqurasiya edilə bilər.

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 və onun konfiqurasiyası

Floating label (üzən etiket) — TextInputLayout-un əsas imkanıdır. Sahə boş olduqda, android:hint mətni EditText-in daxilində adi ipucu kimi göstərilir. Fokus alındıqda və ya mətn daxil edildikdə, etiket TextInputLayout-un yuxarı hissəsinə qalxır, şrift ölçüsünü kiçildir və rəngini dəyişir. Bu davranış daxiletmə başladıqdan sonra ipucunun görünməməsi problemini həll edir.

Floating label-in konfiqurasiyası TextInputLayout atributları vasitəsilə həyata keçirilir: app:hintEnabled üzən etiketin aktiv olub-olmadığını müəyyən edir (standart true), app:hintAnimationEnabled keçid animasiyasını aktivləşdirir və ya söndürür, app:expandedHintEnabled sahə boş və fokusda olmasa belə etiketin göstərilməsinə icazə verir. Müxtəlif vəziyyətlərdə etiketin rəngi colorPrimary və colorControlHighlight üslubları vasitəsilə idarə olunur.

Google Material Components Team (2025)-ə görə, floating label çox sayda sahəsi olan formalarda xüsusilə faydalıdır, burada istifadəçi daxiletməyə başladıqdan sonra sahənin adını unuda bilər. Daxiletmə zamanı yoxa çıxan sadə android:hint-dən fərqli olaraq, floating label həmişə görünən qalır, hər bir sahə üçün kontekst təmin edir.

AtributTəsvirStandart
hintEnabledÜzən etiketi aktivləşdirir və ya söndürürtrue
hintAnimationEnabledEtiketin qalxma/enmə animasiyasını aktivləşdirirtrue
expandedHintEnabledSahə boş və fokusda olmasa belə etiketi göstərirfalse
hintTextAppearanceÜzən etiket mətninin üslubuTətbiq mövzusu

TextInputLayout-da xəta göstərilməsi

TextInputLayout daxiletmə sahəsi ilə vizual olaraq inteqrasiya olunmuş daxili xəta göstərmə sistemi təmin edir. error metodu vasitəsilə xəta təyin edildikdə, komponent sahəni vurğulayır (xəttin və ya konturun rəngi qırmızıya dəyişir) və xəta mətnini sahənin altında göstərir. Bu, xəta mesajları üçün ayrıca TextView-ə ehtiyacı aradan qaldırır.

Xəta göstərilməsinin idarə edilməsi setError(CharSequence) və setErrorEnabled(boolean) metodları vasitəsilə həyata keçirilir. setError mətnlə çağırıldıqda xəta dərhal göstərilir; setError(null) çağırıldıqda — gizlənir. TextInputLayout həmçinin app:errorIconDrawable atributu vasitəsilə fərdi xəta ikonasını və app:errorTextColor vasitəsilə xəta rənginin idarə edilməsini dəstəkləyir.

Material Design Guidelines (2025)-ə görə, xəta mesajları konkret və faydalı olmalıdır: "Yanlış daxiletmə" əvəzinə "Email @ işarəsini ehtiva etməlidir" yazın. Xəta göstərilməsi daxiletmə tamamlandıqdan sonra (fokus itirildikdə və ya forma göndərildikdən sonra) baş verməlidir, real vaxtda deyil — bu, formanı doldurarkən istifadəçinin stressini azaldır.

kotlin
// Proqram xətasının qurulması
textInputLayout.error = "Password min 8 chars"

// Xətanın gizlədilməsi
textInputLayout.error = null

// Validatorinq xətasının yoxlanılması və təyin edilməsi
if (email.isNullOrBlank()) {
    tilEmail.error = "Email is required"
} else {
    tilEmail.error = null
}

TextInputLayout ikonları və hərəkətləri

TextInputLayout həm sahənin əvvəlində (start icon), həm də sonunda (end icon) ikonların göstərilməsini dəstəkləyir. İkonlar müxtəlif funksiyaları yerinə yetirə bilər: parolun görünməsinin dəyişdirilməsi, sahənin təmizlənməsi, fərdi hərəkət. Hər bir ikon növü ayrıca atributla idarə olunur və app:startIconDrawable və ya app:endIconDrawable atributu vasitəsilə fərdi ikonla əvəz edilə bilər.

End icon mode app:endIconMode atributu vasitəsilə təyin edilir və aşağıdakı dəyərləri qəbul edə bilər: password_toggle — parolun görünməsinin dəyişdirilməsi, clear_text — sahənin təmizlənməsi, dropdown_menu — açılan siyahı üçün ox, custom — fərdi ikon. password_toggle üçün TextInputLayout inputType-u textPassword və textVisiblePassword arasında avtomatik dəyişdirir, həmçinin göz ikonasını animasiya edir.

  • password_toggle — parolu göstərmək/gizlətmək üçün göz ikonası, daxili animasiya.
  • clear_text — mətn olduqda görünən sahəni təmizləmək üçün xaç işarəsi.
  • dropdown_menu — Exposed Dropdown Menu (Material Design 3) üçün ox.
  • custom — setEndIconOnClickListener vasitəsilə idarə olunan istənilən fərdi ikon.
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 üslubları: FilledBox və OutlinedBox

Android üçün Material Components TextInputLayout üçün iki əsas üslub təqdim edir: FilledBox (doldurulmuş) və OutlinedBox (konturlu). FilledBox üslubu rənglə doldurulmuş fon və fokusda rəngini dəyişən sahənin altında xəttə malikdir. OutlinedBox üslubu şəffaf fon və bütün sahənin ətrafında kontura malikdir, bu da daha aydın sərhədlər yaradır və çox sayda sahəsi olan formalar üçün daha uyğundur.

Üslub seçimi tətbiqin dizaynından asılıdır: FilledBox tez-tez istifadə olunan formalar üçün tövsiyə olunur, çünki ayrı-ayrı sahələrə daha az diqqət çəkir. OutlinedBox qısa formalar (giriş, qeydiyyat) üçün üstünlük təşkil edir, burada hər bir sahə aydın şəkildə qeyd olunmalıdır. Üslub XML-də style atributu və ya tətbiq mövzusu vasitəsilə təyin edilir.

XüsusiyyətFilledBoxOutlinedBox
FonRənglə doldurma (adətən boz)Şəffaf
SərhədAşağıdan xəttSahənin ətrafında kontur
FokusXətt qalınlaşır və rəngini dəyişirKontur rəngini dəyişir və qalınlaşır
TövsiyəTez-tez daxiletmə olan formalarQısa formalar, sahələrə vurğu
ÜslubWidget.MaterialComponents.TextInputLayout.FilledBoxWidget.MaterialComponents.TextInputLayout.OutlinedBox

Material Design 3 (M3) TextInputLayout üçün təkmilləşdirilmiş tipografiya, yeni rəng tokenləri və Material You dinamik rəngləri ilə yenilənmiş üslublar təqdim etdi. M3-də OutlinedBox tövsiyə olunan standart üslub oldu, FilledBox isə yeni spesifikasiyaya uyğun olaraq boşluqları və yuvarlaqlaşdırma radiusunu uyğunlaşdırdı.

TextInputLayout ilə kod nümunələri

Email və parolun validatorinqini, xəta göstərilməsini və parol göstərmə ikonasını əhatə edən TextInputLayout ilə qeydiyyat formasının tam icra nümunəsi. Qeydiyyat düyməsi basıldıqda bütün sahələr yoxlanılır və müvafiq xəta mesajları göstərilir.

Qeydiyyat formasının XML işarələməsi

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>

Kotlin-də formanın validatorinqi

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
}

Tez-tez verilən suallar

TextInputLayout üçün Material Components-in hansı versiyası lazımdır?

TextInputLayout com.google.android.material kitabxanasının 1.0.0 versiyasından etibarən mövcuddur. Material Design 3 imkanları üçün 1.6.0 və daha yuxarı versiyadan istifadə edin. Qoşulma: build.gradle modulunda implementation "com.google.android.material:material:1.12.0".

Fokusda üzən etiketin rəngini necə dəyişmək olar?

Fokus vəziyyətində üzən etiketin rəngi app:hintTextColor atributu və ya colorPrimary vasitəsilə mövzu ilə idarə olunur. Müxtəlif vəziyyətlər (fokus, xəta, disabled) üçün res/color/ seçicisindən və ya Material Components kitabxanasının boxStrokeColor, errorTextColor atributlarından istifadə edin.

TextInputLayout-a simvol sayğacını necə əlavə etmək olar?

app:counterEnabled="true" atributunu qurun və maksimum simvol sayını app:counterMaxLength="100" vasitəsilə təyin edin. TextInputLayout avtomatik olaraq sahənin altında sayğac göstərəcək (məsələn, "25/100"). Sayğacın rəngi app:counterTextColor və limit aşıldıqda app:counterOverflowTextColor vasitəsilə tənzimlənə bilər.

FilledBox və OutlinedBox üslubları arasında nə fərq var?

FilledBox — fon rənglə doldurulub, vurğu aşağıdakı xəttdədir. Daha az vizual yer tutur. OutlinedBox — sahənin ətrafında konturla şəffaf fon, daha görünən sərhədlər. FilledBox tez-tez istifadə olunan sahələr üçün, OutlinedBox isə hər sahənin aydınlığının vacib olduğu qısa formalar üçün tövsiyə olunur.

TextInputLayout-dan Floating Label olmadan istifadə etmək olar?

Bəli, üzən etiketi söndürmək üçün app:hintEnabled="false" atributunu qurun. Bu halda TextInputLayout EditText üçün adi örtük kimi işləyəcək, xəta, ikon və simvol sayğacı funksionallığını qoruyacaq, lakin etiket animasiyası olmadan. Hint-in lazım olmadığı və ya fərdi etiketin istifadə edildiyi sahələr üçün faydalıdır.

Nəticə

  • TextInputLayout — Material Components-dən floating label, xəta və ikonları təmin edən EditText örtüyü.
  • Floating label daxiletmə zamanı ipucunun gizlənməsi problemini həll edir — etiket qalxır və görünən qalır.
  • Xətalar ayrıca TextView olmadan qırmızı sərhəd vurğusu ilə sahənin altında göstərilir.
  • İkonlar endIconMode password_toggle, clear_text, dropdown_menu və custom-u dəstəkləyir.
  • FilledBox və OutlinedBox üslubları — daxiletmə sahəsinin iki əsas variantı.
  • Simvol sayğacı counterEnabled və counterMaxLength vasitəsilə aktivləşdirilir.
  • Material Design 3 Material You dinamik rəngləri və yenilənmiş OutlinedBox üslubları əlavə edir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun