InputFilter: vad är det, InputFilter-gränssnittet och filtrering i Android

Författare: IT Sectr Publicerad: 2026-07-08 Lästid: 5 min

InputFilter är ett Android SDK-gränssnitt som gör att du kan fånga upp och ändra inmatad text innan den visas i EditText. Utvecklaren anger filterregler: tillåtna tecken, maximal längd, inmatningsformat. Enligt Android Developers, 2026 används InputFilter för att begränsa inmatning av bokstäver, siffror, specialtecken och automatisk formatering av text. Till skillnad från TextWatcher fungerar filtret före ändring av text, vilket förhindrar felaktig inmatning på källnivå.

Huvudpunkter

  • InputFilter — Android-gränssnitt för att begränsa och formatera inmatning i EditText och TextView.
  • Metoden filter anropas före ändring av text och returnerar en filtrerad CharSequence eller null om ändringen är tillåten.
  • InputFilter.LengthFilter — standardimplementering för att begränsa maximal textlängd.
  • Anpassade filter gör det möjligt att förbjuda vissa tecken, tillämpa en inmatningsmask eller omvandla bokstävers storlek.
  • Filterkedja — flera InputFilter kan tillämpas på en EditText samtidigt och de körs sekventiellt.

Vad är InputFilter och varför behövs det?

InputFilter är ett funktionellt gränssnitt från paketet android.text som definierar en enda metod filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend). Den anropas automatiskt varje gång användaren försöker skriva in, klistra in eller ersätta text i EditText. Returvärdet avgör om ändringen accepteras, avvisas eller ändras.

Huvudsyftet med InputFilter är att förhindra felaktig inmatning innan texten når fältet. Metoden filter tar emot sex parametrar. Om metoden returnerar null accepteras ändringen utan ändringar. Om en tom sträng “” returneras blockeras ändringen. InputFilter ändrar inte den ursprungliga datakällan, utan returnerar bara den filtrerade versionen.

Hur InputFilter fungerar

Till exempel, om användaren försöker mata in bokstaven “a” i ett fält där endast siffror är tillåtna, returnerar filtret “” och tecknet visas inte. InputFilter ändrar inte den ursprungliga datakällan, utan returnerar bara den filtrerade versionen.

Standardfilter i Android SDK

Android SDK tillhandahåller flera inbyggda InputFilter-implementeringar. Den vanligaste är InputFilter.LengthFilter som begränsar maximal textlängd. InputFilter.AllCaps omvandlar alla inmatade tecken till versaler.

FilterSyfteAnvändningsexempel
LengthFilterBegränsa textlängdNamnfält upp till 50 tecken
AllCapsOmvandling till versalerPostnummerfält
Anpassad InputFilterGodtyckliga filterreglerEndast siffror, specialtecken förbjudna

Skapa en anpassad InputFilter

För att skapa ett anpassat filter måste du implementera InputFilter-gränssnittet och åsidosätta filtermetoden. DigitsInputFilter-exemplet går igenom alla tecken i den inmatade texten och behåller endast siffror.

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

Ett annat populärt scenario är ett filter som förbjuder specialtecken, som används i användarnamn, sökning och andra platser där specialtecken inte är tillåtna.

Tillämpa InputFilter på EditText

Filter ställs in på EditText via metoden setFilters(InputFilter[]). Filterarrayen ersätter de aktuella filtren. För att lägga till ett filter till befintliga filter måste du hämta de aktuella filtren via getFilters(), skapa en ny array och ställa tillbaka den.

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

I exemplet ställs två filter in: DigitsInputFilter (endast siffror) och LengthFilter (maximalt 10 tecken). Filter kan också ställas in via XML-attributet android:inputType.

InputFilter och inmatningsvalidering

InputFilter och TextWatcher har olika funktioner och används ofta tillsammans. InputFilter arbetar på inmatningsnivå, TextWatcher arbetar efter inmatning. Kombinationen av båda tillvägagångssätten ger bäst resultat.

KriteriumInputFilterTextWatcher
Tidpunkt för åtgärdFöre textändringEfter textändring
SyfteBlockera felaktiga teckenReagera på ändringar, validering, UI
ReturvärdeFiltrerad text eller nullInget (void)
TillämpningsetFilters()addTextChangedListener()

Vanliga frågor

Vad är skillnaden mellan InputFilter och TextWatcher?

InputFilter fångar upp inmatning före textändring och kan blockera eller ändra den. TextWatcher anropas efter ändring och möjliggör reaktion på det nya värdet.

Hur tillämpar jag flera filter på EditText?

Skicka en array av filter till metoden setFilters(). Filter körs sekventiellt i arrayens ordning. För att inte förlora befintliga filter, hämta dem via getFilters(), lägg till nya i en kopia av arrayen och ställ tillbaka via setFilters.

Kan InputFilter användas för textformatering?

Ja, InputFilter kan ändra inmatning genom att returnera en ändrad CharSequence. För komplex formatering är det bättre att kombinera InputFilter med TextWatcher.

Vilka tecken kan förbjudas via InputFilter?

Vilka som helst: mellanslag, bokstäver, siffror, specialtecken, Unicode-tecken. Filtret kan endast tillåta latinska, endast kyrilliska eller endast en viss teckenuppsättning.

Fungerar InputFilter med programmatisk textändring?

Nej, InputFilter fungerar endast vid användarinmatning eller inklistring från urklipp. Om text ställs in programmatiskt via setText() tillämpas inte filter. Använd validering via TextWatcher eller explicit kontroll före inställning.

Sammanfattning

  • InputFilter — Android-gränssnitt för att filtrera och formatera inmatning på teckennivå innan visning i EditText.
  • Metoden filter returnerar null för tillåtelse, “” för blockering eller en ny CharSequence för ändring.
  • LengthFilter och AllCaps — standard Android SDK-filter för längdbegränsning och ändring av teckenstorlek.
  • Anpassade filter skapas genom implementering av InputFilter-gränssnittet med godtycklig logik för teckenkontroll.
  • Filterkedja gör det möjligt att kombinera flera regler som körs sekventiellt.
  • InputFilter och TextWatcher kommer inte i konflikt utan kompletterar varandra.
  • Programmatisk textändring via setText() går inte igenom InputFilter.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också