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

Hes*_*sam 272 android onchange listener android-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){}
}); 
Run Code Online (Sandbox Code Playgroud)

xte*_*ore 142

使用

s.length()
Run Code Online (Sandbox Code Playgroud)

以下是其中一个答案中提出的,但效率很低

textMessage.getText().toString().length()
Run Code Online (Sandbox Code Playgroud)


And*_*ong 38

如何在EditText中获取char的长度并显示它?

沿着这条线的东西

tv.setText(s.length() + " / " + String.valueOf(charCounts));
Run Code Online (Sandbox Code Playgroud)

  • 它甚至比那更容易 - 你可以调用`textMessage.length()`,不需要`getText().toString()`.http://developer.android.com/reference/android/widget/TextView.html#length() (6认同)

小智 28

您的代码中几乎没有变化:

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){}
}); 
Run Code Online (Sandbox Code Playgroud)


Sur*_*gch 6

这是一个稍微更一般的答案,对未来的观众有更多的解释.

添加文本更改的侦听器

如果要在文本更改后查找文本长度或执行其他操作,可以将文本更改的侦听器添加到编辑文本中.

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

    }
});
Run Code Online (Sandbox Code Playgroud)

监听器需要TextWatcher,这需要三种方法来覆盖:beforeTextChanged,onTextChanged,和afterTextChanged.

计算人物

你可以得到字符计数onTextChangedbeforeTextChanged

charSequence.length()
Run Code Online (Sandbox Code Playgroud)

afterTextChanged与...

editable.length()
Run Code Online (Sandbox Code Playgroud)

方法的含义

参数有点令人困惑,所以这里有一点额外的解释.

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:这是更改后的文本内容.您不应该尝试在此处修改此值.修改editableafterTextChanged,如果你需要.
  • start:这是插入新文本的开始的索引.
  • before:这是旧值.它是已替换的先前所选文本的长度.这是相同的值countbeforeTextChanged.
  • count:这是插入的文本的长度.这是相同的值afterbeforeTextChanged.

afterTextChanged

afterTextChanged(Editable editable)

比如onTextChanged,在更改完成后调用.但是,现在可以修改文本.

  • editable:这是可编辑的文本EditText.但是,如果你改变它,你必须小心不要陷入无限循环.有关详细信息,请参阅文档.

这个答案的补充图像

在此输入图像描述