在EditText中更改字符计数侦听器

在我的项目中,我有一个EditText 。 我想要统计EditText的字符,并在TextView显示它的编号。 我写了下面的代码,它工作正常。 但是,我的问题是当我点击退格计数,但我需要减less数字。 我怎样才能考虑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() 

其中一个答案曾经提到过,但效率很低

 textMessage.getText().toString().length() 

如何才能得到您的EditText字符的长度并显示它?

沿着这条线的东西

 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 ,它需要重写三个方法: beforeTextChangedonTextChangedafterTextChanged

计数字符

您可以在onTextChangedbeforeTextChanged获取字符数

 charSequence.length() 

或者在afterTextChanged

 editable.length() 

方法的意义

参数有点混乱,所以这里有一点额外的解释。

beforeTextChanged

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

  • charSequence :这是待处理更改之前的文本内容。 你不应该试图改变它。
  • start :这是新文本将被插入的索引。 如果select一个范围,那么它是范围的开始索引。
  • count :这是将被replace的选定文本的长度。 如果没有select,则count将为0
  • after :这是要插入的文本的长度。

onTextChanged

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

  • charSequence :这是更改后的文本内容。 你不应该尝试在这里修改这个值。 如果需要,修改afterTextChangededitable
  • start :这是插入新文本的起始处的索引。
  • before :这是旧的价值。 这是以前选定的文本被replace的长度。 这与beforeTextChanged count相同。
  • count :这是插入的文本的长度。 这与beforeTextChanged after值相同。

afterTextChanged

afterTextChanged(Editable editable)

onTextChanged一样,在更改完成后调用它。 但是,现在文本可能会被修改。

  • editable :这是EditText的可编辑文本。 但是,如果你改变它,你必须小心,不要陷入无限循环。 请参阅文档了解更多详情。