InputFilter is een Android SDK-interface waarmee u ingevoerde tekst kunt onderscheppen en wijzigen voordat deze in EditText wordt weergegeven. De ontwikkelaar stelt filterregels in: toegestane tekens, maximale lengte, invoerformaat. Volgens Android Developers, 2026, wordt InputFilter gebruikt voor het beperken van letters, cijfers, speciale tekens en het automatisch formatteren van tekst. In tegenstelling tot TextWatcher werkt de filter vóór de tekstwijziging, wat onjuiste invoer op bronniveau voorkomt.
Belangrijkste
InputFilter is een functionele interface uit het android.text-pakket die één methode filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) definieert. Deze wordt automatisch aangeroepen telkens wanneer de gebruiker tekst probeert in te voeren, te plakken of te vervangen in EditText. De retourwaarde bepaalt of de wijziging wordt geaccepteerd, geweigerd of gewijzigd.
Het belangrijkste doel van InputFilter is het voorkomen van onjuiste invoer voordat de tekst in het veld terechtkomt. Methode filter ontvangt zes parameters. Als de methode null retourneert, wordt de wijziging zonder wijzigingen geaccepteerd. Als een lege string „“ wordt geretourneerd, wordt de wijziging geblokkeerd. InputFilter wijzigt de oorspronkelijke gegevensbron niet, maar retourneert alleen de gefilterde versie.
Als de gebruiker bijvoorbeeld probeert de letter „a“ in te voeren in een veld waar alleen cijfers zijn toegestaan, retourneert de filter „“ en verschijnt het teken niet. InputFilter wijzigt de oorspronkelijke gegevensbron niet, maar retourneert alleen de gefilterde versie. Android past de geretourneerde waarde zelf toe op Editable.
Android SDK biedt verschillende ingebouwde InputFilter-implementaties. De meest voorkomende is InputFilter.LengthFilter, die de maximale tekstlengte beperkt. InputFilter.AllCaps converteert alle ingevoerde tekens naar hoofdletters.
| Filter | Doel | Voorbeeld |
|---|---|---|
| LengthFilter | Tekstlengte beperken | Naamveld tot 50 tekens |
| AllCaps | Converteren naar hoofdletters | Postcodeveld |
| Aangepaste InputFilter | Willekeurige filterregels | Alleen cijfers, speciale tekens verboden |
Om een aangepaste filter te maken, moet u de InputFilter-interface implementeren en de filtermethode overschrijven. Het DigitsInputFilter-voorbeeld doorloopt alle tekens van de ingevoerde tekst en behoudt alleen cijfers.
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
}
}
Een ander populair scenario is een filter dat speciale tekens verbiedt, gebruikt in gebruikersnaamvelden, zoekopdrachten en andere plaatsen waar speciale tekens niet zijn toegestaan.
Filters worden op EditText ingesteld via de methode setFilters(InputFilter[]). De filterarray vervangt de huidige filters. Om een filter aan bestaande filters toe te voegen, moet u de huidige filters ophalen via getFilters(), een nieuwe array maken en deze terugzetten.
val editText = findViewById<EditText>(R.id.phone_input)
editText.filters = arrayOf(
DigitsInputFilter(),
InputFilter.LengthFilter(10)
)
In het voorbeeld worden twee filters ingesteld: DigitsInputFilter (alleen cijfers) en LengthFilter (maximaal 10 tekens). Filters kunnen ook worden ingesteld via het XML-attribuut android:inputType.
InputFilter en TextWatcher hebben verschillende functies en worden vaak samen gebruikt. InputFilter werkt op invoerniveau, TextWatcher werkt na invoer. De combinatie van beide benaderingen geeft het beste resultaat.
| Criterium | InputFilter | TextWatcher |
|---|---|---|
| Moment van actie | Vóór tekstwijziging | Na tekstwijziging |
| Doel | Blokkeren van onjuiste tekens | Reageren op wijzigingen, validatie, UI |
| Retourwaarde | Gefilterde tekst of null | Geen (void) |
| Toepassing | setFilters() | addTextChangedListener() |
Veelgestelde vragen
InputFilter onderschept invoer vóór tekstwijziging en kan deze blokkeren of wijzigen. TextWatcher wordt na wijziging aangeroepen en reageert op de nieuwe waarde. InputFilter — preventieve bescherming, TextWatcher — nabewerking.
Geef een array van filters door aan de methode setFilters(). Filters worden sequentieel uitgevoerd in de volgorde van de array. Om bestaande filters niet te verliezen, haalt u ze op via getFilters(), voegt u nieuwe toe aan een kopie van de array en stelt u deze terug via setFilters.
Ja, InputFilter kan invoer wijzigen door een gewijzigde CharSequence te retourneren. Voor complexe formattering is het echter beter om InputFilter te combineren met TextWatcher.
Elke: spaties, letters, cijfers, speciale tekens, Unicode-tekens. De filter kan alleen Latijns, alleen Cyrillisch of alleen een bepaalde tekenset toestaan.
Nee, InputFilter werkt alleen bij gebruikersinvoer of plakken uit het klembord. Als tekst programmatisch wordt ingesteld via setText(), worden filters niet toegepast. Gebruik validatie via TextWatcher of expliciete controle vóór het instellen.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook