在我的项目中,我有一个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){}
});
答案 0 :(得分:141)
使用
s.length()
以下是其中一个答案中的建议,但其效率非常低
textMessage.getText().toString().length()
答案 1 :(得分:38)
如何在EditText中获取char的长度并显示它?
中的某些内容
tv.setText(s.length() + " / " + String.valueOf(charCounts));
答案 2 :(得分:27)
您的代码几乎没有变化:
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){}
});
答案 3 :(得分:5)
这是一个稍微更一般的答案,对未来的观众有更多的解释。
如果要在文本更改后找到文本长度或执行其他操作,可以将文本更改的侦听器添加到编辑文本中。
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
。
您可以使用
获取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
的可修改文字。但是,如果你改变它,你必须小心不要陷入无限循环。有关详细信息,请参阅documentation。答案 4 :(得分:0)
TextWatcher maritalStatusTextWatcher = new TextWatcher(){ @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) {
}
};