InputType — шта је то, атрибути уноса и њихово подешавање у Android-у

Аутор: IT Sectr Објављено: 2026-07-07 Време читања: 9 мин

InputType — је Android атрибут који одређује карактер унетих података и понашање тастатуре за текстуална поља. Вредност InputType представља битску маску која комбинује класу уноса (текст, број, телефон, датум) и модификаторе (вишелинијски, аутоматска исправка, велика слова, скривени унос). InputType утиче на тип приказане тастатуре, филтрирање унетих знакова и рад аутоматског довршавања. Према Android Developers (2026), InputType је један од најважнијих атрибута за обезбеђивање исправног уноса података и мора бити експлицитно постављен за свако изменљиво текстуално поље.

Главно

  • InputType — битска маска која одређује класу уноса и модификаторе за EditText.
  • Класе уноса — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME.
  • Модификатори — заставице које прецизирају понашање: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES.
  • Комбиновање — класа и модификатори се обједињују путем битског OR за прецизну конфигурацију.
  • Утицај — правилан InputType убрзава унос, смањује грешке и побољшава UX форме.

Шта је InputType у Android-у

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.

kotlin
// Основне 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

Класе InputType: TEXT, NUMBER, PHONE, DATETIME

У Android-у су дефинисане четири основне InputType класе. Свака класа одговара одређеној категорији података и активира одговарајући тип тастатуре. Класа је назначена у битовима 0–4 битске маске и може се издвојити путем маске TYPE_MASK_CLASS (0x0F).

КласаКонстантаТастатураПримена
TEXTTYPE_CLASS_TEXT (1)QWERTYТекст, коментари, опис
NUMBERTYPE_CLASS_NUMBER (2)НумеричкаКоличина, цена, старост
PHONETYPE_CLASS_PHONE (3)ТелефонскаБрој телефона
DATETIMETYPE_CLASS_DATETIME (4)Датум/времеДатум, време

TYPE_CLASS_DATETIME се ретко користи директно — обично се за унос датума користе DatePicker или DatePickerDialog, а не текстуално поље. Међутим, у неким сценаријима (брзи ручни унос датума) ова класа може бити корисна. Нема специјализовану тастатуру и обично приказује нумеричку тастатуру.

Свака класа уноса може се комбиновати са варијацијама (variation) — подтиповима назначеним у битовима 5–7. На пример, TYPE_TEXT_VARIATION_PASSWORD (бит 5) додаје класи TEXT скривени унос. Битови варијације: 0x000000E0 (маска TYPE_MASK_VARIATION).

Заставице-модификатори InputType

Заставице-модификатори InputType (битови 8–31) додају додатне могућности основној класи. Оне не мењају тип тастатуре, али мењају понашање уноса. Заставице су специфичне за сваку класу — заставице за TEXT не раде са NUMBER и обрнуто. Испод су наведени главни модификатори за сваку класу.

Заставице за TEXT

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — сва слова велика.
  • TYPE_TEXT_FLAG_CAP_WORDS — свака реч почиње великим словом.
  • TYPE_TEXT_FLAG_CAP_SENTENCES — велико слово на почетку реченице (подразумевано).
  • TYPE_TEXT_FLAG_AUTO_CORRECT — аутоматска исправка грешака.
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — аутоматско довршавање (за AutoCompleteTextView).
  • TYPE_TEXT_FLAG_MULTI_LINE — вишелинијски унос.
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — искључивање сугестија.

Заставице за NUMBER

  • TYPE_NUMBER_FLAG_SIGNED — дозвољава негативне бројеве (знак минуса).
  • TYPE_NUMBER_FLAG_DECIMAL — дозвољава децималну тачку.

Према Android Developers Documentation (2026), заставице за различите класе се не преклапају — покушај коришћења TEXT заставице са NUMBER биће игнорисан. За проверу постављене заставице користи се битски AND: (inputType and FLAG) != 0.

Комбинације InputType: примери за различите сценарије

Правилна комбинација InputType са класама и заставицама је кључ за креирање удобних форми. Размотримо типичне сценарије и одговарајуће InputType конфигурације. Сваки сценариј оптимизује унос за одређени тип података, чинећи форму интуитивном и убрзавајући попуњавање.

СценаријInputTypeТастатура
ИмеtextCapWordsQWERTY, свака реч великим словом
EmailtextEmailAddressQWERTY са @ и .
ЛозинкаtextPasswordQWERTY, скривени унос
ТелефонphoneЦифре са +, #, *
ЦенаnumberDecimalЦифре са зарезом
КоличинаnumberСамо цифре
КоментарtextCapSentences|textMultiLineQWERTY, вишелинијски
Претрагаtext|textNoSuggestionsQWERTY без сугестија
kotlin
// Комбинација за поље цене
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

Постављање InputType програмски путем setInputType() преписује претходну вредност. Ако је потребно променити само део маске (на пример, додати заставицу), потребно је сачувати тренутну вредност, изменити је и применити поново. Сваки позив setInputType() реконфигурише унутрашње филтере EditText-а.

Метод setRawInputType() се разликује од setInputType по томе што не изазива реконфигурацију филтера и сугестија. Користи се за привремену измену InputType без потпуног поновног учитавања стања EditText-а. Након позива setInputType() препоручује се поновно покретање IME како би се тастатура ажурирала.

Пребацивање режима

kotlin
// Промена између лозинке и видљивог текста
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)
}

Издвајање класе и варијације

kotlin
// Добиј класу уноса
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

Правилан избор InputType није само UX, већ и безбедност и исправност података. Главне препоруке укључују: увек наводити експлицитан InputType за сваки EditText; користити најконкретнију класу уноса; не комбиновати заставице из различитих класа; за поља са осетљивим подацима користити варијације PASSWORD; за поља претраге користити imeOptions=„actionSearch”.

InputType такође утиче на рад услуга приступачности (Accessibility). Поља са типом textPassword добијају додатну заштиту од екранских читача — они не читају унете знакове наглас. За поља са textEmailAddress Screen Reader обавештава корисника да је поље намењено за email и нуди одговарајуће сугестије.

  • Експлицитност — увек експлицитно постављај InputType, не ослањај се на подразумевану вредност (textMultiLine).
  • Специфичност — користи најконкретнији тип: textEmailAddress, а не text за email.
  • Безбедност — за лозинке, PIN и податке картица користи варијације PASSWORD.
  • Аутоматско попуњавање — комбинуј InputType са autofillHints за подршку менаџерима лозинки.
  • Тестирање — проверавај понашање на различитим тастатурама (Gboard, SwiftKey, Samsung Keyboard).

Према Material Design Guidelines (2025), InputType треба да одговара типу података које корисник уноси. Неправилан InputType не само да успорава унос, већ може довести и до грешака: на пример, ако се за унос телефонског броја остави textMultiLine, тастатура неће приказати нумерички блок, а корисник ће бити приморан да ручно мења распоред сваки пут.

Често постављана питања

По чему се InputType разликује од Keyboard Type?

InputType — је атрибут EditText-а који одређује тип унетих података путем битске маске. Keyboard Type — је незванични назив за визуелни тип тастатуре који активира InputType. InputType такође утиче на филтрирање знакова, аутоматску исправку и аутоматско довршавање, а не само на распоред тастатуре.

Како ресетовати InputType на подразумевану вредност?

Постави editText.inputType = InputType.TYPE_CLASS_TEXT или користи константу InputType.TYPE_NULL (0x00000000) за потпуни ресет. Са TYPE_NULL поље неће приказивати тастатуру при фокусу. За повратак на стандардни текстуални унос постави TYPE_CLASS_TEXT без заставица.

Може ли се креирати прилагођени InputType?

Не може се креирати нова InputType класа, јер је део Android оквира. Међутим, можете комбиновати постојеће класе и заставице да бисте постигли жељено понашање. Додатно филтрирање знакова имплементирајте кроз InputFilter, који се поставља на EditText путем методе setFilters().

Како InputType утиче на IME (тастатуру)?

InputType се преноси систему уноса путем InputConnection-а. IME чита класу и варијацију InputType-а и бира одговарајући распоред тастатуре. На пример, TYPE_CLASS_NUMBER са TYPE_NUMBER_FLAG_DECIMAL наводи тастатуру да прикаже нумерички блок са зарезом. Већина модерних тастатура следи ове препоруке.

Како проверити InputType у runtime-у?

Користи својство editText.inputType у Kotlin-у или метод editText.getInputType() у Java-и. За издвајање класе примени маску: inputType and InputType.TYPE_MASK_CLASS. За проверу одређене заставице: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — ако је резултат != 0, заставица је постављена.

Резиме

  • InputType — битска маска која се састоји од класе уноса (TEXT, NUMBER, PHONE, DATETIME) и модификатора.
  • Класа уноса одређује основни тип података и тип приказане тастатуре.
  • Модификатори прецизирају понашање: вишелинијски, аутоматска исправка, велика слова, скривени унос.
  • Комбиновање путем битског OR омогућава креирање прецизних конфигурација за различите сценарије.
  • PASSWORD варијације искључују аутоматску исправку, скривају знакове и спречавају упис у речник.
  • Програмско постављање путем setInputType() захтева поновно покретање IME ради ажурирања тастатуре.
  • Најбоље праксе — експлицитно постављај InputType, користи конкретне типове и тестирај на различитим тастатурама.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође