InputFilter: wat is het, de InputFilter-interface en filtering in Android

Auteur: IT Sectr Gepubliceerd: 2026-07-08 Leestijd: 5 min

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 — Android-interface voor het beperken en formatteren van invoer in EditText en TextView.
  • Methode filter wordt aangeroepen vóór tekstwijziging en retourneert een gefilterde CharSequence of null als de wijziging is toegestaan.
  • InputFilter.LengthFilter — standaardimplementatie voor het beperken van de maximale tekstlengte.
  • Aangepaste filters staan toe bepaalde tekens te verbieden, een invoermasker toe te passen of hoofdlettergebruik te transformeren.
  • Filterketen — meerdere InputFilters kunnen tegelijk op één EditText worden toegepast en worden sequentieel uitgevoerd.

Wat is InputFilter en waarvoor dient het?

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.

Hoe InputFilter werkt

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.

Standaardfilters in Android SDK

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.

FilterDoelVoorbeeld
LengthFilterTekstlengte beperkenNaamveld tot 50 tekens
AllCapsConverteren naar hoofdlettersPostcodeveld
Aangepaste InputFilterWillekeurige filterregelsAlleen cijfers, speciale tekens verboden

Een aangepaste InputFilter maken

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.

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

Een ander populair scenario is een filter dat speciale tekens verbiedt, gebruikt in gebruikersnaamvelden, zoekopdrachten en andere plaatsen waar speciale tekens niet zijn toegestaan.

InputFilter toepassen op EditText

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.

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

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.

CriteriumInputFilterTextWatcher
Moment van actieVóór tekstwijzigingNa tekstwijziging
DoelBlokkeren van onjuiste tekensReageren op wijzigingen, validatie, UI
RetourwaardeGefilterde tekst of nullGeen (void)
ToepassingsetFilters()addTextChangedListener()

Veelgestelde vragen

Wat is het verschil tussen InputFilter en TextWatcher?

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.

Hoe pas ik meerdere filters toe op EditText?

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.

Kan InputFilter worden gebruikt voor tekstformattering?

Ja, InputFilter kan invoer wijzigen door een gewijzigde CharSequence te retourneren. Voor complexe formattering is het echter beter om InputFilter te combineren met TextWatcher.

Welke tekens kunnen via InputFilter worden verboden?

Elke: spaties, letters, cijfers, speciale tekens, Unicode-tekens. De filter kan alleen Latijns, alleen Cyrillisch of alleen een bepaalde tekenset toestaan.

Werkt InputFilter met programmatische tekstwijziging?

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

  • InputFilter — Android-interface voor het filteren en formatteren van invoer op tekenniveau vóór weergave in EditText.
  • Methode filter retourneert null voor toestaan, „“ voor blokkeren of een nieuwe CharSequence voor wijziging.
  • LengthFilter en AllCaps — standaard Android SDK-filters voor lengtebeperking en hoofdletterwijziging.
  • Aangepaste filters worden gemaakt door de InputFilter-interface te implementeren met willekeurige logica voor tekencontrole.
  • Filterketen maakt het mogelijk meerdere regels te combineren die sequentieel worden uitgevoerd.
  • InputFilter en TextWatcher conflicteren niet, maar vullen elkaar aan.
  • Programmatische tekstwijziging via setText() gaat niet door InputFilter heen.

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.

Bespreek het project

Lees ook