InputFilter: apa itu, antarmuka InputFilter dan penyaringan di Android

Penulis: IT Sectr Diterbitkan: 2026-07-08 Waktu membaca: 5 mnt

InputFilter adalah antarmuka Android SDK yang memungkinkan Anda mencegat dan memodifikasi teks yang dimasukkan sebelum ditampilkan di EditText. Pengembang menetapkan aturan penyaringan: karakter yang diizinkan, panjang maksimum, format masukan. Menurut Android Developers, 2026, InputFilter digunakan untuk membatasi masukan huruf, angka, karakter khusus, dan pemformatan teks otomatis. Berbeda dengan TextWatcher, filter bekerja sebelum perubahan teks, mencegah masukan yang salah pada tingkat sumber.

Poin Utama

  • InputFilter — antarmuka Android untuk membatasi dan memformat masukan di EditText dan TextView.
  • Metode filter dipanggil sebelum perubahan teks dan mengembalikan CharSequence yang difilter atau null jika perubahan diizinkan.
  • InputFilter.LengthFilter — implementasi standar untuk membatasi panjang maksimum teks.
  • Filter kustom memungkinkan melarang karakter tertentu, menerapkan masker masukan, atau mengubah registrasi huruf.
  • Rantai filter — beberapa InputFilter dapat diterapkan ke satu EditText secara bersamaan dan dijalankan secara berurutan.

Apa itu InputFilter dan untuk apa?

InputFilter adalah antarmuka fungsional dari paket android.text yang mendefinisikan satu metode filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend). Metode ini dipanggil secara otomatis setiap kali pengguna mencoba memasukkan, menempelkan, atau mengganti teks di EditText. Nilai yang dikembalikan menentukan apakah perubahan akan diterima, ditolak, atau dimodifikasi.

Tujuan utama InputFilter adalah mencegah masukan yang salah sebelum teks masuk ke kolom. Metode filter menerima enam parameter. Jika metode mengembalikan null, perubahan diterima tanpa perubahan. Jika mengembalikan string kosong “”, perubahan diblokir. InputFilter tidak mengubah sumber data asli, hanya mengembalikan versi yang difilter.

Cara kerja InputFilter

Misalnya, jika pengguna mencoba memasukkan huruf “a” ke kolom yang hanya mengizinkan angka, filter mengembalikan “” dan karakter tidak muncul. Jika memasukkan “123”, filter dapat mengembalikan “1-2-3” dengan menambahkan pemisah. InputFilter tidak mengubah sumber data asli, hanya mengembalikan versi yang difilter.

Filter standar di Android SDK

Android SDK menyediakan beberapa implementasi bawaan InputFilter. Yang paling umum adalah InputFilter.LengthFilter yang membatasi panjang maksimum teks. InputFilter.AllCaps mengonversi semua karakter yang dimasukkan menjadi huruf kapital.

FilterTujuanContoh penggunaan
LengthFilterMembatasi panjang teksKolom nama hingga 50 karakter
AllCapsKonversi ke huruf kapitalKolom kode pos
InputFilter kustomAturan filter arbitrerHanya angka, karakter khusus dilarang

Membuat InputFilter kustom

Untuk membuat filter kustom, Anda perlu mengimplementasikan antarmuka InputFilter dan menimpa metode filter. Contoh filter DigitsInputFilter melewati semua karakter teks yang dimasukkan dan hanya menyisakan angka.

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

Skenario populer lainnya adalah filter yang melarang karakter khusus, digunakan di kolom nama pengguna, pencarian, dan tempat lain di mana karakter khusus tidak diizinkan.

Menerapkan InputFilter ke EditText

Filter diatur pada EditText melalui metode setFilters(InputFilter[]). Array filter menggantikan filter saat ini. Untuk menambahkan filter ke filter yang ada, ambil filter saat ini melalui getFilters(), buat array baru, dan atur kembali.

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

Dalam contoh, dua filter diatur: DigitsInputFilter (hanya angka) dan LengthFilter (maksimum 10 karakter). Filter juga dapat diatur melalui atribut XML android:inputType.

InputFilter dan validasi masukan

InputFilter dan TextWatcher memiliki fungsi berbeda dan sering digunakan bersama. InputFilter bekerja pada tingkat masukan, TextWatcher bekerja setelah masukan. Kombinasi kedua pendekatan memberikan hasil terbaik.

KriteriaInputFilterTextWatcher
Waktu kerjaSebelum perubahan teksSetelah perubahan teks
TujuanMemblokir karakter yang salahReaksi terhadap perubahan, validasi, UI
Nilai kembaliTeks yang difilter atau nullTidak ada (void)
PenerapansetFilters()addTextChangedListener()

Pertanyaan yang Sering Diajukan

Apa perbedaan antara InputFilter dan TextWatcher?

InputFilter mencegat masukan sebelum perubahan teks dan dapat memblokir atau mengubahnya. TextWatcher dipanggil setelah perubahan dan memungkinkan reaksi terhadap nilai baru. InputFilter — perlindungan preventif, TextWatcher — pasca-pemrosesan.

Bagaimana menerapkan beberapa filter ke EditText?

Berikan array filter ke metode setFilters(). Filter dijalankan secara berurutan sesuai urutan array. Untuk tidak kehilangan filter yang ada, ambil melalui getFilters(), tambahkan yang baru ke salinan array, dan atur kembali melalui setFilters.

Bisakah InputFilter digunakan untuk pemformatan teks?

Ya, InputFilter dapat memodifikasi masukan dengan mengembalikan CharSequence yang diubah. Untuk pemformatan kompleks, lebih baik menggabungkan InputFilter dengan TextWatcher.

Karakter apa yang dapat dilarang melalui InputFilter?

Karakter apa pun: spasi, huruf, angka, karakter khusus, karakter Unicode. Filter dapat mengizinkan hanya Latin, hanya Sirilik, atau hanya kumpulan karakter tertentu.

Apakah InputFilter bekerja dengan perubahan teks terprogram?

Tidak, InputFilter hanya bekerja pada masukan pengguna atau penempelan dari clipboard. Jika teks diatur secara terprogram melalui setText(), filter tidak diterapkan. Gunakan validasi melalui TextWatcher atau pemeriksaan eksplisit sebelum pengaturan.

Ringkasan

  • InputFilter — antarmuka Android untuk memfilter dan memformat masukan pada tingkat karakter sebelum ditampilkan di EditText.
  • Metode filter mengembalikan null untuk izin, “” untuk blokir, atau CharSequence baru untuk modifikasi.
  • LengthFilter dan AllCaps — filter standar Android SDK untuk pembatasan panjang dan perubahan registrasi.
  • Filter kustom dibuat melalui implementasi antarmuka InputFilter dengan logika pemeriksaan karakter arbitrer.
  • Rantai filter memungkinkan menggabungkan beberapa aturan yang dijalankan secara berurutan.
  • InputFilter dan TextWatcher tidak bertentangan, tetapi saling melengkapi.
  • Perubahan teks terprogram melalui setText() tidak melewati InputFilter — memerlukan pemeriksaan terpisah.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga