InputType — je atribut Androidu, který určuje charakter zadávaných dat a chování klávesnice pro textová pole. Hodnota InputType představuje bitovou masku, která kombinuje třídu vstupu (text, číslo, telefon, datum) a modifikátory (víceřádkovost, automatická oprava, velká písmena, skrytý vstup). InputType ovlivňuje typ zobrazované klávesnice, filtrování zadávaných znaků a fungování automatického doplňování. Podle Android Developers (2026) je InputType jedním z nejdůležitějších atributů pro zajištění správného zadávání dat a měl by být explicitně nastaven pro každé upravitelné textové pole.
Hlavní body
InputType — je celočíselná konstanta (Int), která kóduje režim zadávání pro textové pole. V Androidu je definována ve třídě android.text.InputType. Hodnota InputType se skládá ze dvou částí: třídy vstupu (bity 0–4) a modifikátorů (bity 5–31). Třída vstupu určuje základní typ dat — text, číslo, telefon, datum. Modifikátory upřesňují chování v rámci vybrané třídy — například pro textovou třídu lze zapnout automatickou opravu, velká písmena nebo víceřádkové zadávání.
Mechanismus InputType funguje na třech úrovních: na úrovni frameworku Androidu určuje, který InputConnection bude vytvořen (spojení mezi EditText a IME); na úrovni IME (klávesnice) udává, které znaky zobrazit a jak zpracovat zadávání; na úrovni aplikace filtruje znaky přes InputFilter zabudovaný v EditText. Podle Android Source Code (AOSP, 2026) je bitová maska zpracovávána v metodě TextView.getInputType(), která vrací aktuální hodnotu, a setInputType(), která překonfiguruje vnitřní filtry a spojení s IME.
Důležitá vlastnost InputType — z bezpečnostních důvodů jej nelze přečíst z jiného procesu. To zabraňuje krádeži dat přístupem k typu vstupu (například určení, zda je pole heslem). Při pokusu o přečtení InputType z jiné aplikace se standardně vrací TYPE_CLASS_TEXT.
// Základní konstanty 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
// Maska pro extrakci třídy
InputType.TYPE_MASK_CLASS // 0x0000000F
V Androidu jsou definovány čtyři základní třídy InputType. Každá třída odpovídá určité kategorii dat a aktivuje odpovídající typ klávesnice. Třída je uvedena v bitech 0–4 bitové masky a lze ji extrahovat pomocí masky TYPE_MASK_CLASS (0x0F).
| Třída | Konstanta | Klávesnice | Použití |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Text, komentáře, popis |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numerická | Množství, cena, věk |
| PHONE | TYPE_CLASS_PHONE (3) | Telefonní | Telefonní číslo |
| DATETIME | TYPE_CLASS_DATETIME (4) | Datum/čas | Datum, čas |
TYPE_CLASS_DATETIME se používá zřídka přímo — obvykle se pro zadání data používá DatePicker nebo DatePickerDialog, nikoli textové pole. Nicméně v některých scénářích (rychlý ruční vstup data) může být tato třída užitečná. Nemá specializovanou klávesnici a obvykle zobrazuje numerickou klávesnici.
Každá třída vstupu může být kombinována s variacemi (variation) — podtypy uvedenými v bitech 5–7. Například TYPE_TEXT_VARIATION_PASSWORD (bit 5) přidává ke třídě TEXT skrytý vstup. Bity variace: 0x000000E0 (maska TYPE_MASK_VARIATION).
Příznaky-modifikátory InputType (bity 8–31) přidávají další možnosti k základní třídě. Nemění typ klávesnice, ale upravují chování zadávání. Příznaky jsou specifické pro každou třídu — příznaky pro TEXT nefungují s NUMBER a naopak. Níže jsou uvedeny hlavní modifikátory pro každou třídu.
Podle Android Developers Documentation (2026) se příznaky pro různé třídy nepřekrývají — pokus použít příznak TEXT s NUMBER bude ignorován. Pro kontrolu nastaveného příznaku se používá bitový AND: (inputType and FLAG) != 0.
Správná kombinace InputType s třídami a příznaky je klíčem k vytváření pohodlných formulářů. Podívejme se na typické scénáře a odpovídající konfigurace InputType. Každý scénář optimalizuje zadávání pro konkrétní typ dat, činí formulář intuitivním a urychluje vyplňování.
| Scénář | InputType | Klávesnice |
|---|---|---|
| Jméno | textCapWords | QWERTY, každé slovo velkým písmenem |
| textEmailAddress | QWERTY s @ a . | |
| Heslo | textPassword | QWERTY, skrytý vstup |
| Telefon | phone | Číslice s +, #, * |
| Cena | numberDecimal | Číslice s čárkou |
| Množství | number | Pouze číslice |
| Komentář | textCapSentences|textMultiLine | QWERTY, víceřádkový |
| Hledání | text|textNoSuggestions | QWERTY bez návrhů |
// Kombinace pro pole ceny
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Kombinace pro pole komentáře
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Nastavení InputType programově pomocí setInputType() přepisuje předchozí hodnotu. Pokud je třeba změnit pouze část masky (například přidat příznak), je nutné uložit aktuální hodnotu, upravit ji a znovu aplikovat. Každé volání setInputType() překonfiguruje vnitřní filtry EditTextu.
Metoda setRawInputType() se liší od setInputType tím, že nezpůsobuje překonfigurování filtrů a návrhů. Používá se pro dočasnou změnu InputType bez úplného přenačtení stavu EditTextu. Po volání setInputType() se doporučuje restartovat IME, aby se klávesnice aktualizovala.
// Přepínání mezi heslem a viditelným textem
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
}
// Zachovat pozici kurzoru
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Získat třídu vstupu
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Získat variaci vstupu
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Zkontrolovat, zda je pole heslem
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Správný výběr InputType není jen UX, ale také bezpečnost a správnost dat. Hlavní doporučení zahrnují: vždy explicitně nastavit InputType pro každý EditText; používat nejkonkrétnější třídu vstupu; nekombinovat příznaky z různých tříd; pro pole s citlivými údaji používat variace PASSWORD; pro pole vyhledávání používat imeOptions=„actionSearch”.
InputType také ovlivňuje práci služeb usnadnění přístupu (Accessibility). Pole s typem textPassword získávají dodatečnou ochranu před čtečkami obrazovky — ty nepřečítají zadávané znaky nahlas. Pro pole s textEmailAddress Screen Reader informuje uživatele, že pole je určeno pro email, a nabízí odpovídající návrhy.
Podle Material Design Guidelines (2025) by InputType měl odpovídat typu dat, která uživatel zadává. Nesprávný InputType nejen zpomaluje zadávání, ale může vést k chybám: například pokud pro zadání telefonního čísla zůstane textMultiLine, klávesnice nezobrazí numerický blok a uživatel bude nucen ručně přepínat rozložení pokaždé.
Často kladené dotazy
InputType — je atribut EditTextu, který určuje typ zadávaných dat pomocí bitové masky. Keyboard Type — je neoficiální název pro vizuální typ klávesnice, který je aktivován InputType. InputType také ovlivňuje filtrování znaků, automatickou opravu a automatické doplňování, nejen rozložení klávesnice.
Nastav editText.inputType = InputType.TYPE_CLASS_TEXT nebo použij konstantu InputType.TYPE_NULL (0x00000000) pro úplný reset. Při TYPE_NULL pole nezobrazí klávesnici při zaostření. Pro návrat ke standardnímu textovému vstupu nastav TYPE_CLASS_TEXT bez příznaků.
Nelze vytvořit novou třídu InputType, protože je součástí frameworku Android. Můžete však kombinovat existující třídy a příznaky k dosažení požadovaného chování. Další filtrování znaků implementujte pomocí InputFilter, který se nastavuje na EditText pomocí metody setFilters().
InputType je předáván vstupnímu systému přes InputConnection. IME čte třídu a variaci InputType a vybírá odpovídající rozložení klávesnice. Například TYPE_CLASS_NUMBER s TYPE_NUMBER_FLAG_DECIMAL způsobí, že klávesnice zobrazí numerický blok s čárkou. Většina moderních klávesnic se řídí těmito doporučeními.
Použij vlastnost editText.inputType v Kotlinu nebo metodu editText.getInputType() v Javě. Pro extrakci třídy aplikuj masku: inputType and InputType.TYPE_MASK_CLASS. Pro kontrolu konkrétního příznaku: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — pokud je výsledek != 0, příznak je nastaven.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také