在EditText中计算字符更改了侦听器

时间:2010-11-30 04:25:53

标签: android listener android-edittext onchange

在我的项目中,我有一个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){}
}); 

5 个答案:

答案 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,这需要覆盖三种方法:beforeTextChangedonTextChangedafterTextChanged

计算字符

您可以使用

获取onTextChangedbeforeTextChanged中的字符数
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

来自this answer

的补充图片

enter image description here

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

    }
};