Keyboard Type — це конфігурація віртуальної клавіатури в Android, яка визначає набір відображуваних символів та розкладку для конкретного поля введення. Android підтримує багато попередньо встановлених типів: text (стандартний текст), number (цифрова), phone (телефонна), email (зі символом @), textPassword (для паролів), datetime та інші. Кожен тип оптимізує інтерфейс введення для конкретного завдання — наприклад, email-клавіатура показує символ @ та крапку на основному екрані. За даними Android Developers (2026), правильний вибір Keyboard Type скорочує кількість натискань при введенні на 20–40% порівняно зі стандартною текстовою клавіатурою.
Головне
Keyboard Type визначається значенням атрибута android:inputType в XML або програмним викликом setInputType() в коді. InputType являє собою бітову маску, де клас введення комбінується з прапорами-модифікаторами. Базові класи: TYPE_CLASS_TEXT для тексту, TYPE_CLASS_NUMBER для чисел, TYPE_CLASS_PHONE для телефонів, TYPE_CLASS_DATETIME для дат та часу.
Кожен Keyboard Type впливає на три аспекти: розкладку віртуальної клавіатури (які символи видні на основному екрані), фільтрацію введених символів (які символи дозволені) та поведінку автовиправлення/автозавершення. Наприклад, цифрова клавіатура відображує лише цифри та десятковий роздільник, і не показує літери, навіть якщо користувач перемикне регістр. За даними Android Developers Documentation (2026), комбінування класів з прапорами дозволяє створювати вузькоспеціалізовані режими: багаторядковий текст з автовиправленням, число з плаваючою крапкою, пароль з підтримкою автозаповнення.
Важливо розуміти, що Keyboard Type — це рекомендація для системи введення (IME). Деякі сторонні клавіатури (Gboard, SwiftKey) можуть частково ігнорувати зазначений тип, якщо користувач налаштував власні побажання. Однак більшість стандартних клавіатур Android та Google Gboard суворо дотримуються зазначеного типу введення.
// Програмне налаштування типу клавіатури
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
TYPE_CLASS_TEXT — базовий клас для текстового введення. Він активує стандартну клавіатуру QWERTY з літерами, цифрами та символами. Текстовий клас має найбільшу кількість модифікаторів, що уточнюють поведінку: TYPE_TEXT_FLAG_CAP_SENTENCES (автоматична велика літера на початку речення), TYPE_TEXT_FLAG_AUTO_CORRECT (автовиправлення), TYPE_TEXT_FLAG_MULTI_LINE (багаторядковий режим), TYPE_TEXT_FLAG_NO_SUGGESTIONS (відключення підказок).
Модифікатори текстової клавіатури можна комбінувати, створюючи точну конфігурацію: наприклад, text|textCapSentences|textAutoCorrect підходить для поля введення коментарів, де потрібна автоматична велика літера та виправлення помилок. Водночас text|textNoSuggestions використовується для введення коду або спеціальних термінів, де автовиправлення може завадити.
За даними UX Stack Exchange (2025), текстова клавіатура з увімкненим автовиправленням прискорює введення на 15–25% для середнього користувача, але для технічних термінів (код, URL, email) рекомендується вимкнути автовиправлення, оскільки воно часто замінює правильні терміни неправильними.
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"
<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"
TYPE_CLASS_NUMBER активує цифрову клавіатуру, яка відображує лише цифри, десятковий роздільник та знак мінуса. Цей тип використовується для полів введення кількості, цін, віку, кодів та інших числових даних. Цифрова клавіатура займає менше місця на екрані, ніж текстова, та уникає випадкового введення літер.
Number має три модифікатори: TYPE_NUMBER_FLAG_DECIMAL додає десяткову крапку/кому, TYPE_NUMBER_FLAG_SIGNED додає знак мінуса для від’ємних чисел, TYPE_NUMBER_VARIATION_PASSWORD — для PIN-кодів, де цифри відображуються прихованими символами. Комбінація number|numberDecimal|numberSigned створює повноцінне поле для введення чисел з плаваючою крапкою будь-якого знаку.
// Числове введення з десятковою крапкою
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Перевірити введене число
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
TYPE_CLASS_PHONE активує телефонну клавіатуру, яка відображує цифри та характерні для номерів телефонів символи: +, #, *, (, ). На відміну від цифрової клавіатури, phone також показує буквену розкладку в додатковому режимі, оскільки телефонні номери можуть містити літери (наприклад, 1-800-FLOWERS). Клас phone не має додаткових прапорів, але підтримує TYPE_TEXT_VARIATION_PHONE_ETC для введення додаткових номерів.
TYPE_TEXT_VARIATION_EMAIL_ADDRESS активує email-клавіатуру, на якій символ @ та крапка знаходяться на основному екрані, а також доступні поширені доменні розширення (.com, .net, .org). Gboard додатково показує кнопки з популярними доменами при введенні після @. Email-клавіатура автоматично вимикає автовиправлення, оскільки email-адреси можуть містити нестандартні комбінації символів.
За даними Google Material Design Guidelines (2025), для телефонних полів рекомендується додатково зазначати атрибут android:digits, який обмежує набір дозволених символів. Для email-полів також важливо зазначати autofillHints="email" для підтримки автозаповнення від менеджера паролів та Google Autofill.
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"
<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"
TYPE_TEXT_VARIATION_PASSWORD та TYPE_NUMBER_VARIATION_PASSWORD — це режими введення для конфіденційних даних. При встановленні textPassword введені символи відображуються у вигляді точок або зірочок (залежно від версії Android та клавіатури). Клавіатура в цьому режимі вимикає автовиправлення та збереження введених слів у словник користувача, запобігаючи витоку пароля через функції предиктивного введення.
Клавіатура Password також вимикає можливість створення скріншотів вмісту поля (прапор FLAG_SECURE), хоча цей поведінка залежить від конкретної реалізації клавіатури. Починаючи з Android 8.0 (API 26), клавіатури для паролів підтримують автозаповнення через менеджери паролів, якщо встановлено атрибут importantForAutofill="yes".
За даними Android Security Recommendations (2025), для полів паролів також рекомендується: встановлювати maxLength для запобігання надмірно довгим паролям (які можуть бути вектором атаки на БД), використовувати inputType="textPassword" разом з TextInputLayout та endIconMode="password_toggle", щоб користувач міг перевірити введений пароль перед відправленням форми.
<!-- Password field with show/hide icon -->
@+id/tilPasswordField
app:endIconMode="password_toggle">
@+id/etPasswordField
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />
</com.google.android.material.textfield.TextInputLayout>
Програмне налаштування Keyboard Type дозволяє динамічно змінювати режим клавіатури в залежності від контексту або вводу користувача. Наприклад, при перемиканні типу поля (текст/число/дата) або при зміні локалі. Метод setInputType() приймає бітову маску InputType і негайно оновлює клавіатуру, якщо поле в фокусі.
// Перемикатися між текстовим та числовим введенням
fun switchInputType(field: EditText, isNumeric: Boolean) {
field.inputType = if (isNumeric) {
InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
}
field.setSelection(field.text.length)
}
// Перевірити, чи є поле числовим
fun isNumericInput(field: EditText): Boolean {
val type = field.inputType
return (type and InputType.TYPE_MASK_CLASS) ==
InputType.TYPE_CLASS_NUMBER
}
// Перевірити, чи увімкнено автовиправлення
fun isAutoCorrectEnabled(field: EditText): Boolean {
return (field.inputType and
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}
Часто запитувані питання
Якщо inputType не зазначено, EditText типово використовує TYPE_CLASS_TEXT з прапором TYPE_TEXT_FLAG_MULTI_LINE. Це означає стандартну клавіатуру QWERTY та багаторядкове введення. Для більшості полів рекомендується явно зазначати inputType, щоб забезпечити коректну поведінку клавіатури та фільтрацію символів.
Використай атрибут android:imeOptions="actionDone" на EditText. Це замінить кнопку Enter на кнопку Готово. Інші варіанти: actionSearch (лупа), actionNext (стрілка вправо), actionSend (надіслати). Обробку натискання реалізуй через OnEditorActionListener в коді.
Неможливо відключити вібрацію для конкретного поля — це системне налаштування, яким керує користувач у налаштуваннях клавіатури. Однак можна запобігти появі клавіатури повністю, встановивши на EditText атрибут android:focusable="false" або скасувавши показ через dispatchTouchEvent.
Встанови android:inputType="none" або програмно виклич editText.setKeyListener(null). Поле буде відображати текст, але клавіатура не з'явиться при фокусі. Користувач зможе виділити та скопіювати текст, але не змінювати його. Альтернатива — використання TextView з textIsSelectable="true".
Після виклику setInputType() необхідно знову показати клавіатуру, оскільки система може не оновити IME автоматично. Виклич InputMethodManager.restartInput(view) для примусового оновлення. Якщо поле не в фокусі, спочатку виклич requestFocus(), потім restartInput.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також