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

xiaoxiao2021-02-28  66

在软件设计中我们会遇到这样的请求,比如用户购物时可以在文本框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的值)的修改,放在替换操作执行之前完成。

转载请注明原文地址: https://www.6miu.com/read-74815.html

最新回复(0)