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
// Програмна настройка на типа клавиатура
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
// Цифрово въвеждане с десетична точка
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// Проверете въведеното число
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
// Превключване между текстово и цифрово въвеждане
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
// Проверете дали полето е цифрово
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
}

Често задавани въпроси

Какво ще стане, ако не посоча 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също