InputType — co to je, atributy vstupu a jejich nastavení v Androidu

Autor: IT Sectr Publikováno: 2026-07-07 Doba čtení: 9 min

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 — bitová maska určující třídu vstupu a modifikátory pro EditText.
  • Třídy vstupu — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME.
  • Modifikátory — příznaky upřesňující chování: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES.
  • Kombinování — třída a modifikátory se spojují bitovým OR pro přesnou konfiguraci.
  • Vliv — správný InputType urychluje zadávání, snižuje chyby a zlepšuje UX formuláře.

Co je InputType v Androidu

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.

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

Třídy InputType: TEXT, NUMBER, PHONE, DATETIME

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řídaKonstantaKlávesnicePoužití
TEXTTYPE_CLASS_TEXT (1)QWERTYText, komentáře, popis
NUMBERTYPE_CLASS_NUMBER (2)NumerickáMnožství, cena, věk
PHONETYPE_CLASS_PHONE (3)TelefonníTelefonní číslo
DATETIMETYPE_CLASS_DATETIME (4)Datum/časDatum, č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

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.

Příznaky pro TEXT

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — všechna písmena velká.
  • TYPE_TEXT_FLAG_CAP_WORDS — každé slovo začíná velkým písmenem.
  • TYPE_TEXT_FLAG_CAP_SENTENCES — velké písmeno na začátku věty (výchozí).
  • TYPE_TEXT_FLAG_AUTO_CORRECT — automatická oprava překlepů.
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — automatické doplňování (pro AutoCompleteTextView).
  • TYPE_TEXT_FLAG_MULTI_LINE — víceřádkové zadávání.
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — vypnutí návrhů.

Příznaky pro NUMBER

  • TYPE_NUMBER_FLAG_SIGNED — povoluje záporná čísla (znaménko mínus).
  • TYPE_NUMBER_FLAG_DECIMAL — povoluje desetinnou čárku.

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.

Kombinace InputType: příklady pro různé scénáře

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ářInputTypeKlávesnice
JménotextCapWordsQWERTY, každé slovo velkým písmenem
EmailtextEmailAddressQWERTY s @ a .
HeslotextPasswordQWERTY, skrytý vstup
TelefonphoneČíslice s +, #, *
CenanumberDecimalČíslice s čárkou
MnožstvínumberPouze číslice
KomentářtextCapSentences|textMultiLineQWERTY, víceřádkový
Hledánítext|textNoSuggestionsQWERTY bez návrhů
kotlin
// 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

Programová práce s InputType

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í režimů

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

Extrakce třídy a variace

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

Nejlepší postupy výběru InputType

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.

  • Explicitnost — vždy explicitně nastavuj InputType, nespoléhej na výchozí hodnotu (textMultiLine).
  • Specifičnost — používej nejkonkrétnější typ: textEmailAddress, ne text pro email.
  • Bezpečnost — pro hesla, PIN a údaje karet používej variace PASSWORD.
  • Automatické doplňování — kombinuj InputType s autofillHints pro podporu správců hesel.
  • Testování — kontroluj chování na různých klávesnicích (Gboard, SwiftKey, Samsung Keyboard).

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

Čím se liší InputType od Keyboard Type?

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.

Jak resetovat InputType na výchozí hodnotu?

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ů.

Lze vytvořit vlastní InputType?

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().

Jak InputType ovlivňuje IME (klávesnici)?

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.

Jak zkontrolovat InputType za běhu?

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í

  • InputType — bitová maska sestávající z třídy vstupu (TEXT, NUMBER, PHONE, DATETIME) a modifikátorů.
  • Třída vstupu určuje základní typ dat a typ zobrazované klávesnice.
  • Modifikátory upřesňují chování: víceřádkovost, automatická oprava, velká písmena, skrytý vstup.
  • Kombinování bitovým OR umožňuje vytvářet přesné konfigurace pro různé scénáře.
  • Variace PASSWORD vypínají automatickou opravu, skrývají znaky a brání zápisu do slovníku.
  • Programové nastavení pomocí setInputType() vyžaduje restart IME pro aktualizaci klávesnice.
  • Nejlepší postupy — explicitně nastavuj InputType, používej konkrétní typy a testuj na různých klávesnicích.

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í.

Prodiskutovat projekt

Přečtěte si také