InputType — bu kiritiladigan ma'lumotlarning xarakterini va matn maydonlari uchun klaviatura harakatini belgilaydigan Android atributidir. InputType qiymati kirish sinfini (matn, raqam, telefon, sana) va modifikatorlarni (ko'p qatorli, avtomatik tuzatish, katta harflar, yashirin kiritish) birlashtiruvchi bit maskasini ifodalaydi. InputType ko'rsatiladigan klaviatura turiga, kiritiladigan belgilarni filtrlashga va avtomatik to'ldirish ishiga ta'sir qiladi. Android Developers (2026) ma'lumotiga ko'ra, InputType ma'lumotlarni to'g'ri kiritishni ta'minlash uchun eng muhim atributlardan biri hisoblanadi va har bir tahrirlanadigan matn maydoni uchun aniq belgilanishi kerak.
Asosiy fikrlar
InputType — bu matn maydoni uchun kiritish rejimini kodlaydigan butun son konstantasidir (Int). Android-da u android.text.InputType sinfida belgilangan. InputType qiymati ikki qismdan iborat: kirish sinfi (bitlar 0–4) va modifikatorlar (bitlar 5–31). Kirish sinfi asosiy ma'lumot turini — matn, raqam, telefon, sanani belgilaydi. Modifikatorlar tanlangan sinf ichida harakatni aniqlashtiradi — masalan, matn sinfi uchun avtomatik tuzatish, katta harflar yoki ko'p qatorli kiritish yoqilishi mumkin.
InputType mexanizmi uch darajada ishlaydi: Android framework darajasida qaysi InputConnection yaratilishini belgilaydi (EditText va IME o'rtasidagi aloqa); IME (klaviatura) darajasida qaysi belgilar ko'rsatilishi va kiritish qanday qayta ishlanishini ko'rsatadi; dastur darajasida EditText-ga o'rnatilgan InputFilter orqali belgilarni filtrlaydi. Android Source Code (AOSP, 2026) ma'lumotiga ko'ra, bit maskasi joriy qiymatni qaytaruvchi TextView.getInputType() metodi va ichki filtrlarni va IME bilan aloqani qayta sozlovchi setInputType() metodida qayta ishlanadi.
InputType-ning muhim xususiyati — xavfsizlik sababli uni boshqa jarayondan o'qib bo'lmaydi. Bu kirish turiga kirish orqali ma'lumot o'g'irlanishining oldini oladi (masalan, maydon parol ekanligini aniqlash). Boshqa dasturdan InputType o'qishga urinilganda, standart sifatida TYPE_CLASS_TEXT qaytariladi.
// InputType asosiy konstantalari
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Sinfni chiqarish uchun maska
InputType.TYPE_MASK_CLASS // 0x0000000F
Android-da to'rtta asosiy InputType sinfi belgilangan. Har bir sinf ma'lum bir ma'lumot toifasiga mos keladi va tegishli klaviatura turini faollashtiradi. Sinf bit maskasining 0–4 bitlarida ko'rsatilgan va TYPE_MASK_CLASS (0x0F) maskasi orqali chiqarilishi mumkin.
| Sinf | Konstanta | Klaviatura | Qo'llanilishi |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Matn, sharhlar, tavsif |
| NUMBER | TYPE_CLASS_NUMBER (2) | Raqamli | Miqdor, narx, yosh |
| PHONE | TYPE_CLASS_PHONE (3) | Telefon | Telefon raqami |
| DATETIME | TYPE_CLASS_DATETIME (4) | Sana/vaqt | Sana, vaqt |
TYPE_CLASS_DATETIME to'g'ridan-to'g'ri kamdan-kam ishlatiladi — odatda sanani kiritish uchun DatePicker yoki DatePickerDialog qo'llaniladi, matn maydoni emas. Biroq ba'zi stsenariylarda (sananing tez qo'lda kiritilishi) bu sinf foydali bo'lishi mumkin. Uning ixtisoslashgan klaviaturasi yo'q va odatda raqamli klaviaturani ko'rsatadi.
Har bir kirish sinfi variatsiyalar (variation) — bitlar 5–7 da ko'rsatilgan kichik turlar bilan birlashtirilishi mumkin. Masalan, TYPE_TEXT_VARIATION_PASSWORD (bit 5) TEXT sinfiga yashirin kiritishni qo'shadi. Variatsiya bitlari: 0x000000E0 (maska TYPE_MASK_VARIATION).
InputType bayroq-modifikatorlari (bitlar 8–31) asosiy sinfga qo'shimcha imkoniyatlar qo'shadi. Ular klaviatura turini o'zgartirmaydi, lekin kiritish harakatini o'zgartiradi. Bayroqlar har bir sinf uchun xos — TEXT uchun bayroqlar NUMBER bilan ishlamaydi va aksincha. Quyida har bir sinf uchun asosiy modifikatorlar keltirilgan.
Android Developers Documentation (2026) ma'lumotiga ko'ra, turli sinflar uchun bayroqlar bir-biriga o'xshamaydi — TEXT bayrog'ini NUMBER bilan ishlatish urinishi e'tiborga olinmaydi. O'rnatilgan bayroqni tekshirish uchun bitli AND ishlatiladi: (inputType and FLAG) != 0.
InputType-ning sinflar va bayroqlar bilan to'g'ri birikmasi qulay formalar yaratishning kalitidir. Odatiy stsenariylarni va tegishli InputType konfiguratsiyalarini ko'rib chiqamiz. Har bir stsenariy ma'lum bir ma'lumot turi uchun kiritishni optimallashtiradi, formani intuitiv qiladi va to'ldirishni tezlashtiradi.
| Stsenariy | InputType | Klaviatura |
|---|---|---|
| Ism | textCapWords | QWERTY, har bir so'z katta harf bilan |
| textEmailAddress | QWERTY @ va . bilan | |
| Parol | textPassword | QWERTY, yashirin kiritish |
| Telefon | phone | Raqamlar +, #, * bilan |
| Narx | numberDecimal | Vergul bilan raqamlar |
| Miqdor | number | Faqat raqamlar |
| Sharh | textCapSentences|textMultiLine | QWERTY, ko'p qatorli |
| Qidiruv | text|textNoSuggestions | Takliflarsiz QWERTY |
// Narx maydoni uchun kombinatsiya
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Sharh maydoni uchun kombinatsiya
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
InputType-ni setInputType() orqali dasturiy o'rnatish oldingi qiymatni bekor qiladi. Agar faqat maskaning bir qismini o'zgartirish kerak bo'lsa (masalan, bayroq qo'shish), joriy qiymatni saqlab, uni o'zgartirib va qayta qo'llash kerak. Har bir setInputType() chaqiruvi EditText-ning ichki filtrlarini qayta sozlaydi.
setRawInputType() metodi setInputType-dan filtrlarni va takliflarni qayta sozlamasligi bilan farq qiladi. U EditText holatini to'liq qayta yuklamasdan InputType-ni vaqtincha o'zgartirish uchun ishlatiladi. setInputType() chaqiruvidan so'ng klaviaturani yangilash uchun IME-ni qayta ishga tushirish tavsiya etiladi.
// Parol va ko'rinadigan matn o'rtasida almashish
fun togglePasswordVisibility(editText: EditText) {
val currentType = editText.inputType
val isPassword = (currentType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
editText.inputType = if (isPassword) {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
}
// Kursor joylashuvini saqlash
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Kirish sinfini olish
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Kirish variatsiyasini olish
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Parol maydoni ekanligini tekshirish
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
To'g'ri InputType tanlash nafaqat UX, balki xavfsizlik va ma'lumotlarning to'g'riligidir. Asosiy tavsiyalar quyidagilarni o'z ichiga oladi: har bir EditText uchun aniq InputType belgilang; eng aniq kirish sinfidan foydalaning; turli sinflardan bayroqlarni birlashtirmang; nozik ma'lumotlarga ega maydonlar uchun PASSWORD variatsiyalaridan foydalaning; qidiruv maydonlari uchun imeOptions=”actionSearch” ishlating.
InputType shuningdek, maxsus imkoniyatlar xizmatlari (Accessibility) ishiga ta'sir qiladi. textPassword turiga ega maydonlar ekran o'quvchilaridan qo'shimcha himoya oladi — ular kiritilgan belgilarni ovoz bilan o'qimaydi. textEmailAddress maydonlari uchun Screen Reader foydalanuvchiga maydon email uchun mo'ljallanganligini bildiradi va tegishli takliflarni taqdim etadi.
Material Design Guidelines (2025) ma'lumotiga ko'ra, InputType foydalanuvchi kiritadigan ma'lumot turiga mos kelishi kerak. Noto'g'ri InputType nafaqat kiritishni sekinlashtiradi, balki xatolarga ham olib kelishi mumkin: masalan, telefon raqamini kiritish uchun textMultiLine qoldirilsa, klaviatura raqam blokini ko'rsatmaydi va foydalanuvchi har safar qo'lda layoutni o'zgartirishga majbur bo'ladi.
Tez-tez beriladigan savollar
InputType — bu bit maskasi orqali kiritiladigan ma'lumotlar turini belgilaydigan EditText atributidir. Keyboard Type — InputType tomonidan faollashtiriladigan vizual klaviatura turining norasmiy nomidir. InputType shuningdek, belgilarni filtrlashga, avtomatik tuzatishga va avtomatik to'ldirishga ta'sir qiladi, nafaqat klaviatura layoutiga.
editText.inputType = InputType.TYPE_CLASS_TEXT ni o'rnating yoki to'liq tiklash uchun InputType.TYPE_NULL (0x00000000) konstantasidan foydalaning. TYPE_NULL bilan maydon fokusda klaviaturani ko'rsatmaydi. Standart matn kiritishga qaytish uchun bayroqsiz TYPE_CLASS_TEXT ni o'rnating.
Yangi InputType sinfini yaratish mumkin emas, chunki u Android framework-ning bir qismidir. Biroq, kerakli harakatga erishish uchun mavjud sinflar va bayroqlarni birlashtirish mumkin. Belgilarning qo'shimcha filtrlanishini InputFilter orqali amalga oshiring, u EditText-ga setFilters() metodi bilan o'rnatiladi.
InputType InputConnection orqali kiritish tizimiga uzatiladi. IME InputType sinfi va variatsiyasini o'qiydi va tegishli klaviatura layoutini tanlaydi. Masalan, TYPE_CLASS_NUMBER TYPE_NUMBER_FLAG_DECIMAL bilan klaviaturaning nuqtali raqam blokini ko'rsatishiga sabab bo'ladi. Zamonaviy klaviaturalarning aksariyati ushbu tavsiyalarga amal qiladi.
Kotlin-da editText.inputType xususiyatidan yoki Java-da editText.getInputType() metodidan foydalaning. Sinfni chiqarish uchun maska qo'llang: inputType and InputType.TYPE_MASK_CLASS. Muayyan bayroqni tekshirish uchun: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — agar natija != 0 bo'lsa, bayroq o'rnatilgan.
Xulosa
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.