Dalam proyek saya, saya punya EditText
. Saya ingin menghitung karakter dalam EditText
, dan menunjukkan angka itu dalam a TextView
. Saya telah menulis kode berikut dan berfungsi dengan baik. Namun, masalah saya adalah ketika saya Backspacemenghitungnya, tetapi saya harus mengurangi jumlahnya. Bagaimana saya bisa mempertimbangkan Backspace?
tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
i++;
tv.setText(String.valueOf(i) + " / " + String.valueOf(charCounts));
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
Jawaban:
Menggunakan
Berikut ini pernah disarankan dalam salah satu jawaban, tetapi sangat tidak efisien
sumber
bagaimana dengan hanya mendapatkan panjang char di EditText Anda dan menampilkannya?
sesuatu di sepanjang garis
sumber
textMessage.length()
, tidak perlu melakukangetText().toString()
. developer.android.com/reference/android/widget/…sedikit perubahan dalam kode Anda:
sumber
Ini adalah jawaban yang sedikit lebih umum dengan lebih banyak penjelasan untuk pemirsa di masa depan.
Tambahkan pendengar yang diubah teks
Jika Anda ingin menemukan panjang teks atau melakukan hal lain setelah teks diubah, Anda dapat menambahkan pendengar yang diubah teks ke teks edit Anda.
Pendengar membutuhkan
TextWatcher
, yang membutuhkan tiga metode untuk menjadi ditimpa:beforeTextChanged
,onTextChanged
, danafterTextChanged
.Menghitung karakter
Anda bisa mendapatkan jumlah karakter dalam
onTextChanged
ataubeforeTextChanged
denganatau
afterTextChanged
denganArti metode
Parameternya sedikit membingungkan jadi inilah penjelasan tambahannya.
beforeTextChanged
beforeTextChanged(CharSequence charSequence, int start, int count, int after)
charSequence
: Ini adalah konten teks sebelum perubahan yang tertunda dibuat. Anda seharusnya tidak mencoba mengubahnya.start
: Ini adalah indeks di mana teks baru akan dimasukkan. Jika rentang dipilih, maka itu adalah indeks awal rentang.count
: Ini adalah panjang teks yang dipilih yang akan diganti. Jika tidak ada yang dipilih makacount
akan menjadi0
.after
: ini adalah panjang teks yang akan disisipkan.onTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
charSequence
: Ini adalah konten teks setelah perubahan dibuat. Anda sebaiknya tidak mencoba mengubah nilai ini di sini. Ubaheditable
inafterTextChanged
jika Anda perlu.start
: Ini adalah indeks awal di mana teks baru dimasukkan.before
: Ini adalah nilai lama. Panjang teks yang dipilih sebelumnya yang diganti. Ini adalah nilai yang sama dengancount
dibeforeTextChanged
.count
: Ini adalah panjang teks yang disisipkan. Ini adalah nilai yang sama denganafter
dibeforeTextChanged
.afterTextChanged
afterTextChanged(Editable editable)
Seperti
onTextChanged
, ini dipanggil setelah perubahan telah dibuat. Namun, sekarang teks dapat dimodifikasi.editable
: Ini adalah teks yang dapat diedit dariEditText
. Namun, jika Anda mengubahnya, Anda harus berhati-hati untuk tidak masuk ke loop tanpa batas. Lihat dokumentasi untuk lebih jelasnya.Gambar tambahan dari jawaban ini
sumber
TextWatcher maritalStatusTextWatcher = TextWatcher baru () {@Override public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {
sumber