Keyboard Type — что это, виды клавиатуры и настройка ввода в Android

Автор: IT Sectr Опубликовано: 2026-07-07 Время чтения: 9 мин

Keyboard Type — это конфигурация виртуальной клавиатуры в Android, определяющая набор отображаемых символов и раскладку для конкретного поля ввода. Android поддерживает множество предустановленных типов: text (стандартная текстовая), number (цифровая), phone (телефонная), email (с символом @), textPassword (для паролей), datetime и другие. Каждый тип оптимизирует интерфейс ввода под конкретную задачу — например, email-клавиатура показывает символ @ и точку на основном экране. По данным Android Developers (2026), правильный выбор Keyboard Type сокращает количество нажатий при вводе на 20–40% по сравнению со стандартной текстовой клавиатурой.

Главное

  • Keyboard Type — режим клавиатуры, определяемый атрибутом android:inputType в Android.
  • Основные типы — text, number, phone, email, textPassword, datetime для разных сценариев ввода.
  • Оптимизация ввода — правильный тип клавиатуры ускоряет заполнение форм на 20–40%.
  • Комбинация флагов — inputType сочетает класс ввода и модификаторы (многострочность, автозамена).
  • IME options — атрибут imeOptions управляет кнопкой действия на клавиатуре (Done, Search, Next).

Что такое Keyboard Type в Android

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 строго следуют указанному типу ввода.

kotlin
// Programmatic keyboard type setup
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL or
    InputType.TYPE_NUMBER_FLAG_SIGNED

Text — стандартная текстовая клавиатура

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) рекомендуется отключать автозамену, так как она часто заменяет корректные термины на неправильные.

xml
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"

<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"

Number — цифровая клавиатура

TYPE_CLASS_NUMBER активирует цифровую клавиатуру, которая отображает только цифры, десятичный разделитель и знак минуса. Этот тип используется для полей ввода количества, цен, возраста, кодов и других числовых данных. Цифровая клавиатура занимает меньше места на экране, чем текстовая, и исключает случайный ввод букв.

Number имеет три модификатора: TYPE_NUMBER_FLAG_DECIMAL добавляет десятичную точку/запятую, TYPE_NUMBER_FLAG_SIGNED добавляет знак минуса для отрицательных чисел, TYPE_NUMBER_VARIATION_PASSWORD — для PIN-кодов, где цифры отображаются скрытыми символами. Комбинация number|numberDecimal|numberSigned создаёт полноценное поле для ввода чисел с плавающей точкой любого знака.

  • number — целые положительные числа (возраст, количество товаров).
  • numberDecimal — числа с десятичной частью (цены, вес, рост).
  • numberSigned — числа со знаком (температура, координаты).
  • numberPassword — скрытый ввод цифр для PIN-кодов.
kotlin
// 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

Phone и Email — специализированные клавиатуры

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.

xml
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"

<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"

Password — клавиатура для паролей

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", чтобы пользователь мог проверить введённый пароль перед отправкой формы.

xml
<!-- 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 в коде

Программная настройка Keyboard Type позволяет динамически менять режим клавиатуры в зависимости от контекста или пользовательского ввода. Например, при переключении типа поля (текст/число/дата) или при смене локали. Метод setInputType() принимает битовую маску InputType и немедленно обновляет клавиатуру, если поле в фокусе.

Динамическое переключение типа

kotlin
// 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)
}

Проверка текущего типа

kotlin
// 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
}

Часто задаваемые вопросы

Что будет, если не указать Keyboard Type?

Если inputType не указан, EditText по умолчанию использует TYPE_CLASS_TEXT с флагом TYPE_TEXT_FLAG_MULTI_LINE. Это означает стандартную QWERTY-клавиатуру и многострочный ввод. Для большинства полей рекомендуется явно указывать inputType, чтобы обеспечить корректное поведение клавиатуры и фильтрацию символов.

Как сделать клавиатуру с кнопкой "Done" вместо "Enter"?

Используй атрибут 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()?

После вызова setInputType() необходимо заново показать клавиатуру, так как система может не обновить IME автоматически. Вызови InputMethodManager.restartInput(view) для принудительного обновления. Если поле не в фокусе, сначала вызови requestFocus(), затем restartInput.

Итоги

  • Keyboard Type определяет раскладку, фильтрацию и поведение клавиатуры для поля ввода Android.
  • text — стандартная QWERTY-клавиатура с модификаторами автозамены, заглавных букв и многострочности.
  • number — цифровая клавиатура для целых и дробных чисел с опцией signed и decimal.
  • phone — телефонная клавиатура с цифрами, +, #, * и поддержкой буквенных номеров.
  • email — клавиатура с @, точкой и быстрым доступом к доменным расширениям.
  • textPassword — скрытый ввод с отключением автозамены и сохранения в словарь.
  • imeOptions настраивает кнопку действия на клавиатуре: Done, Search, Next, Send.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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