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.
  • Комбиниране — класът и модификаторите се обединяват чрез побитово OR за точна конфигурация.
  • Влияние — правилният 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, а не текстово поле. Въпреки това, в някои сценарии (бързо ръчно въвеждане на дата) този клас може да бъде полезен. Той няма специализирана клавиатура и обикновено показва цифрова клавиатура.

Всеки клас на въвеждане може да бъде комбиниран с вариации (variation) — подтипове, посочени в битове 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 ще бъде игнориран. За проверка на зададен флаг се използва побитово AND: (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, Screen Reader информира потребителя, че полето е предназначено за имейл, и предлага подходящи предложения.

  • Изричност — винаги изрично задавайте InputType, не разчитайте на стойността по подразбиране (textMultiLine).
  • Конкретност — използвайте най-конкретния тип: textEmailAddress, а не text за имейл.
  • Сигурност — за пароли, 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 рамката. Въпреки това, можете да комбинирате съществуващи класове и флагове, за да постигнете желаното поведение. Допълнително филтриране на символи реализирайте чрез InputFilter, който се задава на EditText чрез метода setFilters().

Как InputType влияе на IME (клавиатурата)?

InputType се предава на системата за въвеждане чрез InputConnection. IME чете класа и вариацията на InputType и избира съответното оформление на клавиатурата. Например, TYPE_CLASS_NUMBER с TYPE_NUMBER_FLAG_DECIMAL кара клавиатурата да покаже цифров блок с десетичен знак. Повечето съвременни клавиатури следват тези препоръки.

Как да проверите InputType по време на изпълнение?

Използвайте свойството 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) и модификатори.
  • Клас на въвеждане определя основния тип данни и типа на показваната клавиатура.
  • Модификатори уточняват поведението: многоредовост, автоматична корекция, главни букви, скрито въвеждане.
  • Комбиниране чрез побитово OR позволява създаване на точни конфигурации за различни сценарии.
  • Вариациите PASSWORD изключват автоматичната корекция, скриват символите и предотвратяват запис в речника.
  • Програмно задаване чрез setInputType() изисква рестартиране на IME за актуализиране на клавиатурата.
  • Най-добри практики — изрично задавайте InputType, използвайте конкретни типове и тествайте на различни клавиатури.

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

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

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