InputFilter: ce este, interfața InputFilter și filtrarea în Android

Autor: IT Sectr Publicat: 2026-07-08 Timp de citire: 5 min

InputFilter este o interfață Android SDK care permite interceptarea și modificarea textului introdus înainte de afișarea acestuia în EditText. Dezvoltatorul stabilește regulile de filtrare: caractere permise, lungime maximă, format de introducere. Conform Android Developers, 2026, InputFilter este utilizat pentru limitarea introducerii literelor, cifrelor, caracterelor speciale și formatarea automată a textului. Spre deosebire de TextWatcher, filtrul acționează înainte de modificarea textului, prevenind introducerea incorectă la nivelul sursei.

Principalele

  • InputFilter — interfață Android pentru limitarea și formatarea introducerii în EditText și TextView.
  • Metoda filter este apelată înainte de modificarea textului și returnează un CharSequence filtrat sau null dacă modificarea este permisă.
  • InputFilter.LengthFilter — implementare standard pentru limitarea lungimii maxime a textului.
  • Filtrele personalizate permit interzicerea anumitor caractere, aplicarea unei măști de introducere sau transformarea registrului literelor.
  • Lanț de filtre — la un singur EditText se pot aplica mai multe InputFilter simultan, iar acestea se execută secvențial.

Ce este InputFilter și de ce este necesar?

InputFilter este o interfață funcțională din pachetul android.text care definește o singură metodă filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend). Este apelată automat de fiecare dată când utilizatorul încearcă să introducă, să insereze sau să înlocuiască text în EditText. Valoarea returnată determină dacă modificarea va fi acceptată, respinsă sau modificată.

Scopul principal al InputFilter este prevenirea introducerii incorecte înainte ca textul să ajungă în câmp. De exemplu, în câmpul pentru introducerea cifrelor numărului de telefon, filtrul poate interzice literele și caracterele speciale. În câmpul parolei — să limiteze lungimea minimă. În câmpul codului de confirmare — să permită doar cifrele.

Metoda filter primește șase parametri: source — textul introdus, start și end — limitele fragmentului introdus, dest — conținutul curent al câmpului, dstart și dend — poziția unde este inserat textul. Dacă metoda returnează null, modificarea este acceptată fără schimbări. Dacă returnează un șir gol „“, modificarea este blocată. Dacă returnează un nou CharSequence, textul original este înlocuit cu cel returnat.

Important: InputFilter nu modifică sursa originală de date, ci doar returnează versiunea filtrată. Android aplică singur valoarea returnată la Editable. Dacă filtrul returnează null, nu sunt necesare acțiuni suplimentare. Dacă returnează text modificat, Android șterge intervalul original și inserează unul nou.

Cum funcționează InputFilter

Metoda filter primește șase parametri. Dacă returnează null, modificarea este acceptată. Dacă returnează un șir gol „“, modificarea este blocată. Dacă returnează un nou CharSequence, textul original este înlocuit.

De exemplu, dacă utilizatorul încearcă să insereze litera „a“ într-un câmp unde sunt permise doar cifrele, filtrul returnează „“, iar caracterul nu apare. Dacă inserează „123“, filtrul poate returna „1-2-3“, adăugând separatori. Acest mecanism permite implementarea formatării automate a numărului de telefon, datei și altor date structurate fără participarea TextWatcher.

InputFilter nu modifică sursa originală de date, ci doar returnează versiunea filtrată. Android aplică singur valoarea returnată la Editable.

Filtre standard în Android SDK

Android SDK oferă mai multe implementări încorporate ale InputFilter. Cel mai răspândit este InputFilter.LengthFilter, care limitează lungimea maximă a textului. InputFilter.AllCaps transformă toate caracterele introduse în majuscule.

FiltruScopExemplu de utilizare
LengthFilterLimitarea lungimii textuluiCâmp nume până la 50 de caractere
AllCapsTransformare în majusculeCâmp cod poștal
InputFilter personalizatReguli de filtrare arbitrareDoar cifre, caractere speciale interzise

Crearea unui InputFilter personalizat

Pentru a crea un filtru personalizat, trebuie să implementați interfața InputFilter și să suprascrieți metoda filter. O sarcină frecventă este un filtru care permite doar cifrele.

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

Exemplul filtrului DigitsInputFilter parcurge toate caracterele textului introdus și păstrează doar cifrele. Un alt scenariu popular este filtrul care interzice caracterele speciale, utilizat în câmpurile de nume de utilizator, căutare și alte locuri unde caracterele speciale nu sunt permise.

Aplicarea InputFilter la EditText

Filtrele se setează pe EditText prin metoda setFilters(InputFilter[]). Tabloul de filtre înlocuiește filtrele curente.

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

În exemplu, se setează două filtre: DigitsInputFilter (doar cifre) și LengthFilter (maximum 10 caractere). Filtrele pot fi setate și prin atributul XML android:inputType.

InputFilter și validarea intrării

InputFilter și TextWatcher au funcții diferite și sunt adesea utilizate împreună. InputFilter acționează la nivelul introducerii — nu permite caracterelor incorecte să ajungă în câmp. TextWatcher acționează după introducere — permite reacția la modificări, validarea regulilor complexe și actualizarea UI.

CriteriuInputFilterTextWatcher
Moment de acțiuneÎnainte de modificarea textuluiDupă modificarea textului
ScopBlocarea caracterelor incorecteReacție la modificări, validare, UI
Valoare returnatăText filtrat sau nullNu (void)
AplicaresetFilters()addTextChangedListener()

Înntrebări frecvente

Care este diferența dintre InputFilter și TextWatcher?

InputFilter interceptează introducerea înainte de modificarea textului și poate bloca sau modifica aceasta. TextWatcher este apelat după modificare și permite reacția la noua valoare. InputFilter — protecție preventivă, TextWatcher — post-procesare. Pentru validarea completă a formularului, se recomandă utilizarea ambelor abordări.

Cum se aplică mai multe filtre la EditText?

Transmiteți un tablou de filtre la metoda setFilters(). Filtrele se execută secvențial în ordinea tabloului. Pentru a nu pierde filtrele existente, obțineți-le prin getFilters(), adăugați-le pe cele noi într-o copie a tabloului și setați-le înapoi prin setFilters.

Poate fi utilizat InputFilter pentru formatarea textului?

Da, InputFilter poate modifica introducerea, returnând un CharSequence modificat. De exemplu, filtrul pentru numărul de telefon poate adăuga spații sau paranteze. Totuși, pentru formatarea complexă, este mai bine să combinați InputFilter cu TextWatcher.

Ce caractere pot fi interzise prin InputFilter?

Orice: spații, litere, cifre, caractere speciale, caractere Unicode. Filtrul poate permite doar latină, doar chirilică sau doar un anumit set de caractere.

Funcționează InputFilter cu modificarea programatică a textului?

Nu, InputFilter acționează doar la introducerea de către utilizator sau la inserarea din clipboard. Dacă textul este setat programatic prin setText(), filtrele nu se aplică. Pentru verificarea textului programatic, utilizați validarea prin TextWatcher sau verificarea explicită înainte de setare.

Rezumat

  • InputFilter — interfață Android pentru filtrarea și formatarea introducerii la nivel de caractere înainte de afișarea în EditText.
  • Metoda filter returnează null pentru permitere, „“ pentru blocare sau un nou CharSequence pentru modificare.
  • LengthFilter și AllCaps — filtre standard Android SDK pentru limitarea lungimii și schimbarea registrului.
  • Filtrele personalizate se creează prin implementarea interfeței InputFilter cu logică arbitrară de verificare a caracterelor.
  • Lanțul de filtre permite combinarea mai multor reguli executate secvențial.
  • InputFilter și TextWatcher nu intră în conflict, ci se completează reciproc: primul blochează caracterele, al doilea reacționează la modificări.
  • Modificarea programatică a textului prin setText() nu trece prin InputFilter — necesită verificare separată.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și