私のプロジェクトには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){}
});
つかいます
s.length()
以下の答えが1つの回答で示唆されていましたが、非常に非効率的です
textMessage.getText().toString().length()
editTextのcharの長さを取得して表示するだけでいいのですか。
の線に沿って何か
tv.setText(s.length() + " / " + String.valueOf(charCounts));
コードを少し変更するだけです。
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){}
});
これは、もう少し一般的な回答であり、将来の視聴者向けに説明が増えています。
テキストの長さを調べたり、テキストが変更された後で何か他のことをしたい場合は、テキスト変更リスナーを編集テキストに追加できます。
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
が必要です。これをオーバーライドするには、beforeTextChanged
、onTextChanged
、およびafterTextChanged
の3つのメソッドをオーバーライドする必要があります。
onTextChanged
またはbeforeTextChanged
で文字数を取得できます。
charSequence.length()
またはafterTextChanged
内で
editable.length()
パラメータは少しわかりにくいので、ここでもう少し説明を加えます。
beforeTextChanged
beforeTextChanged(CharSequence charSequence, int start, int count, int after)
charSequence
:これは、保留中の変更が行われる前のテキストコンテンツです。変更しないでください。start
:これは、新しいテキストが挿入される場所のインデックスです。範囲が選択されている場合は、その範囲の開始インデックスです。count
:これは置き換えられる予定の選択テキストの長さです。何も選択されていない場合、count
は0
になります。after
:これは挿入されるテキストの長さです。onTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
charSequence
:これは、変更が加えられた後のテキストの内容です。ここでこの値を変更しないでください。必要に応じて、editable
内のafterTextChanged
を変更します。start
:これは、新しいテキストが挿入された場所の先頭のインデックスです。before
:これは古い値です。置き換えられたのは、以前に選択されたテキストの長さです。これはcount
のbeforeTextChanged
と同じ値です。count
:これは挿入されたテキストの長さです。これはafter
のbeforeTextChanged
と同じ値です。afterTextChanged
afterTextChanged(Editable editable)
onTextChanged
と同様に、これは変更が既に行われた後に呼び出されます。ただし、現在はテキストが変更されている可能性があります。
editable
:これはEditText
の編集可能なテキストです。ただし、それを変更する場合は、無限ループに入らないように注意する必要があります。詳しくは ドキュメント をご覧ください。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) {
}
};