您的位置:首页 > 移动开发 > Android开发

Android 监听EditText控件文本变化并修改显示内容

2017-09-01 12:44 1666 查看
在软件设计中我们会遇到这样的请求,比如用户购物时可以在文本框EditText内只能输入整数,而且大小不能超过对应商品的剩余数额num。前者好办,设置EditText的inputType就可以了,后者就需要监听EditText的文本变化。

在网上浏览了一圈,看到的监听器都只能监听文本的变化,而不能修改EditText的文本显示,还是自己动手解决吧。

EditText viewById = (EditText)findViewById(R.id.edit);
viewById.addTextChangedListener(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) {

}

@Override
public void afterTextChanged(Editable editable) {
String originText = editable.toString();
String myText="konijiwa";
CharSequence charSequence = myText.subSequence(0, myText.length());
if(i==0) {
i++;
editable.replace(0, originText.length(), charSequence);
}
}
});


通过分析editable.replace(int st, int en, CharSequence text)方法,参数st代表待替换的EditText的文本的初始位置,en代表结束位置,英文过关的同道可以自行查看源代码注释。上述代码中使用(i==0)作为是否执行替换文本操作的判定条件。值得提醒的是,执行editable.replace(0, originText.length(), charSequence)方法之后,会立即再次触发TextWatcher文本监听器中的方法,因为文本在代码中再次修改了。也就是代码如下,

if(i==0) {
editable.replace(0, originText.length(), charSequence);
i++;
}


那么i++将永远无法执行,程序会陷入死循环。所以我们应该把触发替换文本操作的标志(i的值)的修改,放在替换操作执行之前完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: