TextInputLayout: bu nima, Material Design va Android-da sozlash

Muallif: IT Sectr Nashr etilgan: 2026-07-07 O'qish vaqti: 9 daq

TextInputLayout — Android uchun Material Components kutubxonasidan komponent bo'lib, EditText-ni o'rab oladi va matn kiritish uchun kengaytirilgan imkoniyatlarni qo'shadi. TextInputLayout-ning asosiy funksiyasi suzuvchi yorliq (floating label) bo'lib, matn kiritishda maydon ustiga ko'tariladi, joyni tejaydi va o'qish qulayligini yaxshilaydi. Qo'shimcha ravishda komponent xato xabarlarini ko'rsatish, maydon ichidagi ikonkalar, belgilar hisoblagichi va turli uslub variantlarini qo'llab-quvvatlaydi. Material Design Guidelines (2025)-ga ko'ra, TextInputLayout Material Design 3 standartlariga mos Android ilovalarida matn maydonlarini yaratishning tavsiya etilgan usulidir.

Asosiy ma'lumotlar

  • TextInputLayout — Material Components-dan floating label bilan EditText uchun o'ram.
  • Floating label — matn kiritishda yorliq maydon ustiga ko'tariladi, ekranda joy tejaydi.
  • Xatolar — kiritish maydoni ostida xato xabarlarining o'rnatilgan ko'rinishi.
  • Ikonkalar — harakatlar uchun chap va o'ng ikonkalarni qo'llab-quvvatlash (parolni ko'rsat, tozala).
  • Uslublar — ikkita asosiy uslub: FilledBox va OutlinedBox, shuningdek maxsus mavzular.

Android-da TextInputLayout nima

TextInputLayout — com.google.android.material.textfield paketidagi ViewGroup bo'lib, LinearLayout-ni kengaytiradi va ichida EditText-ni saqlaydi. Komponent Android uchun Material Components kutubxonasining bir qismi bo'lib, 1.0.0 versiyasidan boshlab mavjud. TextInputLayout-ning asosiy vazifasi Material Design Text Fields-ning tayyor implementatsiyasini dasturchining minimal harakati bilan ta'minlashdir.

Standart EditText-dan farqli o'laroq, TextInputLayout ichki EditText-ning android:hint atributi orqali o'rnatiladigan suzuvchi yorliqning animatsiyasini boshqaradi. Maydon bo'sh bo'lganda, yorliq maydon ichida oddiy maslahat sifatida ko'rsatiladi. Foydalanuvchi matn kiritishni boshlashi bilan yorliq animatsiya bilan maydonning yuqori qismiga o'tadi, hajmini kichiklashtiradi. Material Design Guidelines (2025)-ga ko'ra, bunday animatsiya formani idrok etishni yaxshilaydi, chunki foydalanuvchi ma'lumotlarni kiritgandan keyin ham maydon nomini doimo ko'radi.

Arxitektura nuqtai nazaridan, TextInputLayout dekorator naqshini amalga oshiradi: EditText hodisalarini tutib oladi, qo'shimcha elementlarning (yorliq, xato, ikonkalar, hisoblagich) ko'rinishini boshqaradi va ularning animatsiyasini muvofiqlashtiradi. Ichki EditText getEditText() metodi orqali mavjud va inputType, maxLines va hint kabi standart atributlar bilan sozlanishi mumkin.

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 va uni sozlash

Floating label (suzuvchi yorliq) — TextInputLayout-ning asosiy imkoniyatidir. Maydon bo'sh bo'lganda, android:hint matni EditText ichida oddiy maslahat sifatida ko'rsatiladi. Fokus olinganda yoki matn kiritilganda, yorliq TextInputLayout-ning yuqori qismiga ko'tariladi, shrift hajmini kichiklashtiradi va rangini o'zgartiradi. Bu xatti-harakat kiritish boshlangandan keyin maslahatning ko'rinmasligi muammosini hal qiladi.

Floating label-ni sozlash TextInputLayout atributlari orqali amalga oshiriladi: app:hintEnabled suzuvchi yorliq yoqilgan yoki o'chirilganligini aniqlaydi (standart true), app:hintAnimationEnabled o'tish animatsiyasini yoqadi yoki o'chiradi, app:expandedHintEnabled maydon bo'sh va fokusda bo'lmasa ham yorliqni ko'rsatishga ruxsat beradi. Turli holatlardagi yorliq rangi colorPrimary va colorControlHighlight uslublari orqali boshqariladi.

Google Material Components Team (2025)-ga ko'ra, floating label ko'p maydonli formalarda ayniqsa foydali, bunda foydalanuvchi kiritishni boshlagandan keyin maydon nomini unutishi mumkin. Kiritish vaqtida yo'qolib ketadigan oddiy android:hint-dan farqli o'laroq, floating label doimo ko'rinadigan bo'lib qoladi, har bir maydon uchun kontekstni ta'minlaydi.

AtributTavsifStandart
hintEnabledSuzuvchi yorliqni yoqadi yoki o'chiraditrue
hintAnimationEnabledYorliqning ko'tarilish/tushish animatsiyasini yoqaditrue
expandedHintEnabledMaydon bo'sh va fokusda bo'lmasa ham yorliqni ko'rsatadifalse
hintTextAppearanceSuzuvchi yorliq matnining uslubiIlova mavzusi

TextInputLayout-da xatolarni ko'rsatish

TextInputLayout kiritish maydoni bilan vizual integratsiyalangan o'rnatilgan xato ko'rsatish tizimini ta'minlaydi. error metodi orqali xato o'rnatilganda, komponent maydonni ajratib ko'rsatadi (chiziq yoki kontur rangi qizilga o'zgaradi) va xato matnini maydon ostida ko'rsatadi. Bu xato xabarlari uchun alohida TextView-ga bo'lgan ehtiyojni yo'q qiladi.

Xato ko'rsatishni boshqarish setError(CharSequence) va setErrorEnabled(boolean) metodlari orqali amalga oshiriladi. setError matn bilan chaqirilganda xato darhol ko'rsatiladi; setError(null) chaqirilganda — yashiriladi. TextInputLayout shuningdek app:errorIconDrawable atributi orqali maxsus xato ikonkasini va app:errorTextColor orqali xato rangini boshqarishni qo'llab-quvvatlaydi.

Material Design Guidelines (2025)-ga ko'ra, xato xabarlari aniq va foydali bo'lishi kerak: "Noto'g'ri kiritish" o'rniga "Email @ belgisini o'z ichiga olishi kerak" deb yozing. Xato ko'rsatish kiritish tugagandan so'ng (fokus yo'qolganda yoki forma yuborilgandan keyin) sodir bo'lishi kerak, real vaqtda emas — bu formani to'ldirishda foydalanuvchining stressini kamaytiradi.

kotlin
// Dasturiy xato sozlamasi
textInputLayout.error = "Password min 8 chars"

// Xatoni yashirish
textInputLayout.error = null

// Validatsiya xatosini tekshirish va o'rnatish
if (email.isNullOrBlank()) {
    tilEmail.error = "Email is required"
} else {
    tilEmail.error = null
}

TextInputLayout ikonkalari va harakatlari

TextInputLayout maydonning boshida (start icon) va oxirida (end icon) ikonkalarni ko'rsatishni qo'llab-quvvatlaydi. Ikonkalar turli funktsiyalarni bajarishi mumkin: parol ko'rinishini o'zgartirish, maydonni tozalash, maxsus harakat. Har bir ikonka turi alohida atribut bilan boshqariladi va app:startIconDrawable yoki app:endIconDrawable atributi orqali maxsus ikonka bilan almashtirilishi mumkin.

End icon mode app:endIconMode atributi orqali o'rnatiladi va quyidagi qiymatlarni qabul qilishi mumkin: password_toggle — parol ko'rinishini almashtirish, clear_text — maydonni tozalash, dropdown_menu — ochiladigan ro'yxat uchun strelka, custom — maxsus ikonka. password_toggle uchun TextInputLayout avtomatik ravishda inputType-ni textPassword va textVisiblePassword o'rtasida almashtiradi, shuningdek ko'z ikonkasini animatsiya qiladi.

  • password_toggle — parolni ko'rsatish/yashirish uchun ko'z ikonkasi, o'rnatilgan animatsiya.
  • clear_text — maydonni tozalash uchun xoch belgisi, matn mavjud bo'lganda paydo bo'ladi.
  • dropdown_menu — Exposed Dropdown Menu (Material Design 3) uchun strelka.
  • custom — setEndIconOnClickListener orqali boshqariladigan istalgan maxsus ikonka.
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 uslublari: FilledBox va OutlinedBox

Android uchun Material Components TextInputLayout uchun ikkita asosiy uslubni taqdim etadi: FilledBox (to'ldirilgan) va OutlinedBox (konturli). FilledBox uslubi rang bilan to'ldirilgan fon va fokusda rangini o'zgartiradigan maydon ostidagi chiziqqa ega. OutlinedBox uslubi shaffof fon va butun maydon atrofida konturga ega, bu aniqroq chegaralar yaratadi va ko'p maydonli formalar uchun ko'proq mos keladi.

Uslub tanlovi ilova dizayniga bog'liq: FilledBox tez-tez ishlatiladigan formalar uchun tavsiya etiladi, chunki alohida maydonlarga kamroq e'tibor tortadi. OutlinedBox qisqa formalar (kirish, ro'yxatdan o'tish) uchun afzal, bunda har bir maydon aniq belgilangan bo'lishi kerak. Uslub XML-dagi style atributi yoki ilova mavzusi orqali o'rnatiladi.

XususiyatFilledBoxOutlinedBox
FonRang bilan to'ldirish (odatda kulrang)Shaffof
ChegaraPastki chiziqMaydon atrofida kontur
FokusChiziq qalinlashadi va rangini o'zgartiradiKontur rangini o'zgartiradi va qalinlashadi
TavsiyaTez-tez kiritiladigan formalarQisqa formalar, maydonlarga urg'u
UslubWidget.MaterialComponents.TextInputLayout.FilledBoxWidget.MaterialComponents.TextInputLayout.OutlinedBox

Material Design 3 (M3) TextInputLayout uchun yaxshilangan tipografiya, yangi rang tokenlari va Material You dinamik ranglarini qo'llab-quvvatlovchi yangilangan uslublarni taqdim etdi. M3-da OutlinedBox tavsiya etilgan standart uslubga aylandi, FilledBox esa yangi spetsifikatsiyaga mos ravishda oraliqlar va yaxlitlash radiusini moslashtirdi.

TextInputLayout bilan kod namunalari

Email va parol validatsiyasi, xatolarni ko'rsatish va parolni ko'rsatish ikonkasini o'z ichiga olgan TextInputLayout bilan ro'yxatdan o'tish formasining to'liq implementatsiya namunasi. Ro'yxatdan o'tish tugmasi bosilganda barcha maydonlar tekshiriladi va tegishli xato xabarlari ko'rsatiladi.

Ro'yxatdan o'tish formasining XML belgilari

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-da forma validatsiyasi

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 so'raladigan savollar

TextInputLayout uchun Material Components-ning qaysi versiyasi kerak?

TextInputLayout com.google.android.material kutubxonasining 1.0.0 versiyasidan boshlab mavjud. Material Design 3 imkoniyatlari uchun 1.6.0 va undan yuqori versiyadan foydalaning. Ulanish: build.gradle modulida implementation "com.google.android.material:material:1.12.0".

Fokusda suzuvchi yorliq rangini qanday o'zgartirish mumkin?

Fokus holatidagi suzuvchi yorliq rangi app:hintTextColor atributi yoki colorPrimary orqali mavzu bilan boshqariladi. Turli holatlar (fokus, xato, disabled) uchun res/color/ selektoridan yoki Material Components kutubxonasining boxStrokeColor, errorTextColor atributlaridan foydalaning.

TextInputLayout-ga belgilar hisoblagichini qanday qo'shish mumkin?

app:counterEnabled="true" atributini o'rnating va maksimal belgilar sonini app:counterMaxLength="100" orqali belgilang. TextInputLayout avtomatik ravishda maydon ostida hisoblagichni ko'rsatadi (masalan, "25/100"). Hisoblagich rangi app:counterTextColor va limit oshib ketganda app:counterOverflowTextColor orqali sozlanishi mumkin.

FilledBox va OutlinedBox uslublari o'rtasidagi farq nima?

FilledBox — fon rang bilan to'ldirilgan, urg'u pastki chiziqda. Kamroq vizual joy egallaydi. OutlinedBox — maydon atrofida kontur bilan shaffof fon, ko'rinadigan chegaralar. FilledBox tez-tez ishlatiladigan maydonlar uchun, OutlinedBox esa har bir maydonning aniqligi muhim bo'lgan qisqa formalar uchun tavsiya etiladi.

TextInputLayout-dan Floating Labelsiz foydalanish mumkinmi?

Ha, suzuvchi yorliqni o'chirish uchun app:hintEnabled="false" atributini o'rnating. Bu holda TextInputLayout EditText uchun oddiy o'ram sifatida ishlaydi, xato, ikonka va belgilar hisoblagichi funksionalligini saqlab qoladi, lekin yorliq animatsiyasisiz. Hint kerak bo'lmagan yoki maxsus yorliq ishlatiladigan maydonlar uchun foydali.

Xulosa

  • TextInputLayout — Material Components-dan floating label, xato va ikonkalarni ta'minlovchi EditText o'rami.
  • Floating label kiritish vaqtida maslahatning yashirinishi muammosini hal qiladi — yorliq ko'tariladi va ko'rinadigan bo'lib qoladi.
  • Xatolar alohida TextView-siz qizil chegara ajratish bilan maydon ostida ko'rsatiladi.
  • Ikonkalar endIconMode password_toggle, clear_text, dropdown_menu va custom-ni qo'llab-quvvatlaydi.
  • FilledBox va OutlinedBox uslublari — kiritish maydonining ikkita asosiy ko'rinish varianti.
  • Belgilar hisoblagichi counterEnabled va counterMaxLength orqali faollashtiriladi.
  • Material Design 3 Material You dinamik ranglari va yangilangan OutlinedBox uslublarini qo'shadi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing