InputFilter: mi ez, az InputFilter interfész és szűrés Androidban

Szerző: IT Sectr Megjelenés: 2026-07-08 Olvasási idő: 5 perc

Az InputFilter egy Android SDK interfész, amely lehetővé teszi a bevitt szöveg elfogását és módosítását, mielőtt az megjelenne az EditText-ben. A fejlesztő beállítja a szűrési szabályokat: engedélyezett karakterek, maximális hossz, beviteli formátum. Az Android Developers, 2026 szerint az InputFilter a betűk, számok, speciális karakterek bevitelének korlàtozására és a szöveg automatikus formázására szolgál. A TextWatcher-től eltérően a szűrő a szöveg megváltozása előtt működik, megakadályozva a helytelen bevitelt a forrás szintjén.

Főbb pontok

  • InputFilter — Android interfész a bevitel korlàtozására és formázására az EditText és TextView elemekben.
  • A filter metódus a szöveg megváltozása előtt hívódik és egy szűrt CharSequence-t vagy null értéket ad vissza, ha a változtatás engedélyezett.
  • InputFilter.LengthFilter — szabványos megvalósítás a szöveg maximális hosszának korlàtozására.
  • Egyéni szűrők lehetővé teszik bizonyos karakterek tiltását, beviteli maszk alkalmazását vagy a betűregiszter átalakítását.
  • Szűrőlánc — egy EditText-re egyszerre több InputFilter is alkalmazható, és ezek egymás után hajtódnak végre.

Mi az InputFilter és mire használjuk?

InputFilter egy funkcionális interfész az android.text csomagból, amely egyetlen filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) metódust határoz meg. Automatikusan meghívódik, valahányszor a felhasználó megpróbál szöveget beírni, beilleszteni vagy cserélni az EditText-ben. A visszaadott érték határozza meg, hogy a változtatás elfogadásra, elutasításra vagy módosításra kerüljön.

Az InputFilter fő célja a helytelen bevitel megakadályozása, mielőtt a szöveg a mezőbe kerülne. A filter metódus hat paramétert fogad. Ha a metódus null-t ad vissza, a változtatás változtatás nélkül elfogadásra kerül. Ha egy üres karakterláncot „“ ad vissza, a változtatás blokkolva van. Az InputFilter nem módosítja az eredeti adatforrást, csak a szűrt verziót adja vissza.

Hogyan működik az InputFilter

Például, ha a felhasználó megpróbál beszúrni egy „a“ betűt egy olyan mezőbe, ahol csak számok engedélyezettek, a szűrő „“ értéket ad vissza, és a karakter nem jelenik meg. Az InputFilter nem módosítja az eredeti adatforrást, csak a szűrt verziót adja vissza.

Szabványos szűrők az Android SDK-ban

Az Android SDK több beépített InputFilter megvalósítást kínál. A legelterjedtebb az InputFilter.LengthFilter, amely korlàtozza a szöveg maximális hosszát. Az InputFilter.AllCaps az összes bevitt karaktert nagybetűvé alakítja.

SzűrőCélHasználati példa
LengthFilterSzöveg hosszának korlàtozásaNév mező legfeljebb 50 karakter
AllCapsÁtalakítás nagybetűvéIrányítószám mező
Egyéni InputFilterTetszőleges szűrési szabályokCsak számok, speciális karakterek tiltva

Egyéni InputFilter létrehozása

Egyéni szűrő létrehozásához implementálni kell az InputFilter interfészt és felül kell írni a filter metódust. A DigitsInputFilter példa átmegy a bevitt szöveg összes karakterén, és csak a számokat tartja meg.

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

Egy másik népszerű forgatókönyv a speciális karaktereket tiltó szűrő, amelyet felhasználónév mezőkben, keresésben és más helyeken használnak, ahol a speciális karakterek nem engedélyezettek.

InputFilter alkalmazása EditText-re

A szűrők az EditText-en a setFilters(InputFilter[]) metódussal állíthatók be. A szűrő tömb felülírja a jelenlegi szűrőket. Ha szűrőt szeretne hozzáadni a meglévőkhöz, kérje le a jelenlegieket a getFilters() segítségével, hozzon létre egy új tömböt, és állítsa vissza.

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

A példában két szűrő van beállítva: DigitsInputFilter (csak számok) és LengthFilter (maximum 10 karakter). A szűrők a android:inputType XML attribútummal is beállíthatók.

InputFilter és beviteli érvényesítés

Az InputFilter és a TextWatcher különböző funkciókat látnak el, és gyakran használják őket együtt. Az InputFilter a bevitel szintjén működik, a TextWatcher a bevitel után működik. A két megközelítés kombinációja adja a legjobb eredményt.

KritériumInputFilterTextWatcher
Működés időpontjaA szöveg megváltozása előttA szöveg megváltozása után
CélHelytelen karakterek blokkolásaReakció a változásokra, érvényesítés, UI
Visszaadott értékSzűrt szöveg vagy nullNincs (void)
AlkalmazássetFilters()addTextChangedListener()

Gyakran Ismételt Kérdések

Mi a különbség az InputFilter és a TextWatcher között?

Az InputFilter elfogja a bevitelt a szöveg megváltozása előtt, és blokkolhatja vagy módosíthatja azt. A TextWatcher a változás után hívódik és lehetővé teszi az új értékre való reagálást.

Hogyan alkalmazható több szűrő az EditText-re?

Adja át a szűrők tömbjét a setFilters() metódusnak. A szűrők egymás után hajtódnak végre a tömb sorrendjében. A meglévő szűrők elvesztésének elkerülése érdekében kérje le őket a getFilters() segítségével, adja hozzá az újat a tömb másolatához, és állítsa vissza a setFilters segítségével.

Használható az InputFilter szöveg formázására?

Igen, az InputFilter módosíthatja a bevitelt egy módosított CharSequence visszaadásával. Összetett formázáshoz azonban jobb az InputFilter-t összekombinálni a TextWatcher-rel.

Milyen karakterek tilthatók meg az InputFilter segítségével?

Bármilyen: szóközök, betűk, számok, speciális karakterek, Unicode karakterek. A szűrő engedélyezhet csak latin, csak cirill vagy csak egy bizonyos karakterkészletet.

Működik az InputFilter programozott szövegmódosítással?

Nem, az InputFilter csak felhasználói bevitelnél vagy vágólapról történő beillesztésnél működik. Ha a szöveget programozottan állítja be a setText() segítségével, a szűrők nem érvényesülnek. Használjon érvényesítést a TextWatcher segítségével vagy explicit ellenőrzést a beállítás előtt.

Összefoglaló

  • InputFilter — Android interfész a bevitel szűrésére és formázására karakterszinten, mielőtt az megjelenne az EditText-ben.
  • A filter metódus null-t ad vissza az engedélyezéshez, „“-t a blokkoláshoz vagy új CharSequence-t a módosításhoz.
  • LengthFilter és AllCaps — szabványos Android SDK szűrők a hossz korlàtozására és a regiszter megváltoztatására.
  • Egyéni szűrők az InputFilter interfész implementálásával jönnek létre tetszőleges karakterellenőrzési logikával.
  • Szűrőlánc lehetővé teszi több szabály kombinálását.
  • InputFilter és TextWatcher nem ütköznek, hanem kiegészítik egymást.
  • Programozott szövegmódosítás a setText() segítségével nem megy át az InputFilter-en.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is