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 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.
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.
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él | Használati példa |
|---|---|---|
| LengthFilter | Szöveg hosszának korlàtozása | Név mező legfeljebb 50 karakter |
| AllCaps | Átalakítás nagybetűvé | Irányítószám mező |
| Egyéni InputFilter | Tetszőleges szűrési szabályok | Csak számok, speciális karakterek tiltva |
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.
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.
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.
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.
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érium | InputFilter | TextWatcher |
|---|---|---|
| Működés időpontja | A szöveg megváltozása előtt | A szöveg megváltozása után |
| Cél | Helytelen karakterek blokkolása | Reakció a változásokra, érvényesítés, UI |
| Visszaadott érték | Szűrt szöveg vagy null | Nincs (void) |
| Alkalmazás | setFilters() | addTextChangedListener() |
Gyakran Ismételt Kérdések
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.
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.
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.
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.
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ó
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.
Olvassa el is