我的代码:
fractionNumEt.addTextChangedListener(new TextWatcher() {
boolean ignoreChange = false;
@Override
public void afterTextChanged(Editable s) {
if(!ignoreChange) {
String string = String.valueOf(s);
if (string.length() > 2) {
string = string.substring(0, string.length() - 1);
ignoreChange = true;
fractionNumEt.setText(string);
ignoreChange = false;
}
}
}
....
我正在尝试将字符长度限制为2,但希望继续收听。当我键入“ 1”,“ 2”时,它会显示“ 12”,这很好。现在,当我键入“ 3”时,它将写为“ 31”而不是“ 23”。到底是怎么回事!我也尝试过:
string = string.substring(1, string.length());
在这种情况下,它第一次只能工作n,然后什么都没有改变。
之所以发生这种情况setText()
,是因为之后,EditText的光标返回到第一个位置。然后,任何新的数字将在字符串的开头添加。
尝试如下更新代码:
@Override
public void afterTextChanged(Editable s) {
if(!ignoreChange) {
String string = String.valueOf(s);
if (string.length() > 2) {
string = string.substring(0, string.length() - 1);
ignoreChange = true;
fractionNumEt.setText(string);
fractionNumEt.setSelection(fractionNumEt.getText().length());
ignoreChange = false;
}
}
}
只是一个建议
在这里检查可编辑文件
我认为您不需要将其转换为String。afterTextChanged(Editable s)
接收一个Editable作为参数。您可以直接更改它。不需要将其隐藏为字符串。
而且:您甚至不需要制作EditText.setText(),因为可编辑内容中的任何更改都将自动传递给EditText(因为afterTextChanged
android调用了它,使您有机会在更新文本之前有效地显示该文本)文字)。
也许是这样的:
@Override
public void afterTextChanged(Editable s) {
if(!ignoreChange) {
if(s.length() > 2) {
s.delete(s.length() - 1,s.length());
}
}
}
用Editable播放一点,您会发现它更容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句