在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
,它需要重写三个方法: beforeTextChanged
, onTextChanged
和afterTextChanged
。
计数字符
您可以在onTextChanged
或beforeTextChanged
获取字符数
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
:这是更改后的文本内容。 你不应该尝试在这里修改这个值。 如果需要,修改afterTextChanged
的editable
。 -
start
:这是插入新文本的起始处的索引。 -
before
:这是旧的价值。 这是以前选定的文本被replace的长度。 这与beforeTextChanged
count
相同。 -
count
:这是插入的文本的长度。 这与beforeTextChanged
after
值相同。
afterTextChanged
afterTextChanged(Editable editable)
像onTextChanged
一样,在更改完成后调用它。 但是,现在文本可能会被修改。
-
editable
:这是EditText
的可编辑文本。 但是,如果你改变它,你必须小心,不要陷入无限循环。 请参阅文档了解更多详情。