Apa cara terbaik untuk membatasi panjang teks EditText
di Android?
Apakah ada cara untuk melakukan ini melalui xml?
android
android-edittext
maxlength
hpique
sumber
sumber
Jawaban:
Dokumentasi
Contoh
sumber
maxLength
properti masih bekerja.android:maxLength
itu setara denganInputFilter.LengthFilter
, jadi ketika secara terprogram mengubah filternya, Anda juga telah memodifikasi filter XML-nya.setFilters
akan berhentiandroid:maxLength
berfungsi, karena menimpa filter yang ditetapkan oleh XML. Dengan kata lain, jika Anda mengatur filter apa pun secara terprogram, Anda harus mengatur semuanya secara terprogram.gunakan filter input untuk membatasi panjang maksimal tampilan teks.
sumber
InputFilter
. Itu menimpaandroid:maxlength
dalam file xml, jadi kita perlu menambahkanLengthFilter
cara ini.sumber
TextWatcher
.Catatan untuk orang-orang yang sudah menggunakan filter input khusus dan juga ingin membatasi panjang maks:
Saat Anda menetapkan filter input dalam kode, semua filter input yang ditetapkan sebelumnya dihapus, termasuk satu filter dengan
android:maxLength
. Saya menemukan ini ketika mencoba menggunakan filter input khusus untuk mencegah penggunaan beberapa karakter yang tidak kami izinkan dalam bidang kata sandi. Setelah mengatur filter dengan setFilters, maxLength tidak lagi diamati. Solusinya adalah mengatur maxLength dan filter kustom saya secara terprogram. Sesuatu seperti ini:sumber
sumber
Saya telah mengalami masalah ini dan saya menganggap kita kehilangan cara yang dijelaskan dengan baik untuk melakukan ini secara terprogram tanpa kehilangan filter yang telah ditetapkan.
Mengatur panjang dalam XML:
Seperti yang dinyatakan oleh jawaban yang diterima dengan benar, jika Anda ingin menentukan panjang yang tetap ke EditText yang tidak akan Anda ubah lebih lanjut di masa mendatang, cukup tentukan di EditText XML Anda:
Mengatur panjang secara terprogram
Untuk mengatur panjang secara pemrograman Anda harus mengaturnya melalui
InputFilter
. Tetapi jika Anda membuat InputFilter baru dan mengaturnya keEditText
Anda akan kehilangan semua filter lain yang sudah didefinisikan (misalnya maxLines, inputType, dll) yang mungkin Anda tambahkan baik melalui XML atau secara terprogram.Jadi ini SALAH :
Untuk menghindari kehilangan filter yang ditambahkan sebelumnya, Anda perlu mendapatkan filter tersebut, tambahkan yang baru (maxLength dalam hal ini), dan atur kembali filter ke
EditText
sebagai berikut:Jawa
Namun Kotlin membuatnya lebih mudah untuk semua orang, Anda juga perlu menambahkan filter ke yang sudah ada tetapi Anda dapat mencapainya dengan sederhana:
sumber
Untuk orang lain yang bertanya-tanya bagaimana mencapai ini, inilah
EditText
kelas saya yang diperluasEditTextNumeric
..setMaxLength(int)
- mengatur jumlah digit maksimum.setMaxValue(int)
- membatasi nilai integer maksimum.setMin(int)
- membatasi nilai integer minimum.getValue()
- dapatkan nilai integerContoh penggunaan:
Semua metode dan atribut lain yang berlaku
EditText
, tentu saja berfungsi juga.sumber
Karena pengamatan goto10, saya mengumpulkan kode berikut untuk melindungi dari kehilangan filter lain dengan mengatur panjang maks:
sumber
sumber
Xml
Jawa:
Kotlin:
sumber
Cara lain untuk mencapai ini adalah dengan menambahkan definisi berikut ke file XML:
Ini akan membatasi panjang maksimal
EditText
widget hingga 6 karakter.sumber
Dari material.io , Anda dapat menggunakan
TextInputEditText
dikombinasikan denganTextInputLayout
:Anda dapat mengonfigurasi EditText kata sandi dengan drawable:
Atau Anda dapat membatasi panjang teks dengan / tanpa penghitung:
Ketergantungan:
sumber
XML
android:maxLength="10"
Secara terprogram:
Catatan: secara internal, EditText & TextView mem-parsing nilai
android:maxLength
dalam XML dan gunakanInputFilter.LengthFilter()
untuk menerapkannya.Lihat: TextView.java # L1564
sumber
Ini adalah kelas EditText kustom yang memungkinkan filter Panjang untuk hidup bersama dengan filter lainnya. Terima kasih atas Jawaban Tim Gallagher (di bawah)
sumber
cara sederhana di xml:
jika Anda perlu mengatur 4 karakter dalam xml edit-text, gunakan ini
sumber
Ini berfungsi dengan baik ...
android:maxLength="10"
ini hanya akan menerima
10
karakter.sumber
Coba ini untuk Java secara terprogram :
sumber
myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});
Saya telah melihat banyak solusi bagus, tetapi saya ingin memberikan apa yang saya pikir sebagai solusi yang lebih lengkap dan ramah pengguna, yang meliputi:
1, Batas panjang.
2, Jika masukan lebih banyak, berikan panggilan balik untuk memicu roti panggang Anda.
3, Kursor bisa di tengah atau ekor.
4, Pengguna dapat memasukkan dengan menempelkan string.
5, Selalu buang input overflow dan pertahankan asal.
Apa yang saya gagal lakukan adalah, jika pengguna menyorot bagian dari input saat ini dan mencoba menempelkan string yang sangat panjang, saya tidak tahu cara mengembalikan sorot.
Seperti, panjang maks diatur ke 10, pengguna memasukkan '12345678', dan tandai '345' sebagai highlight, dan mencoba menempelkan string '0000' yang akan melebihi batasan.
Ketika saya mencoba menggunakan edit_text.setSelection (start = 2, end = 4) untuk mengembalikan status asal, hasilnya adalah, ia hanya menyisipkan 2 spasi sebagai '12 345 678 ', bukan highlight asal. Saya ingin seseorang menyelesaikannya.
sumber
Anda dapat menggunakan
android:maxLength="10"
dalam EditText. (Di sini batasnya hingga 10 karakter)sumber
Kotlin:
ZTE Blade A520
memiliki efek aneh. Ketika Anda mengetik lebih dari 10 simbol (misalnya, 15),EditText
menunjukkan 10 pertama, tetapi 5 lainnya tidak terlihat dan tidak dapat diakses. Tetapi ketika Anda menghapus simbol denganBackspace
, itu pertama menghapus kanan 5 simbol dan kemudian menghapus sisa 10. Untuk mengatasi perilaku ini gunakan solusi :atau ini:
atau ini, jika Anda ingin memiliki saran:
sumber
cara sederhana di xml:
untuk mengaturnya secara terprogram Anda dapat menggunakan fungsi berikut
sumber