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 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.
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.
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.
| Filter | Tujuan | Contoh penggunaan |
|---|---|---|
| LengthFilter | Membatasi panjang teks | Kolom nama hingga 50 karakter |
| AllCaps | Konversi ke huruf kapital | Kolom kode pos |
| InputFilter kustom | Aturan filter arbitrer | Hanya angka, karakter khusus dilarang |
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.
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.
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.
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 TextWatcher memiliki fungsi berbeda dan sering digunakan bersama. InputFilter bekerja pada tingkat masukan, TextWatcher bekerja setelah masukan. Kombinasi kedua pendekatan memberikan hasil terbaik.
| Kriteria | InputFilter | TextWatcher |
|---|---|---|
| Waktu kerja | Sebelum perubahan teks | Setelah perubahan teks |
| Tujuan | Memblokir karakter yang salah | Reaksi terhadap perubahan, validasi, UI |
| Nilai kembali | Teks yang difilter atau null | Tidak ada (void) |
| Penerapan | setFilters() | addTextChangedListener() |
Pertanyaan yang Sering Diajukan
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.
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.
Ya, InputFilter dapat memodifikasi masukan dengan mengembalikan CharSequence yang diubah. Untuk pemformatan kompleks, lebih baik menggabungkan InputFilter dengan TextWatcher.
Karakter apa pun: spasi, huruf, angka, karakter khusus, karakter Unicode. Filter dapat mengizinkan hanya Latin, hanya Sirilik, atau hanya kumpulan karakter tertentu.
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
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.
Baca juga