InputFilter е интерфейс Android SDK, който позволява да прихващате и модифицирате въведения текст, преди да бъде показан в EditText. Разработчикът задава правила за филтриране. Според Android Developers, 2026, InputFilter се използва за ограничаване на въвеждането на букви, цифри, специални символи и автоматично форматиране на текст. За разлика от TextWatcher, филтърът работи преди промяната на текста.
Основни моменти
InputFilter е функционален интерфейс от пакета android.text. Основната цел на InputFilter е предотвратяване на неправилно въвеждане. Методът filter приема шест параметра. Ако методът връще null, промяната се приема. Ако връще празен низ „“, промяната се блокира. InputFilter не променя оригиналния източник на данни.
Например, ако потребителят се опита да въведе буквата „а“ в поле, където са разрешени само цифри, филтърът връща „“. InputFilter не променя оригиналния източник на данни.
Android SDK предоставя няколко вградени реализации на InputFilter. Най-разпространеният е InputFilter.LengthFilter. InputFilter.AllCaps преобразува всички въведени символи в главни букви.
| Филтър | Цел | Пример |
|---|---|---|
| LengthFilter | Ограничаване на дължината | Поле за име до 50 символа |
| AllCaps | Преобразуване | Поле за пощенски код |
| Персонализиран | Произволни правила | Само цифри |
За да създадете персонализиран филтър, трябва да реализирате интерфейса InputFilter. Примерът на филтър DigitsInputFilter преминава през всички символи на въведения текст и запазва само цифрите.
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
}
}
Филтрите се настрояват на EditText чрез setFilters(InputFilter[]). В примера са настроени два филтъра: DigitsInputFilter и LengthFilter.
val editText = findViewById<EditText>(R.id.phone_input)
editText.filters = arrayOf(
DigitsInputFilter(),
InputFilter.LengthFilter(10)
)
InputFilter и TextWatcher изпълняват различни функции. InputFilter работи на ниво на входа, TextWatcher работи след входа.
| Критерий | InputFilter | TextWatcher |
|---|---|---|
| Момент | Преди промяна | След промяна |
| Цел | Блокиране | Реакция, UI |
| Връщана | Филтриран текст | Няма (void) |
| Прилагане | setFilters() | addTextChangedListener() |
Често задавани въпроси
InputFilter прихваща входа преди промяната. TextWatcher се вика след промяната.
Предайте масив на setFilters().
Да, InputFilter може да модифицира входа.
Всяки: интервали, букви, цифри, Unicode.
Не, InputFilter работи само при въвеждане от потребителя.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също