InputType — bu nədir, daxilolma atributları və Android-də onların konfiqurasiyası

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

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 — EditText üçün daxilolma sinfini və modifikatorları təyin edən bit maskası.
  • Daxilolma sinifləri — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME.
  • Modifikatorlar — davranışı dəqiqləşdirən bayraqlar: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES.
  • Birləşdirmə — sinif və modifikatorlar dəqiq konfiqurasiya üçün bitvi OR vasitəsilə birləşdirilir.
  • Təsir — düzgün InputType daxilolmanı sürətləndirir, səhvləri azaldır və forma UX-ni yaxşılaşdırır.

Android-də InputType nədir

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.

kotlin
// 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

InputType sinifləri: TEXT, NUMBER, PHONE, DATETIME

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.

SinifSabitKlaviaturaTətbiq
TEXTTYPE_CLASS_TEXT (1)QWERTYMətn, şərhlər, təsvir
NUMBERTYPE_CLASS_NUMBER (2)RəqəmMiqdar, qiymət, yaş
PHONETYPE_CLASS_PHONE (3)TelefonTelefon nömrəsi
DATETIMETYPE_CLASS_DATETIME (4)Tarix/vaxtTarix, 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ı

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.

TEXT üçün bayraqlar

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — bütün hərflər böyük.
  • TYPE_TEXT_FLAG_CAP_WORDS — hər söz böyük hərflə başlayır.
  • TYPE_TEXT_FLAG_CAP_SENTENCES — cümlənin əvvəlində böyük hərf (defolt).
  • TYPE_TEXT_FLAG_AUTO_CORRECT — səhvlərin avtomatik düzəldilməsi.
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — avtomatik tamamlama (AutoCompleteTextView üçün).
  • TYPE_TEXT_FLAG_MULTI_LINE — çoxsətirli daxilolma.
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — təkliflərin söndürülməsi.

NUMBER üçün bayraqlar

  • TYPE_NUMBER_FLAG_SIGNED — mənfi ədədlərə icazə verir (mənfi işarəsi).
  • TYPE_NUMBER_FLAG_DECIMAL — onluq nöqtəyə icazə verir.

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 kombinasiyaları: müxtəlif ssenarilər üçün nümunələr

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.

SsenariInputTypeKlaviatura
AdtextCapWordsQWERTY, hər söz böyük hərflə
EmailtextEmailAddressQWERTY @ və . ilə
ŞifrətextPasswordQWERTY, gizli daxilolma
TelefonphoneRəqəmlər +, #, * ilə
QiymətnumberDecimalVergüllü rəqəmlər
MiqdarnumberYalnız rəqəmlər
ŞərhtextCapSentences|textMultiLineQWERTY, çoxsətirli
Axtarıştext|textNoSuggestionsTəklifsiz QWERTY
kotlin
// 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 ilə proqram işi

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.

Rejimlərin dəyişdirilməsi

kotlin
// Ş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)
}

Sinif və variasiyanın çıxarılması

kotlin
// 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
}

InputType seçimi üçün ən yaxşı təcrübələr

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.

  • Aşkarlıq — həmişə InputType-ı açıq şəkildə təyin edin, defolt dəyərə (textMultiLine) güvənməyin.
  • Spesifiklik — ən konkret növdən istifadə edin: email üçün text yox, textEmailAddress.
  • Təhlükəsizlik — şifrələr, PIN və kart məlumatları üçün PASSWORD variasiyalarından istifadə edin.
  • Avtomatik doldurma — parol menecerlərini dəstəkləmək üçün InputType-ı autofillHints ilə birləşdirin.
  • Sınaq — müxtəlif klaviaturavlarda davranışı yoxlayın (Gboard, SwiftKey, Samsung Keyboard).

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 Keyboard Type-dan nə ilə fərqlənir?

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.

InputType-ı defolt dəyərə necə sıfırlamaq olar?

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.

Xüsusi InputType yaratmaq mümkündürmü?

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 IME-yə (klaviaturaya) necə təsir edir?

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.

InputType-ı runtime-da necə yoxlamaq olar?

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ə

  • InputType — daxilolma sinfindən (TEXT, NUMBER, PHONE, DATETIME) və modifikatorlardan ibarət bit maskası.
  • Daxilolma sinfi əsas məlumat növünü və göstərilən klaviatura növünü təyin edir.
  • Modifikatorlar davranışı dəqiqləşdirir: çoxsətirlilik, avtomatik düzəliş, böyük hərflər, gizli daxilolma.
  • Birləşdirmə bitvi OR vasitəsilə müxtəlif ssenarilər üçün dəqiq konfiqurasiyalar yaratmağa imkan verir.
  • PASSWORD variasiyaları avtomatik düzəlişi söndürür, simvolları gizlədir və lüğətə yazılmanın qarşısını alır.
  • Proqram qurulması setInputType() vasitəsilə klaviaturanı yeniləmək üçün IME-nin yenidən başladılmasını tələb edir.
  • Ən yaxşı təcrübələr — InputType-ı açıq təyin edin, konkret növlərdən istifadə edin və müxtəlif klaviaturavlarda sınaqdan keçirin.

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