InputType — је Android атрибут који одређује карактер унетих података и понашање тастатуре за текстуална поља. Вредност InputType представља битску маску која комбинује класу уноса (текст, број, телефон, датум) и модификаторе (вишелинијски, аутоматска исправка, велика слова, скривени унос). InputType утиче на тип приказане тастатуре, филтрирање унетих знакова и рад аутоматског довршавања. Према Android Developers (2026), InputType је један од најважнијих атрибута за обезбеђивање исправног уноса података и мора бити експлицитно постављен за свако изменљиво текстуално поље.
Главно
InputType — је целобројна константа (Int) која кодира режим уноса за текстуално поље. У Android-у је дефинисана у класи android.text.InputType. Вредност InputType се састоји из два дела: класе уноса (битови 0–4) и модификатора (битови 5–31). Класа уноса одређује основни тип података — текст, број, телефон, датум. Модификатори прецизирају понашање у оквиру изабране класе — на пример, за текстуалну класу се може укључити аутоматска исправка, велика слова или вишелинијски унос.
Механизам InputType ради на три нивоа: на нивоу Android оквира одређује који InputConnection ће бити креиран (веза између EditText-а и IME); на нивоу IME (тастатуре) указује које знакове приказати и како обрадити унос; на нивоу апликације филтрира знакове кроз InputFilter уграђен у EditText. Према Android Source Code (AOSP, 2026), битска маска се обрађује у методи TextView.getInputType(), која враћа тренутну вредност, и setInputType(), која реконфигурише унутрашње филтере и везу са IME.
Важна карактеристика InputType — не може се прочитати из другог процеса из безбедносних разлога. Ово спречава крађу података кроз приступ типу уноса (на пример, одређивање да ли је поље лозинка). При покушају читања InputType из друге апликације, подразумевано се враћа TYPE_CLASS_TEXT.
// Основне InputType константе
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Маска за издвајање класе
InputType.TYPE_MASK_CLASS // 0x0000000F
У Android-у су дефинисане четири основне InputType класе. Свака класа одговара одређеној категорији података и активира одговарајући тип тастатуре. Класа је назначена у битовима 0–4 битске маске и може се издвојити путем маске TYPE_MASK_CLASS (0x0F).
| Класа | Константа | Тастатура | Примена |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Текст, коментари, опис |
| NUMBER | TYPE_CLASS_NUMBER (2) | Нумеричка | Количина, цена, старост |
| PHONE | TYPE_CLASS_PHONE (3) | Телефонска | Број телефона |
| DATETIME | TYPE_CLASS_DATETIME (4) | Датум/време | Датум, време |
TYPE_CLASS_DATETIME се ретко користи директно — обично се за унос датума користе DatePicker или DatePickerDialog, а не текстуално поље. Међутим, у неким сценаријима (брзи ручни унос датума) ова класа може бити корисна. Нема специјализовану тастатуру и обично приказује нумеричку тастатуру.
Свака класа уноса може се комбиновати са варијацијама (variation) — подтиповима назначеним у битовима 5–7. На пример, TYPE_TEXT_VARIATION_PASSWORD (бит 5) додаје класи TEXT скривени унос. Битови варијације: 0x000000E0 (маска TYPE_MASK_VARIATION).
Заставице-модификатори InputType (битови 8–31) додају додатне могућности основној класи. Оне не мењају тип тастатуре, али мењају понашање уноса. Заставице су специфичне за сваку класу — заставице за TEXT не раде са NUMBER и обрнуто. Испод су наведени главни модификатори за сваку класу.
Према Android Developers Documentation (2026), заставице за различите класе се не преклапају — покушај коришћења TEXT заставице са NUMBER биће игнорисан. За проверу постављене заставице користи се битски AND: (inputType and FLAG) != 0.
Правилна комбинација InputType са класама и заставицама је кључ за креирање удобних форми. Размотримо типичне сценарије и одговарајуће InputType конфигурације. Сваки сценариј оптимизује унос за одређени тип података, чинећи форму интуитивном и убрзавајући попуњавање.
| Сценариј | InputType | Тастатура |
|---|---|---|
| Име | textCapWords | QWERTY, свака реч великим словом |
| textEmailAddress | QWERTY са @ и . | |
| Лозинка | textPassword | QWERTY, скривени унос |
| Телефон | phone | Цифре са +, #, * |
| Цена | numberDecimal | Цифре са зарезом |
| Количина | number | Само цифре |
| Коментар | textCapSentences|textMultiLine | QWERTY, вишелинијски |
| Претрага | text|textNoSuggestions | QWERTY без сугестија |
// Комбинација за поље цене
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Комбинација за поље коментара
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Постављање InputType програмски путем setInputType() преписује претходну вредност. Ако је потребно променити само део маске (на пример, додати заставицу), потребно је сачувати тренутну вредност, изменити је и применити поново. Сваки позив setInputType() реконфигурише унутрашње филтере EditText-а.
Метод setRawInputType() се разликује од setInputType по томе што не изазива реконфигурацију филтера и сугестија. Користи се за привремену измену InputType без потпуног поновног учитавања стања EditText-а. Након позива setInputType() препоручује се поновно покретање IME како би се тастатура ажурирала.
// Промена између лозинке и видљивог текста
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
}
// Задржи позицију курсора
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Добиј класу уноса
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Добиј варијацију уноса
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Провери да ли је поље лозинке
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Правилан избор InputType није само UX, већ и безбедност и исправност података. Главне препоруке укључују: увек наводити експлицитан InputType за сваки EditText; користити најконкретнију класу уноса; не комбиновати заставице из различитих класа; за поља са осетљивим подацима користити варијације PASSWORD; за поља претраге користити imeOptions=„actionSearch”.
InputType такође утиче на рад услуга приступачности (Accessibility). Поља са типом textPassword добијају додатну заштиту од екранских читача — они не читају унете знакове наглас. За поља са textEmailAddress Screen Reader обавештава корисника да је поље намењено за email и нуди одговарајуће сугестије.
Према Material Design Guidelines (2025), InputType треба да одговара типу података које корисник уноси. Неправилан InputType не само да успорава унос, већ може довести и до грешака: на пример, ако се за унос телефонског броја остави textMultiLine, тастатура неће приказати нумерички блок, а корисник ће бити приморан да ручно мења распоред сваки пут.
Често постављана питања
InputType — је атрибут EditText-а који одређује тип унетих података путем битске маске. Keyboard Type — је незванични назив за визуелни тип тастатуре који активира InputType. InputType такође утиче на филтрирање знакова, аутоматску исправку и аутоматско довршавање, а не само на распоред тастатуре.
Постави editText.inputType = InputType.TYPE_CLASS_TEXT или користи константу InputType.TYPE_NULL (0x00000000) за потпуни ресет. Са TYPE_NULL поље неће приказивати тастатуру при фокусу. За повратак на стандардни текстуални унос постави TYPE_CLASS_TEXT без заставица.
Не може се креирати нова InputType класа, јер је део Android оквира. Међутим, можете комбиновати постојеће класе и заставице да бисте постигли жељено понашање. Додатно филтрирање знакова имплементирајте кроз InputFilter, који се поставља на EditText путем методе setFilters().
InputType се преноси систему уноса путем InputConnection-а. IME чита класу и варијацију InputType-а и бира одговарајући распоред тастатуре. На пример, TYPE_CLASS_NUMBER са TYPE_NUMBER_FLAG_DECIMAL наводи тастатуру да прикаже нумерички блок са зарезом. Већина модерних тастатура следи ове препоруке.
Користи својство editText.inputType у Kotlin-у или метод editText.getInputType() у Java-и. За издвајање класе примени маску: inputType and InputType.TYPE_MASK_CLASS. За проверу одређене заставице: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — ако је резултат != 0, заставица је постављена.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође