InputType — bu, daxil edilən məlumatların xarakterini və mətn sahələri üçün klaviatura davranışını təyin edən Android atributudur. InputType dəyəri daxilolma sinfini (mətn, rəqəm, telefon, tarix) və modifikatorları (çoxsətirlilik, avtomatik düzəliş, böyük hərflər, gizli daxilolma) birləşdirən bit maskasını təmsil edir. InputType göstərilən klaviaturanın növünə, daxil edilən simvolların filtrlənməsinə və avtomatik tamamlama işinə təsir göstərir. Android Developers (2026) məlumatına görə, InputType məlumatların düzgün daxil edilməsini təmin etmək üçün ən vacib atributlardan biridir və hər bir redaktə edilə bilən mətn sahəsi üçün açıq şəkildə təyin edilməlidir.
Əsas məqamlar
InputType — bu, mətn sahəsi üçün daxilolma rejimini kodlaşdıran tam ədəd sabitidir (Int). Android-də o, android.text.InputType sinfində təyin edilmişdir. InputType dəyəri iki hissədən ibarətdir: daxilolma sinfi (bitlər 0–4) və modifikatorlar (bitlər 5–31). Daxilolma sinfi əsas məlumat növünü — mətn, rəqəm, telefon, tarixi təyin edir. Modifikatorlar seçilmiş sinif daxilində davranışı dəqiqləşdirir — məsələn, mətn sinfi üçün avtomatik düzəliş, böyük hərflər və ya çoxsətirlilik aktivləşdirilə bilər.
InputType mexanizmi üç səviyyədə işləyir: Android framework səviyyəsində hansı InputConnection-un yaradılacağını təyin edir (EditText ilə IME arasında əlaqə); IME (klaviatura) səviyyəsində hansı simvolların göstəriləcəyini və daxilolmanın necə işlənəcəyini göstərir; tətbiq səviyyəsində EditText-ə daxil edilmiş InputFilter vasitəsilə simvolları filtrləyir. Android Source Code (AOSP, 2026) məlumatına görə, bit maskası cari dəyəri qaytaran TextView.getInputType() metodu və daxili filtrləri və IME ilə əlaqəni yenidən konfiqurasiya edən setInputType() metodunda işlənir.
InputType-un vacib xüsusiyyəti — təhlükəsizlik səbəbindən onu başqa prosesdən oxumaq mümkün deyil. Bu, daxilolma növünə giriş vasitəsilə məlumat oğurluğunun qarşısını alır (məsələn, sahənin şifrə olub-olmadığını müəyyən etmək). Başqa tətbiqdən InputType oxumağa cəhd edildikdə, defolt olaraq TYPE_CLASS_TEXT qaytarılır.
// InputType-ın əsas sabitləri
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Sinifi çıxarmaq üçün maska
InputType.TYPE_MASK_CLASS // 0x0000000F
Android-də dörd əsas InputType sinfi təyin edilmişdir. Hər bir sinif müəyyən məlumat kateqoriyasına uyğundur və müvafiq klaviatura növünü aktivləşdirir. Sinif bit maskasının 0–4 bitlərində göstərilir və TYPE_MASK_CLASS (0x0F) maskası vasitəsilə çıxarıla bilər.
| Sinif | Sabit | Klaviatura | Tətbiq |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Mətn, şərhlər, təsvir |
| NUMBER | TYPE_CLASS_NUMBER (2) | Rəqəm | Miqdar, qiymət, yaş |
| PHONE | TYPE_CLASS_PHONE (3) | Telefon | Telefon nömrəsi |
| DATETIME | TYPE_CLASS_DATETIME (4) | Tarix/vaxt | Tarix, vaxt |
TYPE_CLASS_DATETIME birbaşa nadir hallarda istifadə olunur — adətən tarix daxil etmək üçün DatePicker və ya DatePickerDialog tətbiq edilir, mətn sahəsi deyil. Ancaq bəzi ssenarilərdə (tarixin əl ilə sürətli daxil edilməsi) bu sinif faydalı ola bilər. Onun ixtisaslaşmış klaviaturası yoxdur və adətən rəqəm klaviaturasını göstərir.
Hər bir daxilolma sinfi variasiyalarla (variation) — bitlər 5–7-də göstərilən alt növlərlə birləşdirilə bilər. Məsələn, TYPE_TEXT_VARIATION_PASSWORD (bit 5) TEXT sinfinə gizli daxilolma əlavə edir. Variasiya bitləri: 0x000000E0 (maska TYPE_MASK_VARIATION).
InputType bayraq-modifikatorları (bitlər 8–31) əsas sinfə əlavə imkanlar əlavə edir. Onlar klaviatura növünü dəyişmir, ancaq daxilolma davranışını dəyişdirir. Bayraqlar hər sinif üçün spesifikdir — TEXT üçün bayraqlar NUMBER ilə işləmir və əksinə. Aşağıda hər sinif üçün əsas modifikatorlar verilmişdir.
Android Developers Documentation (2026) məlumatına görə, müxtəlif siniflər üçün bayraqlar kəsişmir — TEXT bayrağını NUMBER ilə istifadə etmək cəhdi nəzərə alınmayacaq. Qurulmuş bayrağı yoxlamaq üçün bitvi AND istifadə olunur: (inputType and FLAG) != 0.
InputType-un siniflər və bayraqlarla düzgün birləşməsi rahat formalar yaratmağın açarıdır. Tipik ssenariləri və müvafiq InputType konfiqurasiyalarını nəzərdən keçirək. Hər bir ssenari konkret məlumat növü üçün daxilolmanı optimallaşdırır, formanı intuitiv edir və doldurulmanı sürətləndirir.
| Ssenari | InputType | Klaviatura |
|---|---|---|
| Ad | textCapWords | QWERTY, hər söz böyük hərflə |
| textEmailAddress | QWERTY @ və . ilə | |
| Şifrə | textPassword | QWERTY, gizli daxilolma |
| Telefon | phone | Rəqəmlər +, #, * ilə |
| Qiymət | numberDecimal | Vergüllü rəqəmlər |
| Miqdar | number | Yalnız rəqəmlər |
| Şərh | textCapSentences|textMultiLine | QWERTY, çoxsətirli |
| Axtarış | text|textNoSuggestions | Təklifsiz QWERTY |
// Qiymət sahəsi üçün kombinasiya
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Şərh sahəsi üçün kombinasiya
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
InputType-un setInputType() vasitəsilə proqram yolu ilə qurulması əvvəlki dəyəri üstələyir. Yalnız maskanın bir hissəsini dəyişmək lazımdırsa (məsələn, bayraq əlavə etmək), cari dəyəri saxlamaq, onu dəyişmək və yenidən tətbiq etmək lazımdır. Hər setInputType() çağırışı EditText-in daxili filtrlərini yenidən konfiqurasiya edir.
setRawInputType() metodu setInputType-dan onunla fərqlənir ki, filtrlərin və təkliflərin yenidən konfiqurasiyasına səbəb olmur. O, EditText vəziyyətinin tam yenidən yüklənməsi olmadan InputType-ın müvəqqəti dəyişdirilməsi üçün istifadə olunur. setInputType() çağırışından sonra klaviaturanın yenilənməsi üçün IME-ni yenidən başlatmaq tövsiyə olunur.
// Şifrə və görünən mətn arasında keçid
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 mövqeyini saxla
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Daxilolma sinfini al
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Daxilolma variasiyasını al
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Şifrə sahəsi olub-olmadığını yoxla
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Düzgün InputType seçimi təkcə UX deyil, həm də təhlükəsizlik və məlumatların düzgünlüyüdür. Əsas tövsiyələrə aşağıdakılar daxildir: hər EditText üçün açıq InputType təyin edin; ən konkret daxilolma sinfindən istifadə edin; müxtəlif siniflərdən bayraqları birləşdirməyin; həssas məlumatları olan sahələr üçün PASSWORD variasiyalarından istifadə edin; axtarış sahələri üçün imeOptions=”actionSearch” istifadə edin.
InputType həmçinin əlçatanlıq xidmətlərinin (Accessibility) işinə təsir göstərir. textPassword növü olan sahələr ekran oxuyucularından əlavə qorunma alır — onlar daxil edilən simvolları səslə oxumur. textEmailAddress olan sahələr üçün Screen Reader istifadəçiyə sahənin email üçün nəzərdə tutulduğunu bildirir və müvafiq təkliflər təqdim edir.
Material Design Guidelines (2025) məlumatına görə, InputType istifadəçinin daxil etdiyi məlumat növünə uyğun olmalıdır. Yanlış InputType yalnız daxilolmanı yavaşlatmır, həm də səhvlərə səbəb ola bilər: məsələn, telefon nömrəsini daxil etmək üçün textMultiLine buraxılarsa, klaviatura rəqəm blokunu göstərməyəcək və istifadəçi hər dəfə əl ilə layoutu dəyişmək məcburiyyətində qalacaq.
Tez-tez verilən suallar
InputType — bu, bit maskası vasitəsilə daxil edilən məlumatların növünü təyin edən EditText atributudur. Keyboard Type — InputType tərəfindən aktivləşdirilən vizual klaviatura növünün qeyri-rəsmi adıdır. InputType həmçinin simvol filtrlənməsinə, avtomatik düzəlişə və avtomatik tamamlamaya təsir göstərir, təkcə klaviatura layoutuna deyil.
editText.inputType = InputType.TYPE_CLASS_TEXT təyin edin və ya tam sıfırlama üçün InputType.TYPE_NULL (0x00000000) sabitindən istifadə edin. TYPE_NULL ilə sahə fokusda olduqda klaviatura göstərməyəcək. Standart mətn daxilolmasına qayıtmaq üçün bayraqsız TYPE_CLASS_TEXT təyin edin.
Yeni InputType sinfi yaratmaq mümkün deyil, çünki o, Android framework-ünün bir hissəsidir. Ancaq istədiyiniz davranışı əldə etmək üçün mövcud sinifləri və bayraqları birləşdirə bilərsiniz. Simvolların əlavə filtrlənməsini InputFilter vasitəsilə həyata keçirin, o, EditText-ə setFilters() metodu ilə qurulur.
InputType InputConnection vasitəsilə daxilolma sisteminə ötürülür. IME InputType sinfini və variasiyasını oxuyur və müvafiq klaviatura layoutunu seçir. Məsələn, TYPE_CLASS_NUMBER TYPE_NUMBER_FLAG_DECIMAL ilə klaviaturanın nöqtəli rəqəm blokunu göstərməsinə səbəb olur. Müasir klaviaturaların əksəriyyəti bu tövsiyələrə əməl edir.
Kotlin-də editText.inputType xassəsindən və ya Java-da editText.getInputType() metodundan istifadə edin. Sinifi çıxarmaq üçün maska tətbiq edin: inputType and InputType.TYPE_MASK_CLASS. Konkret bayrağı yoxlamaq üçün: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — nəticə != 0 olarsa, bayraq qurulub.
Nəticə
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.
Həm də oxuyun