Menghitung Karakter di EditText Berubah Pendengar


272

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){}
}); 

36
Maafkan tidak relevan, tetapi saya ingin tahu bagaimana Anda menempatkan "backspace" dalam format pertanyaan Anda? Saya telah mengajukan pertanyaan serupa di mana teknik itu akan sangat berguna.
AlleyOOP

59
Tempatkan kata Anda (dalam hal ini Backspace) antara tag <kbd> </kbd> seperti: <kbd> Backspace </kbd>
Hesam

2
Setiap kali Anda melihat format yang menarik (seperti "backspace"), Anda selalu dapat mengklik tautan "edit" untuk melihat bagaimana penulis melakukannya. Kemudian cukup klik "batal" untuk membuang hasil edit Anda.
Suragch

Jawaban:


142

Menggunakan

s.length()

Berikut ini pernah disarankan dalam salah satu jawaban, tetapi sangat tidak efisien

textMessage.getText().toString().length()


28

sedikit perubahan dalam kode Anda:

TextView tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
    public void afterTextChanged(Editable s) {
        tv.setText(String.valueOf(s.toString().length()));
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){}
}); 

1
Ini tidak akan berfungsi sebagai tulisan - length () mengembalikan int dan setText mengharapkan String
Martin Lockett

1
@ MartinLockett menggunakan Integer.toString (int_type) untuk mengubah string menjadi int.
Mehdi Rostami

6

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.

EditText editText = (EditText) findViewById(R.id.testEditText);
editText.addTextChangedListener(new TextWatcher() {

    @Override
    public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int start, int before, int count)  {

    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});

Pendengar membutuhkan TextWatcher, yang membutuhkan tiga metode untuk menjadi ditimpa: beforeTextChanged, onTextChanged, danafterTextChanged .

Menghitung karakter

Anda bisa mendapatkan jumlah karakter dalam onTextChangedatau beforeTextChangeddengan

charSequence.length()

atau afterTextChangeddengan

editable.length()

Arti 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 maka countakan menjadi 0.
  • 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. Ubah editablein afterTextChangedjika 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 dengan countdi beforeTextChanged.
  • count: Ini adalah panjang teks yang disisipkan. Ini adalah nilai yang sama dengan afterdi beforeTextChanged.

afterTextChanged

afterTextChanged(Editable editable)

Seperti onTextChanged, ini dipanggil setelah perubahan telah dibuat. Namun, sekarang teks dapat dimodifikasi.

  • editable: Ini adalah teks yang dapat diedit dari EditText. 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

masukkan deskripsi gambar di sini


0

TextWatcher maritalStatusTextWatcher = TextWatcher baru () {@Override public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        try {
            if (charSequence.length()==0){
                topMaritalStatus.setVisibility(View.GONE);
            }else{
                topMaritalStatus.setVisibility(View.VISIBLE);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
};
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.