web-dev-qa-db-ja.com

EditTextで変更されたリスナーの文字数のカウント

私のプロジェクトにはEditTextがあります。 EditText内の文字数を数え、それをTextView内に表示します。私は以下のコードを書きました、そしてそれはうまく働きます。しかし、私の問題は私がクリックしたときです Backspace それはカウントアップしますが、私は数を減らす必要があります。どのように私は考えることができます 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){}
}); 
272
Hesam

つかいます

s.length()

以下の答えが1つの回答で示唆されていましたが、非常に非効率的です

textMessage.getText().toString().length()
141
xtempore

editTextのcharの長さを取得して表示するだけでいいのですか。

の線に沿って何か

tv.setText(s.length() + " / " + String.valueOf(charCounts));
38
Andreas Wong

コードを少し変更するだけです。

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

これは、もう少し一般的な回答であり、将来の視聴者向けに説明が増えています。

テキスト変更リスナーを追加する

テキストの長さを調べたり、テキストが変更された後で何か他のことをしたい場合は、テキスト変更リスナーを編集テキストに追加できます。

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

    }
});

リスナーには TextWatcher が必要です。これをオーバーライドするには、beforeTextChangedonTextChanged、およびafterTextChangedの3つのメソッドをオーバーライドする必要があります。

文字数を数える

onTextChangedまたはbeforeTextChangedで文字数を取得できます。

charSequence.length()

またはafterTextChanged内で

editable.length()

メソッドの意味

パラメータは少しわかりにくいので、ここでもう少し説明を加えます。

beforeTextChanged

beforeTextChanged(CharSequence charSequence, int start, int count, int after)

  • charSequence:これは、保留中の変更が行われる前のテキストコンテンツです。変更しないでください。
  • start:これは、新しいテキストが挿入される場所のインデックスです。範囲が選択されている場合は、その範囲の開始インデックスです。
  • count:これは置き換えられる予定の選択テキストの長さです。何も選択されていない場合、count0になります。
  • after:これは挿入されるテキストの長さです。

onTextChanged

onTextChanged(CharSequence charSequence, int start, int before, int count)

  • charSequence:これは、変更が加えられた後のテキストの内容です。ここでこの値を変更しないでください。必要に応じて、editable内のafterTextChangedを変更します。
  • start:これは、新しいテキストが挿入された場所の先頭のインデックスです。
  • before:これは古い値です。置き換えられたのは、以前に選択されたテキストの長さです。これはcountbeforeTextChangedと同じ値です。
  • count:これは挿入されたテキストの長さです。これはafterbeforeTextChangedと同じ値です。

afterTextChanged

afterTextChanged(Editable editable)

onTextChangedと同様に、これは変更が既に行われた後に呼び出されます。ただし、現在はテキストが変更されている可能性があります。

  • editable:これはEditTextの編集可能なテキストです。ただし、それを変更する場合は、無限ループに入らないように注意する必要があります。詳しくは ドキュメント をご覧ください。

この答えからの補足画像

enter image description here

5
Suragch

TextWatcher maritalStatusTextWatcher = new TextWatcher(){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) {

    }
};
0
Chandan Bera