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.
  • Комбінування — клас і модифікатори об'єднуються через побітове АБО для точної конфігурації.
  • Вплив — правильний 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, а не текстове поле. Однак у деяких сценаріях (швидке ручне введення дати) цей клас може бути корисним. Він не має спеціалізованої клавіатури і зазвичай відображає цифрову клавіатуру.

Кожен клас введення може бути скомбінований з варіаціями — підтипами, вказаними в бітах 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 буде проігнорована. Для перевірки встановленого прапорця використовується побітове І: (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 екранний диктор повідомляє користувачеві, що поле призначене для 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 framework. Однак можна комбінувати існуючі класи та прапорці для досягнення потрібної поведінки. Додаткову фільтрацію символів реалізуй через 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) та модифікаторів.
  • Клас введення визначає базовий тип даних та тип клавіатури, що відображається.
  • Модифікатори уточнюють поведінку: багаторядковість, автовиправлення, великі літери, приховане введення.
  • Комбінування через побітове АБО дозволяє створювати точні конфігурації для різних сценаріїв.
  • Варіації PASSWORD вимикають автовиправлення, приховують символи та запобігають запису в словник.
  • Програмне встановлення через setInputType() потребує перезапуску IME для оновлення клавіатури.
  • Найкращі практики — явно задавай InputType, використовуй конкретні типи та тестуй на різних клавіатурах.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також