InputFilter: co to je, rozhraní InputFilter a filtrování v Androidu

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

InputFilter je rozhraní Android SDK, které umožňuje zachytit a upravovat zadávaný text před jeho zobrazením v EditText. Vývojář nastavuje pravidla filtrování: povolené znaky, maximální délku, formát vstupu. Podle Android Developers, 2026 se InputFilter používá pro omezení zadávání písmen, číslic, speciálních znaků a automatické formátování textu. Na rozdíl od TextWatcher, filtr funguje před změnou textu, což zabraňuje nesprávnému vstupu na úrovni zdroje.

Hlavní body

  • InputFilter — rozhraní Android pro omezení a formátování vstupu v EditText a TextView.
  • Metoda filter se volá před změnou textu a vrací filtrovaný CharSequence nebo null, pokud je změna povolena.
  • InputFilter.LengthFilter — standardní implementace pro omezení maximální délky textu.
  • Vlastní filtry umožňují zakázat určité znaky, aplikovat masku vstupu nebo převádět velikost písmen.
  • Řetězec filtrů — na jeden EditText lze aplikovat nękolik InputFilter současně a jsou prováděny sekvenčně.

Co je InputFilter a k čemu slouží?

InputFilter je funkční rozhraní z balíčku android.text, které definuje jedinou metodu filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend). Je voláno automaticky pokaždé, když se uživatel pokusí zadat, vložit nebo nahradit text v EditText. Návratová hodnota určuje, zda bude změna přijata, odmítnuta nebo upravena.

Hlavním účelem InputFilter je zabránění nesprávnému vstupu před tím, než se text dostane do pole. Metoda filter přijímá šest parametrů. Pokud metoda vrátí null, změna je přijata beze změn. Pokud vrátí prázdný řetězec „“, změna je blokována. InputFilter nemění původní zdroj dat, pouze vrací filtrovanou verzi.

Jak InputFilter funguje

Například, pokud se uživatel pokusí vložit písmeno „a“ do pole, kde jsou povoleny pouze číslice, filtr vrátí „“ a znak se neobjeví. InputFilter nemění původní zdroj dat, pouze vrací filtrovanou verzi.

Standardní filtry v Android SDK

Android SDK poskytuje několik vestavěných implementací InputFilter. Nejrozšířenější je InputFilter.LengthFilter, který omezuje maximální délku textu. InputFilter.AllCaps převádí všechny zadávané znaky na velká písmena.

FiltrÚčelPříklad použití
LengthFilterOmezení délky textuPole jména do 50 znaků
AllCapsPřevod na velká písmenaPole PSČ
Vlastní InputFilterLibovolná pravidla filtrováníPouze číslice, speciální znaky zakázány

Vytvoření vlastního InputFilter

Pro vytvoření vlastního filtru je třeba implementovat rozhraní InputFilter a přepsat metodu filter. Příklad filtru DigitsInputFilter prochází všechny znaky zadávaného textu a ponechává pouze číslice.

kotlin
class DigitsInputFilter : InputFilter {
    override fun filter(
        source: CharSequence?,
        start: Int,
        end: Int,
        dest: Spanned?,
        dstart: Int,
        dend: Int
    ): CharSequence? {
        val sb = StringBuilder()
        for (i in start until end) {
            val c = source?.get(i)
            if (c != null && Character.isDigit(c)) {
                sb.append(c)
            }
        }
        return if (sb.length == end - start) null else sb
    }
}

Dalším oblíbeným scénářem je filtr zakazující speciální znaky, používaný v polích uživatelského jména, vyhledávání a dalších místech, kde speciální znaky nejsou povoleny.

Použití InputFilter na EditText

Filtry se nastavují na EditText pomocí metody setFilters(InputFilter[]). Pole filtrů nahrazuje aktuální filtry. Pro přidání filtru k existujícím je třeba získat aktuální filtry přes getFilters(), vytvořit nové pole a nastavit jej zpět.

kotlin
val editText = findViewById<EditText>(R.id.phone_input)
editText.filters = arrayOf(
    DigitsInputFilter(),
    InputFilter.LengthFilter(10)
)

V příkladu jsou nastaveny dva filtry: DigitsInputFilter (pouze číslice) a LengthFilter (maximálně 10 znaků). Filtry lze také nastavit pomocí XML atributu android:inputType.

InputFilter a validace vstupu

InputFilter a TextWatcher mají různé funkce a často se používají společně. InputFilter pracuje na úrovni vstupu, TextWatcher pracuje po vstupu. Kombinace obou přístupů dává nejlepší výsledek.

KritériumInputFilterTextWatcher
Okamžik činnostiPřed změnou textuPo změně textu
ÚčelBlokování nesprávných znakůReakce na změny, validace, UI
Návratová hodnotaFiltrovaný text nebo nullŽádná (void)
AplikacesetFilters()addTextChangedListener()

Často kladené otázky

Jaký je rozdíl mezi InputFilter a TextWatcher?

InputFilter zachycuje vstup před změnou textu a může jej blokovat nebo měnit. TextWatcher se volá po změně a umožňuje reagovat na novou hodnotu.

Jak aplikovat několik filtrů na EditText?

Předejte pole filtrů metodě setFilters(). Filtry se provádějí sekvenčně v pořadí pole. Abyste neztratili stávající filtry, získejte je přes getFilters(), přidejte nové do kopie pole a nastavte zpět přes setFilters.

Lze InputFilter použít pro formátování textu?

Ano, InputFilter může upravovat vstup vrácením upraveného CharSequence. Pro komplexní formátování je lepší kombinovat InputFilter s TextWatcher.

Jaké znaky lze zakázat pomocí InputFilter?

Jakékoli: mezery, písmena, číslice, speciální znaky, Unicode znaky. Filtr může povolit pouze latinku, pouze cyrilici nebo pouze určitou sadu znaků.

Funguje InputFilter s programovou změnou textu?

Ne, InputFilter funguje pouze při zadávání uživatelem nebo vkládání ze schránky. Pokud je text nastaven programově pomocí setText(), filtry se nepoužijí. Použijte validaci přes TextWatcher nebo explicitní kontrolu před nastavením.

Shrnutí

  • InputFilter — rozhraní Android pro filtrování a formátování vstupu na úrovni znaků před zobrazením v EditText.
  • Metoda filter vrací null pro povolení, „“ pro blokování nebo nový CharSequence pro úpravu.
  • LengthFilter a AllCaps — standardní Android SDK filtry pro omezení délky a změnu velikosti písmen.
  • Vlastní filtry se vytvářejí implementací rozhraní InputFilter s libovolnou logikou kontroly znaků.
  • Řetězec filtrů umožňuje kombinovat několik pravidel prováděných sekvenčně.
  • InputFilter a TextWatcher se nedostávají do konfliktu, ale doplňují se.
  • Programová změna textu přes setText() neprochází přes InputFilter.

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é