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 влияет на три аспекта: раскладку виртуальной клавиатуры (какие символы видны на основном экране), фильтрацию вводимых символов (какие символы разрешены) и поведение автозамены/автодополнения. Например, number-клавиатура отображает только цифры и десятичный разделитель, при этом она не показывает буквы, даже если пользователь переключит регистр. По данным Android Developers Documentation (2026), комбинирование классов с флагами позволяет создавать узкоспециализированные режимы: многострочный текст с автозаменой, число с плавающей точкой, пароль с возможностью автозаполнения.
Важно понимать, что Keyboard Type — это рекомендация системе ввода (IME). Некоторые сторонние клавиатуры (Gboard, SwiftKey) могут частично игнорировать указанный тип, если пользователь настроил собственные предпочтения. Однако большинство стандартных клавиатур Android и Google Gboard строго следуют указанному типу ввода.
// Programmatic keyboard type setup
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
TYPE_CLASS_TEXT — базовый класс для текстового ввода. Он активирует стандартную QWERTY-клавиатуру с буквами, цифрами и символами. Text-класс имеет наибольшее количество модификаторов, которые уточняют поведение: 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 создаёт полноценное поле для ввода чисел с плавающей точкой любого знака.
// Numeric input with decimal point
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Check entered number
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
TYPE_CLASS_PHONE активирует телефонную клавиатуру, которая отображает цифры и символы, характерные для телефонных номеров: +, #, *, (, ). В отличие от number-клавиатуры, 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), password-клавиатуры поддерживают автозаполнение через менеджеры паролей, если установлен атрибут 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 и немедленно обновляет клавиатуру, если поле в фокусе.
// Switch between text and numeric input
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)
}
// Check if field is numeric
fun isNumericInput(field: EditText): Boolean {
val type = field.inputType
return (type and InputType.TYPE_MASK_CLASS) ==
InputType.TYPE_CLASS_NUMBER
}
// Check if autocorrect is enabled
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 на кнопку Done. Другие варианты: 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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также