InputFilter: bu nədir, InputFilter interfeysi və Android-də filtrasiya

Müəllif: IT Sectr Dərc olunub: 2026-07-08 Oxuma vaxtı: 5 dəq

InputFilter Android SDK interfeysidir və daxil edilən mətnin EditText-də göstərilməzdən əvvəl onu yaxalamağa və dəyişdirməyə imkan verir. Tərtibatçı filtrasiya qaydalarını müəyyən edir: icazə verilən simvollar, maksimum uzunluq, daxiletmə formatı. Android Developers, 2026 məlumatlarına görə, InputFilter həriflərin, rəqəmlərin, xüsusi simvolların daxil edilməsini məhdudlaşdırmaq və mətnin avtomatik formatlaşdırılması üçün istifadə olunur. TextWatcher-dən fərqli olaraq, filtr mətn dəyişməzdən əvvəl işləyir və yanlış daxiletmənin mənbə səviyyəsində qarşısını alır.

Başlıca

  • InputFilter — EditText və TextView-də daxiletməni məhdudlaşdırmaq və formatlaşdırmaq üçün Android interfeysi.
  • filter metodu mətn dəyişməzdən əvvəl çağırılır və filtrasiya olunmuş CharSequence və ya dəyişikliyə icazə verilirsə null qaytarır.
  • InputFilter.LengthFilter — mətnin maksimum uzunluğunu məhdudlaşdırmaq üçün standart tətbiq.
  • Xüsusi filtrlər müəyyən simvolları qadağan etməyə, daxiletmə maskası tətbiq etməyə və ya həriflərin qeydini dəyişdirməyə imkan verir.
  • Filtr zənciri — bir EditText-ə eyni anda bir neçə InputFilter tətbiq oluna bilər və onlar ardıcıl yerinə yetirilir.

InputFilter nədir və nəyə lazımdır?

InputFilter android.text paketindən olan funksional interfeysdir və tək bir filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) metodunu müəyyən edir. O, istifadəçi EditText-ə mətn daxil etməyə, yapışdırmağa və ya əvəz etməyə cəhd etdikdə avtomatik çağırılır. Qaytarılan dəyər dəyişikliyin qəbul ediləcəyini, rədd ediləcəyini və ya dəyişdiriləcəyini müəyyən edir.

InputFilter-in əsas təyinatı mətn sahəyə düşməzdən əvvəl yanlış daxiletmənin qarşısını almaqdır. Məsələn, telefon nömrəsi rəqəmlərinin daxil edilməsi sahəsində filtr həriflərin və xüsusi simvolların daxil edilməsini qadağan edə bilər. Şifrə sahəsində — minimum uzunluğu məhdudlaşdıra bilər. Təsdiq kodu sahəsində — yalnız rəqəmlərə icazə verə bilər. TextWatcher vasitəsilə validasiyadan fərqli olaraq, filtr səhv simvolların ekranda görünməsinə belə icazə vermir.

Android Developers məlumatlarına görə, InputFilter TextInputEditText üçün Material Design-ın bütün komponentlərində istifadə olunur. PhoneNumberFormattingTextWatcher kimi kitabxanalar tam formatlaşdırma üçün TextWatcher və InputFilter-i birləşdirir. InputFilter-dən yanlış daxiletməyə qarşı ilk maneə kimi, TextWatcher-dən isə daxiletmədən sonra əlavə məntiq üçün istifadə etmək tövsiyə olunur.

InputFilter necə işləyir

filter metodu altı parametr alır: source — daxil edilən mətn, start və end — daxil edilən fraqmentin sərhədləri, dest — sahənin cari məzmunu, dstart və dend — mətnin daxil edildiyi mövqe. Metod null qaytarırsa, dəyişiklik dəyişikliksiz qəbul edilir. Boş sətir “” qaytarırsa, dəyişiklik bloklanır. Yeni CharSequence qaytarırsa, orijinal mətn qaytarılanla əvəz olunur.

Məsələn, istifadəçi yalnız rəqəmlərə icazə verilən sahəyə “a” hərifini daxil etməyə cəhd edərsə, filtr “” qaytarır və simvol görünmür. “123” daxil edərsə, filtr “1-2-3” qaytararaq ayırıcılar əlavə edə bilər. Bu mexanizm TextWatcher iştirakı olmadan telefon nömrəsinin, tarixin və digər strukturlaşdırılmış məlumatların avtomatik formatlaşdırılmasını həyata keçirməyə imkan verir.

Vacib: InputFilter orijinal məlumat mənbəyini dəyişdirmir, yalnız filtrasiya olunmuş versiyanı qaytarır. Android özü qaytarılan dəyəri Editable-ə tətbiq edir. Filtr null qaytarırsa, əlavə tədbirlər tələb olunmur. Dəyişdirilmiş mətn qaytarırsa, Android orijinal diapazonu silir və yenisini daxil edir.

Android SDK-da standart filtrlər

Android SDK InputFilter-ün bir neçə daxili tətbiqini təqdim edir. Ən geniş yayılmışı InputFilter.LengthFilter-dir, mətnin maksimum uzunluğunu məhdudlaşdırır. Konstruktor tam ədəd qəbul edir — maksimum simvol sayı. Cari mətnin uzunluğu daxiletmə nəzərə alınmaqla limiti keçərsə, filtr kəsilmiş sətir qaytarır və məhdudiyyətin keçilməsinə imkan vermir.

Həmçinin InputFilter.AllCaps mövcuddur, bütün daxil edilən simvolları böyük həriflərə çevirir. O, kodlar, poçt indeksləri və hərif qeydinin əhəmiyyətli olduğu digər məlumatlar üçün sahələrdə tətbiq olunur. Filtr yalnız kiçik hərifləri bloklamır, həm də onları çevirir, bu istifadəçi üçün əlverişlidir — çevirmə nəticəsini görür.

Bir neçə limit üçün InputFilter.LengthFilter — filtrlərin kombinasiyası vasitəsilə mövcuddur. Məsələn, uzunluğu 20 simvolla məhdudlaşdırmaq və yalnız rəqəmlərə icazə vermək lazımdırsa, LengthFilter + xüsusi rəqəm filtrini tətbiq etmək olar. Hər bir filtr ardıcıl yerinə yetirilir və əvvəlkinin nəticəsi sonrakı üçün dest olur.

FiltrTəyinatİstifadə nümunəsi
LengthFilterMətnin uzunluğunu məhdudlaşdırma50 simvola qədər ad sahəsi
AllCapsBöyük həriflərə çevirməPoçt indeksi sahəsi
Xüsusi InputFilterİxtiyari filtrasiya qaydalarıYalnız rəqəmlər, xüsusi simvollar qadağandır

Xüsusi InputFilter yaratmaq

Xüsusi filtr yaratmaq üçün InputFilter interfeysini tətbiq etmək və filter metodunu dəyişdirmək lazımdır. Tez-tez rast gəlinən məsələ yalnız rəqəmlərə icazə verən filtrdir. Bu halda metod hər bir simvolu Character.isDigit vasitəsilə yoxlayır və filtrasiya olunmuş sətir və ya bütün simvollar icazəlidirsə null qaytarır.

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 filtri nümunəsi daxil edilən mətnin bütün simvollarından keçir və yalnız rəqəmləri saxlayır. Bütün simvollar yoxlamadan keçərsə, metod null qaytarır — bu optimal haldır, çünki əlavə yaddaş əməliyyatları tələb etmir. Simvolların bir hissəsi rədd edilərsə, yeni sətir qaytarılır və EditText-ə yalnız rəqəmlər düşür.

Digər populyar ssenari — xüsusi simvolları qadağan edən filtr. Tətbiq oxşardır: hər bir simvolun Character.isLetterOrDigit vasitəsilə yoxlanılması və ya icazə verilən simvollar siyahısı ilə müqayisəsi. Bu cür filtrlər istifadəçi adı, axtarış sətirləri və xüsusi simvolların icazə verilmədiyi digər yerlərdə istifadə olunur.

InputFilter-i EditText-ə tətbiq etmək

Filtrlər EditText-ə setFilters(InputFilter[]) metodu vasitəsilə qurulur. Filtrlər massivi cari olanları əvəz edir, ona görə mövcud filtrlərə yenisini əlavə etmək lazımdırsa, cari olanları getFilters() ilə əldə etmək, yeni massiv yaratmaq və onu geri qaytarmaq lazımdır. EditText-də standart olaraq XML-də android:maxLength vasitəsilə qurulan LengthFilter var.

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

Nümunədə iki filtr qurulur: DigitsInputFilter (yalnız rəqəmlər) və LengthFilter (maksimum 10 simvol). Massivdə filtrlərin sırası əhəmiyyətlidir: birinci filtr orijinal daxiletməni alır, emal edir və nəticəni ikinciyə ötürür. DigitsInputFilter simvolların bir hissəsini filtr edərsə, LengthFilter artıq filtrasiya olunmuş mətni görür və öz uzunluq məhdudiyyətini ona tətbiq edir.

Filtrləri android:inputType XML atributu vasitəsilə də qurmaq olar, o avtomatik olaraq bəzi filtrləri əlavə edir. Məsələn, inputType="phone" DigitsKeyListener əlavə edir və yalnız rəqəmlərə və bəzi xüsusi simvollara icazə verir. Lakin filtrasiya üzərində tam nəzarət üçün, xüsusilə bir neçə qaydanı birləşdirmək lazım olduqda, setFilters proqram vasitəsilə istifadə etmək tövsiyə olunur.

InputFilter və daxiletmə validasiyası

InputFilter və TextWatcher müxtəlif funksiyaları yerinə yetirir və tez-tez birlikdə istifadə olunur. InputFilter daxiletmə səviyyəsində işləyir — yanlış simvolların sahəyə düşməsinə icazə vermir. TextWatcher daxiletmədən sonra işləyir — dəyişikliklərə reaksiya verməyə, mürəkkəb qaydaların validasiyasını yerinə yetirməyə və UI-ni yeniləməyə imkan verir. Hər iki yanaşmanın birləşməsi ən yaxşı nəticəni verir.

Məsələn, email daxiletmə sahəsi üçün: InputFilter daxiletmə səviyyəsində boşluqları və kiril əlifbasını qadağan edə bilər, TextWatcher isə hər dəyişiklikdən sonra email şablonuna tam uyğunluğu yoxlaya bilər. Birincisi aşkar səhvlərdən qoruyur, ikincisi — struktur səhvlərdən. Məsuliyyətin bu cür bölgüsü kodu təmizləyir və validasiya yükünü azaldır.

Material Design Guidelines məlumatlarına görə, filtrlər sərt məhdudiyyətləri olan sahələrə tətbiq edilməlidir: telefon nömrələri, təsdiq kodları, PIN-kodlar, poçt indeksləri. Yumşaq validasiyası olan sahələr üçün — ad, ünvan, şərh — istifadəçiyə qanuni, lakin qeyri-standart dəyərləri daxil etməyə mane olmamaq üçün TextWatcher kifayətdir.

MeyarInputFilterTextWatcher
İşləmə vaxtıMətn dəyişməzdən əvvəlMətn dəyişdikdən sonra
TəyinatYanlış simvolları bloklamaDəyişikliklərə reaksiya, validasiya, UI
Qaytarılan dəyərFiltrasiya olunmuş mətn və ya nullYox (void)
TətbiqsetFilters()addTextChangedListener()

Tez-tez verilən suallar

InputFilter TextWatcher-dən nə ilə fərqlənir?

InputFilter daxiletməni mətn dəyişməzdən əvvəl yaxalayır və onu bloklaya və ya dəyişdirə bilər. TextWatcher dəyişiklikdən sonra çağırılır və yeni dəyərə reaksiya verməyə imkan verir. InputFilter — profilaktik müdafiə, TextWatcher — sonrakı emal. Formanın tam validasiyası üçün hər iki yanaşmanın istifadəsi tövsiyə olunur.

EditText-ə bir neçə filtri necə tətbiq etmək olar?

Filtrlər massivini setFilters() metoduna ötürün. Filtrlər massiv sırası ilə ardıcıl yerinə yetirilir. Mövcud filtrləri itirməmək üçün, onları getFilters() ilə əldə edin, massivin surətinə yenisini əlavə edin və setFilters vasitəsilə geri qaytarın. Artıq qurulmuş filtrləri nəzərə almadan üzərinə yazmayın.

InputFilter mətnin formatlaşdırılması üçün istifadə edilə bilərmi?

Bəli, InputFilter daxiletməni dəyişdirə, dəyişdirilmiş CharSequence qaytara bilər. Məsələn, telefon nömrəsi filtri boşluqlar və ya mötərizələr əlavə edə bilər. Lakin mürəkkəb formatlaşdırma üçün InputFilter-i TextWatcher ilə birləşdirmək daha yaxşıdır, çünki filtr bloklamaya yönəlib, sonrakı emala deyil.

InputFilter vasitəsilə hansı simvolları qadağan etmək olar?

İstənilən: boşluqlar, həriflər, rəqəmlər, xüsusi simvollar, Unicode simvolları. Xüsusi filtrdə Character.isLetter, isDigit, isWhitespace şərtini və ya qara/ağ siyahı ilə müqayisəni təyin edirsiniz. Filtr yalnız latın əlifbasına, yalnız kiril əlifbasına və ya yalnız müəyyən simvollar dəstinə icazə verə bilər.

InputFilter proqram vasitəsilə mətn dəyişdirilməsi ilə işləyirmi?

Xeyr, InputFilter yalnız istifadəçi tərəfindən daxil edilmə və ya buferdən yapışdırma zamanı işləyir. Mətn setText() vasitəsilə proqramla qurulursa, filtrlər tətbiq edilmir. Proqram mətnini yoxlamaq üçün TextWatcher vasitəsilə validasiya və ya qurmadan əvvəl açıq yoxlamadan istifadə edin.

Nəticə

  • InputFilter — simvollar səviyyəsində daxiletməni EditText-də göstərilməzdən əvvəl filtrasiya və formatlaşdırma üçün Android interfeysi.
  • filter metodu daxiletməyə icazə vermək üçün null, bloklama üçün “” və ya dəyişdirmə üçün yeni CharSequence qaytarır.
  • LengthFilter və AllCaps — uzunluğu məhdudlaşdırmaq və hərif qeydini dəyişdirmək üçün standart Android SDK filtrləri.
  • Xüsusi filtrlər InputFilter interfeysinin simvolları yoxlamaq üçün ixtiyari məntiqlə tətbiqi ilə yaradılır.
  • Filtr zənciri ardıcıl yerinə yetirilən bir neçə qaydanı birləşdirməyə imkan verir.
  • InputFilter və TextWatcher münaqişə etmir, əksinə bir-birini tamamlayır: birincisi simvolları bloklayır, ikincisi dəyişikliklərə reaksiya verir.
  • Proqram vasitəsilə mətn dəyişdirilməsi setText() vasitəsilə InputFilter-dən keçmir — ayrıca yoxlama tələb olunur.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun