InputFilter: bu nima, InputFilter interfeysi va Android-da filtrlash

Muallif: IT Sectr Nashr etilgan: 2026-07-08 O'qish vaqti: 5 daq

InputFilter bu Android SDK interfeysi bolib, kiritilayotgan matnni EditTextda korsatilishidan oldin uni ushlab qolish va ozgartirish imkonini beradi. Dasturchi filtrlash qoidalarini belgilaydi: ruxsat etilgan belgilar, maksimal uzunlik, kiritish formati. Android Developers, 2026 malumotlariga kora, InputFilter harflar, raqamlar, maxsus belgilarni kiritishni cheklash va matnni avtomatik formatlash uchun ishlatiladi. TextWatcherdan farqli olaroq, filtr matn ozgarishidan oldin ishlaydi va notogri kiritishni manba darajasida oldini oladi.

Asosiy

  • InputFilter — EditText va TextViewda kiritishni cheklash va formatlash uchun Android interfeysi.
  • filter metodi matn ozgarishidan oldin chaqiriladi va filtrlangan CharSequence yoki ozgarishga ruxsat berilsa null qaytaradi.
  • InputFilter.LengthFilter — matnning maksimal uzunligini cheklash uchun standart tatbiq.
  • Maxsus filtrlar muayyan belgilarni taqiqlash, kiritish maskasini qollash yoki harf registrini ozgartirish imkonini beradi.
  • Filtr zanjiri — bitta EditTextga bir nechta InputFilter bir vaqtda qollanilishi mumkin va ular ketma-ket bajariladi.

InputFilter nima va u nima uchun kerak?

InputFilter android.text paketidagi funksional interfeys bolib, bitta filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) metodini belgilaydi. U foydalanuvchi EditTextga matn kiritishga, joylashtirishga yoki almashtirishga harakat qilganda avtomatik chaqiriladi. Qaytarilgan qiymat ozgarish qabul qilinishini, rad etilishini yoki ozgartirilishini belgilaydi.

InputFilterning asosiy vazifasi matn maydonga tushishidan oldin notogri kiritishning oldini olishdir. filter metodi olti parametr oladi: source — kiritilayotgan matn, start va end — kiritilayotgan fragment chegaralari, dest — maydonning joriy mazmuni, dstart va dend — matn kiritiladigan joy. Agar metod null qaytarsa, ozgarish ozgarishsiz qabul qilinadi. Agar bosh satr “” qaytarsa, ozgarish bloklanadi. InputFilter asl malumot manbasini ozgartirmaydi, faqat filtrlangan versiyani qaytaradi.

InputFilter qanday ishlaydi

Masalan, foydalanuvchi faqat raqamlarga ruxsat etilgan maydonga “a” harfini kiritishga harakat qilsa, filtr “” qaytaradi va belgi kormaydi. “123” kiritsa, filtr “1-2-3” qaytarib, ajratgichlar qoshishi mumkin. InputFilter asl malumot manbasini ozgartirmaydi, faqat filtrlangan versiyani qaytaradi. Android ozgartirilgan matnni qaytarsa, asl diapazonni olib tashlaydi va yangisini kiritadi.

Android SDKdagi standart filtrlar

Android SDK InputFilterning bir nechta ichki tatbiqlarini taqdim etadi. Eng keng tarqalgani InputFilter.LengthFilter bolib, matnning maksimal uzunligini cheklaydi. InputFilter.AllCaps barcha kiritilgan belgilarni bosh harflarga aylantiradi.

FiltrVazifasiFoydalanish namunasi
LengthFilterMatn uzunligini cheklash50 belgigacha ism maydoni
AllCapsBosh harflarga aylantirishPocht indeksi maydoni
Maxsus InputFilterIxtiyoriy filtrlash qoidalariFaqat raqamlar, maxsus belgilar taqiqlangan

Maxsus InputFilter yaratish

Maxsus filtr yaratish uchun InputFilter interfeysini tatbiq etish va filter metodini ozgartirish kerak. DigitsInputFilter filtri namunasi kiritilayotgan matnning barcha belgilaridan otadi va faqat raqamlarni saqlaydi.

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

Yana bir ommabop stsenariy — maxsus belgilarni taqiqlovchi filtr. Bunday filtrlar foydalanuvchi nomi, qidiruv satrlari va maxsus belgilarga ruxsat berilmagan boshqa joylarda ishlatiladi.

InputFilterni EditTextga qollash

Filtrlar EditTextga setFilters(InputFilter[]) metodi orqali urnatiladi. Filtrlar massivi joriy filtrlarni almashtiradi. Mavjud filtrlarga yangisini qoshish uchun ularni getFilters() bilan olish, yangi massiv yaratish va uni orqaga urnatish kerak.

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

Misolda ikkita filtr urnatiladi: DigitsInputFilter (faqat raqamlar) va LengthFilter (maksimum 10 belgi). Filtrlarni android:inputType XML atributi orqali ham urnatish mumkin.

InputFilter va kiritish validatsiyasi

InputFilter va TextWatcher turli funktsiyalarni bajaradi va kopincha birgalikda ishlatiladi. InputFilter kiritish darajasida ishlaydi, TextWatcher esa kiritishdan keyin ishlaydi. Ikkala yondashuvning kombinatsiyasi eng yaxshi natijani beradi.

MezonInputFilterTextWatcher
Ishlash vaqtiMatn ozgarishidan oldinMatn ozgarishidan keyin
VazifasiNotogri belgilarni bloklashOzgarishlarga reaksiya, validatsiya, UI
Qaytarilgan qiymatFiltrlangan matn yoki nullYoq (void)
QollashsetFilters()addTextChangedListener()

Kop beriladigan savollar

InputFilter TextWatcherdan nima bilan farq qiladi?

InputFilter kiritishni matn ozgarishidan oldin ushlaydi va uni bloklashi yoki ozgartirishi mumkin. TextWatcher ozgarishdan keyin chaqiriladi va yangi qiymatga reaksiya berish imkonini beradi.

EditTextga bir nechta filtrni qanday qollash mumkin?

Filtrlar massivini setFilters() metodiga uzating. Filtrlar massiv tartibida ketma-ket bajariladi. Mavjud filtrlarni yoqotmaslik uchun ularni getFilters() bilan oling.

InputFilter matnni formatlash uchun ishlatilishi mumkinmi?

Ha, InputFilter kiritishni ozgartirishi, ozgartirilgan CharSequence qaytarishi mumkin. Murakkab formatlash uchun InputFilterni TextWatcher bilan birlashtirish tavsiya etiladi.

InputFilter orqali qanday belgilarni taqiqlash mumkin?

Istalgan: probellar, harflar, raqamlar, maxsus belgilar, Unicode belgilari. Filtr faqat lotin, faqat kirill yoki faqat muayyan belgilar toplamiga ruxsat berishi mumkin.

InputFilter dasturiy matn ozgarishi bilan ishlaydimi?

Yoq, InputFilter faqat foydalanuvchi kiritishi yoki buferdan joylashtirishda ishlaydi. Matn setText() orqali dasturiy urnatilsa, filtrlar qollanilmaydi.

Xulosa

  • InputFilter — belgilar darajasida kiritishni EditTextda korsatishdan oldin filtrlash va formatlash uchun Android interfeysi.
  • filter metodi ruxsat uchun null, bloklash uchun “” yoki ozgartirish uchun yangi CharSequence qaytaradi.
  • LengthFilter va AllCaps — uzunlikni cheklash va registrni ozgartirish uchun standart Android SDK filtrlari.
  • Maxsus filtrlar InputFilter interfeysini belgilarni tekshirish uchun ixtiyoriy mantiq bilan tatbiq etish orqali yaratiladi.
  • Filtr zanjiri bir nechta qoidalarni birlashtirish imkonini beradi.
  • InputFilter va TextWatcher ziddiyat qilmaydi, balki bir-birini toldiradi.
  • Dasturiy matn ozgarishi InputFilterdan otmaydi — alohida tekshirish talab qilinadi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing