InputFilter је интерфејс Android SDK који омогућује пресретање и модификовање унетог текста пре његовог приказивања у EditText. Развојач поставља правила филтрације: дозвољени знакови, максимална дужина, формат уноса. Према Android Developers, 2026, InputFilter се користи за ограничавање уноса слова, цифара, специјалних знакова и автоматског форматирања текста. За разлику од TextWatcher-а, филтер делује пре промене текста, што спречава неисправан унос на нивоу извора.
Главно
InputFilter је функционални интерфејс из пакета android.text који дефинише јединствену методу filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend). Позива се автоматски сваки пут када корисник покушава да унесе, уметне или замени текст у EditText. Повратна вредност одређује да ли ће промена бити прихваћена, одбијена или измењена.
Основна намена InputFilter-а је спречавање неисправног уноса пре него што текст стигне у поље. За разлику од валидације кроз TextWatcher, филтер не дозвољава погрешним знаковима да се чак појаве на екрану.
Метода filter прима шест параметара. Ако врати null, промена је прихваћена. Ако врати празан низ "", промена је блокирана. InputFilter не мења оригинални извор података, већ само враћа филтрирану версију.
Метода filter прима шест параметара: source — унети текст, start и end — границе унетог фрагмента, dest — тренутни садржај поља, dstart и dend — позиција уметања текста.
На примјер, ако корисник покушава да уметне слово "a" у поље где су дозвољене само цифре, филтер враћа "", и знак се не појављује. InputFilter не мења оригинални извор података, већ само враћа филтрирану версију.
Android SDK пружа неколико уграђених имплементација InputFilter-а. Најпопуларнији је InputFilter.LengthFilter који ограничава максималну дужину текста. InputFilter.AllCaps претвара све унете знакове у велика слова.
| Филтер | Намена | Примјер коришћења |
|---|---|---|
| LengthFilter | Ограничавање дужине текста | Поље имена до 50 знакова |
| AllCaps | Претварање у велика слова | Поље поштанског броја |
| Прилагођени InputFilter | Произвољна правила филтрације | Само цифре, специјални знакови забрањени |
За креирање прилагођеног филтера потребно је имплементирати интерфејс InputFilter и преписати методу filter. Чест задатак је филтер који дозвољава само цифре.
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 пролази кроз све знакове унетог текста и оставља само цифре. Други популаран сценариј је филтер за забрану специјалних знакова.
Филтери се постављају на EditText путем методе setFilters(InputFilter[]). Низ филтера замењује тренутне филтере.
val editText = findViewById<EditText>(R.id.phone_input)
editText.filters = arrayOf(
DigitsInputFilter(),
InputFilter.LengthFilter(10)
)
У примјеру се постављају два филтера: DigitsInputFilter (само цифре) и LengthFilter (максимум 10 знакова). Филтери се могу поставити и кроз XML атрибут android:inputType.
InputFilter и TextWatcher обављају различите функције и често се користе заједно. InputFilter ради на нивоу уноса — не дозвољава неисправним знаковима да стигну у поље. TextWatcher ради након уноса.
| Критеријум | InputFilter | TextWatcher |
|---|---|---|
| Тренутак дејовања | Пре промене текста | Након промене текста |
| Намена | Блокирање неисправних знакова | Реаговање на промене, валидација, UI |
| Повратна вредност | Филтрирани текст или null | Нема (void) |
| Примена | setFilters() | addTextChangedListener() |
Често постављана питања
InputFilter пресрета унос пре промене текста и може да га блокира или измени. TextWatcher се позива након промене и омогућује реаговање на нову вредност. InputFilter — превентивна заштита, TextWatcher — накнадна обрада.
Проследите низ филтера методи setFilters(). Филтери се извршавају секвенцијално у редоследу низа.
Да, InputFilter може да модификује унос, враћајући измењени CharSequence. Међутим, за сложено форматирање боље је комбиновати InputFilter са TextWatcher-ом.
Било који: размаки, слова, цифре, специјални знакови, Unicode знакови. Филтер може дозволити само латиницу, само ћирилицу или само одређени скуп знакова.
Не, InputFilter ради само при уносу корисника или уметању из клипборда. Ако се текст поставља програмски кроз setText(), филтери се не примењују.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође