Saya perlu melakukan validasi input formulir pada serangkaian EditText. Saya menggunakan OnFocusChangeListeners untuk memicu validasi setelah pengguna mengetik masing-masing, tetapi ini tidak berperilaku seperti yang diinginkan untuk EditText terakhir.
Jika saya mengklik tombol "Selesai" saat mengetik di EditText akhir maka InputMethod terputus, tetapi secara teknis fokus tidak pernah hilang pada EditText (dan validasi tidak pernah terjadi).
Apa solusi terbaik?
Haruskah saya memantau ketika InputMethod melepaskan ikatan dari setiap EditText daripada ketika fokus berubah? Jika ya, bagaimana caranya?
android
android-edittext
Stefan
sumber
sumber
Jawaban:
Kenapa tidak kamu gunakan
TextWatcher
?Karena Anda memiliki sejumlah
EditText
kotak untuk divalidasi, saya pikir yang berikut ini cocok untuk Anda:android.text.TextWatcher
antarmukaafterTextChanged(Editable s)
metode ini sebagai berikutTidak
Editable s
terlalu membantu menemukan teks kotak EditText mana yang sedang diubah. Tapi Anda bisa langsung mengecek isi kotak EditText sukadalam metode yang sama. Saya harap saya jelas dan jika saya, itu membantu! :)
EDIT: Untuk pendekatan yang lebih bersih lihat jawaban Christopher Perry di bawah ini.
sumber
TextWatcher agak verbose untuk seleraku, jadi aku membuat sesuatu yang sedikit lebih mudah untuk ditelan:
Gunakan saja seperti ini:
sumber
EditText
IS-ATextView
addTextChangedListener
setelah menyelesaikan edittext dari tampilanJika Anda ingin munculan validasi dan gambar ketika kesalahan terjadi, Anda dapat menggunakan
setError
metodeEditText
kelas seperti yang saya jelaskan di sinisumber
passwordConfirmTextField
, tetapi saya perlu referensi yang lainpasswordTextField
, sehingga saya bisa membandingkannya. Ada saran?Untuk mengurangi verbositas logika validasi, saya telah membuat pustaka untuk Android . Sebagian besar hari menangani validasi menggunakan Anotasi dan aturan bawaan. Ada kendala seperti
@TextRule
,@NumberRule
,@Required
,@Regex
,@Email
,@IpAddress
,@Password
, dll,Anda dapat menambahkan anotasi ini ke referensi widget UI Anda dan melakukan validasi. Ini juga memungkinkan Anda untuk melakukan validasi secara tidak sinkron yang ideal untuk situasi seperti memeriksa nama pengguna unik dari server jauh.
Ada contoh di halaman utama proyek tentang cara menggunakan anotasi. Anda juga dapat membaca posting blog terkait di mana saya telah menulis kode sampel tentang cara menulis aturan khusus untuk validasi.
Berikut adalah contoh sederhana yang menggambarkan penggunaan perpustakaan.
Perpustakaan dapat diperpanjang, Anda dapat menulis aturan Anda sendiri dengan memperluas
Rule
kelas.sumber
@Length
anotasi.Ini solusi yang bagus dari sini
sumber
Pendekatan yang diperbarui - TextInputLayout:
Google baru-baru ini meluncurkan perpustakaan dukungan desain dan ada satu komponen bernama TextInputLayout dan itu mendukung menunjukkan kesalahan melalui
setErrorEnabled(boolean)
dansetError(CharSequence)
.Bagaimana cara menggunakannya?
Langkah 1: Bungkus EditText Anda dengan TextInputLayout:
Langkah 2: Validasi input
Saya telah membuat contoh dari repositori Github saya , checkout contoh jika Anda mau!
sumber
com.google.android.material.textfield.TextInputLayout
(perhatikan perubahan materi ). Dapatkan dari jawaban ini: stackoverflow.com/a/56753953/900394Saya menulis sebuah kelas yang memperluas EditText yang mendukung secara asli beberapa metode validasi dan sebenarnya sangat fleksibel.
Saat ini, ketika saya menulis, secara native didukung melalui metode validasi atribut xml adalah:
Anda dapat memeriksanya di sini
Berharap kamu menikmatinya :)
sumber
Saya menemukan InputFilter lebih sesuai untuk memvalidasi input teks di android.
Berikut ini contoh sederhana: Bagaimana cara saya menggunakan InputFilter untuk membatasi karakter dalam EditText di Android?
Anda bisa menambahkan Toast untuk memberi umpan balik kepada pengguna tentang batasan Anda. Juga periksa tag android: inputType.
sumber
Saya perlu melakukan validasi intra-bidang dan bukan validasi antar-bidang untuk menguji bahwa nilai saya adalah nilai floating point yang tidak ditandatangani dalam satu kasus dan menandatangani nilai floating point pada kasus lain. Inilah yang tampaknya bekerja untuk saya:
Catatan, Anda tidak boleh memiliki spasi di dalam "numberSigned | numberDecimal". Misalnya: "numberSigned | numberDecimal" tidak akan berfungsi. Saya tidak yakin mengapa.
sumber
Ini terlihat sangat menjanjikan dan hanya apa yang diperintahkan oleh dokter untuk saya:
EditText Validator
validator khusus plus ini bawaan:
sumber
Dalam file main.xml
Anda dapat menempatkan attrubute berikut untuk memvalidasi yang hanya dapat diterima oleh karakter alfabet di edittext.
Melakukan hal ini :
sumber
Anda bisa mendapatkan perilaku yang diinginkan dengan mendengarkan ketika pengguna menekan tombol "Selesai" pada keyboard, juga memeriksa tips lain tentang bekerja dengan EditText di posting saya "validasi formulir Android - cara yang benar"
Kode sampel:
sumber
untuk mencoba validasi email dan kata sandi
sumber
Saya telah membuat perpustakaan ini untuk android di mana Anda dapat memvalidasi desain materi di dalam EditText dan EditTextLayout dengan mudah seperti ini:
maka Anda dapat menggunakannya seperti ini:
Kemudian Anda dapat memeriksa apakah valid seperti ini:
Untuk lebih banyak contoh dan penyesuaian periksa repositori https://github.com/TeleClinic/SmartEditText
sumber