InputFilter: шта је то, интерфејс InputFilter и филтрација у Android-у

Аутор: IT Sectr Објављено: 2026-07-08 Време читања: 5 мин

InputFilter је интерфејс Android SDK који омогућује пресретање и модификовање унетог текста пре његовог приказивања у EditText. Развојач поставља правила филтрације: дозвољени знакови, максимална дужина, формат уноса. Према Android Developers, 2026, InputFilter се користи за ограничавање уноса слова, цифара, специјалних знакова и автоматског форматирања текста. За разлику од TextWatcher-а, филтер делује пре промене текста, што спречава неисправан унос на нивоу извора.

Главно

  • InputFilter — интерфејс Android за ограничавање и форматирање уноса у EditText и TextView.
  • Метода filter се позива пре промене текста и враћа филтрирани CharSequence или null ако је промена дозвољена.
  • InputFilter.LengthFilter — стандардна имплементација за ограничавање максималне дужине текста.
  • Прилагођени филтери омогућују забрану одређених знакова, примену маске уноса или претварање величине слова.
  • Ланац филтера — на један EditText може се применити више InputFilter истовремено, и они се извршавају секвенцијално.

Шта је InputFilter и зашто је потребан?

InputFilter је функционални интерфејс из пакета android.text који дефинише јединствену методу filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend). Позива се автоматски сваки пут када корисник покушава да унесе, уметне или замени текст у EditText. Повратна вредност одређује да ли ће промена бити прихваћена, одбијена или измењена.

Основна намена InputFilter-а је спречавање неисправног уноса пре него што текст стигне у поље. За разлику од валидације кроз TextWatcher, филтер не дозвољава погрешним знаковима да се чак појаве на екрану.

Метода filter прима шест параметара. Ако врати null, промена је прихваћена. Ако врати празан низ "", промена је блокирана. InputFilter не мења оригинални извор података, већ само враћа филтрирану версију.

Како ради InputFilter

Метода filter прима шест параметара: source — унети текст, start и end — границе унетог фрагмента, dest — тренутни садржај поља, dstart и dend — позиција уметања текста.

На примјер, ако корисник покушава да уметне слово "a" у поље где су дозвољене само цифре, филтер враћа "", и знак се не појављује. InputFilter не мења оригинални извор података, већ само враћа филтрирану версију.

Стандардни филтери у Android SDK

Android SDK пружа неколико уграђених имплементација InputFilter-а. Најпопуларнији је InputFilter.LengthFilter који ограничава максималну дужину текста. InputFilter.AllCaps претвара све унете знакове у велика слова.

ФилтерНаменаПримјер коришћења
LengthFilterОграничавање дужине текстаПоље имена до 50 знакова
AllCapsПретварање у велика словаПоље поштанског броја
Прилагођени InputFilterПроизвољна правила филтрацијеСамо цифре, специјални знакови забрањени

Креирање прилагођеног InputFilter-а

За креирање прилагођеног филтера потребно је имплементирати интерфејс InputFilter и преписати методу filter. Чест задатак је филтер који дозвољава само цифре.

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

Примјер филтера DigitsInputFilter пролази кроз све знакове унетог текста и оставља само цифре. Други популаран сценариј је филтер за забрану специјалних знакова.

Примена InputFilter-а на EditText

Филтери се постављају на EditText путем методе setFilters(InputFilter[]). Низ филтера замењује тренутне филтере.

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

У примјеру се постављају два филтера: DigitsInputFilter (само цифре) и LengthFilter (максимум 10 знакова). Филтери се могу поставити и кроз XML атрибут android:inputType.

InputFilter и валидација уноса

InputFilter и TextWatcher обављају различите функције и често се користе заједно. InputFilter ради на нивоу уноса — не дозвољава неисправним знаковима да стигну у поље. TextWatcher ради након уноса.

КритеријумInputFilterTextWatcher
Тренутак дејовањаПре промене текстаНакон промене текста
НаменаБлокирање неисправних знаковаРеаговање на промене, валидација, UI
Повратна вредностФилтрирани текст или nullНема (void)
ПрименаsetFilters()addTextChangedListener()

Често постављана питања

Која је разлика између InputFilter-а и TextWatcher-а?

InputFilter пресрета унос пре промене текста и може да га блокира или измени. TextWatcher се позива након промене и омогућује реаговање на нову вредност. InputFilter — превентивна заштита, TextWatcher — накнадна обрада.

Како применити више филтера на EditText?

Проследите низ филтера методи setFilters(). Филтери се извршавају секвенцијално у редоследу низа.

Може ли се InputFilter користити за форматирање текста?

Да, InputFilter може да модификује унос, враћајући измењени CharSequence. Међутим, за сложено форматирање боље је комбиновати InputFilter са TextWatcher-ом.

Који знакови се могу забранити путем InputFilter-а?

Било који: размаки, слова, цифре, специјални знакови, Unicode знакови. Филтер може дозволити само латиницу, само ћирилицу или само одређени скуп знакова.

Да ли InputFilter ради са програмском променом текста?

Не, InputFilter ради само при уносу корисника или уметању из клипборда. Ако се текст поставља програмски кроз setText(), филтери се не примењују.

Закључак

  • InputFilter — интерфејс Android за филтрирање и форматирање уноса на нивоу знакова пре приказивања у EditText.
  • Метода filter враћа null за дозволу, "" за блокаду или нови CharSequence за модификацију.
  • LengthFilter и AllCaps — стандардни Android SDK филтери.
  • Прилагођени филтери се креирају кроз имплементацију интерфејса InputFilter.
  • Ланац филтера омогућује комбиновање више правила.
  • InputFilter и TextWatcher се не сукобљавају, већ се допуњују.
  • Програмска промена текста не пролази кроз InputFilter.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође