Saya ingin membatasi karakter menjadi 0-9, az, AZ, dan bilah spasi saja. Mengatur tipe input I dapat membatasi ke angka tetapi saya tidak dapat menemukan cara-cara Inputfilter melihat melalui dokumen.
android
android-edittext
Tim Wayne
sumber
sumber
InputFilter
s agak rumit dalam versi Android yang menampilkan saran kamus. Anda terkadang mendapatkanSpannableStringBuilder
, terkadang polosString
disource
parameter.Berikut ini
InputFilter
harus bekerja. Jangan ragu untuk memperbaiki kode ini!sumber
String replacement = source.subSequence(start, end).toString(); return replacement.replaceAll("[^A-Za-z0-9_\\-@]", "");
source instanceof SpannableStringBuilder
, memasuki AB memberi saya AAB seperti ketika mencoba jawaban sebelumnya. Untungnya saya bisa mengatasinya dengan menggunakan solusi @florian di bawah ini.jauh lebih mudah:
sumber
","
di antara keduanya. Anda dapat menggunakan sesuatu seperti ini"0123456789qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM"
imeOptions="actionNext"
, dll.Tidak ada jawaban yang diposting yang berfungsi untuk saya. Saya datang dengan solusi saya sendiri:
sumber
EditText
sudah dapat memiliki filter sendiri, mis. Filter panjang. Jadi, alih-alih hanya mengganti filter, Anda kemungkinan besar ingin menambahkan filter Anda ke yang sudah ada.Gunakan ini kerjanya 100% kebutuhan Anda dan sangat sederhana.
Di strings.xml
sumber
Untuk menghindari Karakter Khusus dalam tipe input
Anda dapat mengatur filter ke teks edit Anda seperti di bawah ini
sumber
Selain jawaban yang diterima, dimungkinkan juga untuk menggunakan misalnya:
android:inputType="textCapCharacters"
sebagai atribut<EditText>
agar hanya menerima karakter huruf besar (dan angka).sumber
Untuk beberapa alasan konstruktor kelas android.text.LoginFilter adalah paket-lingkup, sehingga Anda tidak dapat langsung memperpanjangnya (meskipun itu akan identik dengan kode ini). Tetapi Anda dapat memperpanjang LoginFilter.UsernameFilterGeneric! Maka Anda hanya memiliki ini:
Ini tidak benar-benar didokumentasikan, tetapi itu adalah bagian dari inti lib, dan sumbernya langsung . Saya telah menggunakannya untuk sementara waktu sekarang, sejauh ini tidak ada masalah, meskipun saya akui saya belum mencoba melakukan sesuatu yang rumit yang melibatkan spannables.
sumber
Itu Benar, cara terbaik untuk memperbaikinya untuk memperbaikinya dalam Layout XML menggunakan:
sebagaimana ditunjukkan oleh Florian Fröhlich, ini berfungsi dengan baik untuk tampilan teks yang rata.
Hanya kata hati-hati, karakter yang disebutkan dalam
android:digits
hanya akan ditampilkan, jadi berhati-hatilah untuk tidak melewatkan serangkaian karakter :)sumber
inputType
tidak mempengaruhi pemfilteran.Solusi sederhana ini bekerja untuk saya ketika saya perlu mencegah pengguna memasukkan string kosong ke dalam EditText. Tentu saja Anda dapat menambahkan lebih banyak karakter:
sumber
Jika Anda subkelas InputFilter Anda dapat membuat InputFilter Anda sendiri yang akan memfilter karakter non-alfa-numerik.
InputFilter Interface memiliki satu metode,,
filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
dan menyediakan Anda dengan semua informasi yang perlu Anda ketahui tentang karakter yang dimasukkan ke dalam EditText yang ditugaskan padanya.Setelah Anda membuat InputFilter Anda sendiri, Anda dapat menetapkannya ke EditText dengan memanggil setFilters (...).
http://developer.android.com/reference/android/text/InputFilter.html#filter(java.lang.CharSequence , int, int, android.text. Direncanakan, int, int)
sumber
Mengabaikan hal-hal rentang yang telah ditangani orang lain, untuk menangani saran kamus dengan benar, saya menemukan kode berikut berfungsi.
Sumber tumbuh seiring saran tumbuh sehingga kita harus melihat berapa banyak karakter yang sebenarnya diharapkan untuk kita ganti sebelum kita mengembalikan apa pun.
Jika kami tidak memiliki karakter yang tidak valid, kembalikan null sehingga terjadi penggantian default.
Kalau tidak, kita perlu mengekstraksi karakter yang valid dari substring yang SEBENARNYA akan ditempatkan ke dalam EditText.
sumber
untuk mencegah kata-kata dalam edittext. buat kelas yang bisa Anda gunakan kapan saja.
sumber
Pertama tambahkan
strings.xml
:XML :
Kode di Kotlin:
Aneh, tetapi bekerja aneh pada keyboard lunak emulator.
Peringatan! Kode berikut akan memfilter semua huruf dan simbol lainnya kecuali angka untuk keyboard perangkat lunak. Hanya keyboard digital yang akan muncul di smartphone.
Saya juga biasanya ditetapkan
maxLength
,filters
,inputType
.sumber
Ini adalah utas lama, tetapi solusi yang dimaksudkan semuanya memiliki masalah (tergantung pada perangkat / versi Android / Keyboard).
PENDEKATAN YANG BERBEDA
Jadi akhirnya aku pergi dengan pendekatan yang berbeda, daripada menggunakan
InputFilter
implementasi bermasalah, saya menggunakanTextWatcher
danTextChangedListener
dariEditText
.KODE LENGKAP (CONTOH)
Alasannya
InputFilter
bukan solusi yang baik di Android karena itu tergantung pada implementasi keyboard. Input Keyboard sedang difilter sebelum input dilewatkan keEditText
. Tetapi, karena beberapa keyboard memiliki implementasi yang berbeda untukInputFilter.filter()
permohonan, ini bermasalah.Di sisi lain
TextWatcher
tidak peduli dengan implementasi keyboard, itu memungkinkan kami untuk membuat solusi sederhana dan memastikan itu akan bekerja pada semua perangkat.sumber
onTextChanged
hanya membutuhkanpublic void
depan di itu.Saya telah melakukan sesuatu seperti ini untuk membuatnya tetap sederhana:
Dengan cara ini kami mengganti semua karakter yang tidak diinginkan di bagian baru dari string sumber dengan string kosong.
The
edit_text
variabel adalahEditText
objek kita mengacu kepada.Kode ditulis dalam bahasa
kotlin
.sumber
Dimungkinkan untuk digunakan
setOnKeyListener
. Dalam metode ini, kita dapat menyesuaikan inputedittext
!sumber
Inilah cara saya membuat filter untuk bidang Nama di Edit Teks. (Huruf pertama adalah CAPS, dan hanya mengizinkan satu spasi setelah setiap kata.
sumber
Saya memiliki jawaban yang sama di Kotlin:
dan dapatkan kelas dengan fungsi Extension:
sumber