关于android的EditText的监听接口TextWatcher——调色盘例子
2017-03-20 16:49
435 查看
在做调色盘的例子时,除了通过按钮点击“+”和“-”来改变rgb的值,还需要能够直接改变EditText的值来调颜色,这个时候需要用到EditText的监听接口TextWatcher。
因为要同时监听三个EditText,所以用一个类TextChange继承TextWatcher。
//对EditText值监听
public class TextChange implements TextWatcher{
private EditText EditId = null;
public TextChange(EditText id){
EditId = id;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if(EditId == et_red){
r = Integer.parseInt(et_red.getText().toString());
if(r>255){
r=0;
}
if(r<0){
r=255;
}
et_red.removeTextChangedListener(this);
et_red.setText(""+r);
et_red.addTextChangedListener(this);
tv_color.setBackgroundColor(Color.rgb(r,g,b));
}
if(EditId == et_green){
g = Integer.parseInt(et_green.getText().toString());
if(g>255){
g=0;
}
if(g<0){
r=255;
}
et_green.removeTextChangedListener(this);
et_green.setText(""+g);
et_green.addTextChangedListener(this);
tv_color.setBackgroundColor(Color.rgb(r,g,b));
}
if(EditId == et_blue){
b = Integer.parseInt(et_blue.getText().toString());
if(b>255){
b=0;
}
if(g<0){
r=255;
}
et_blue.removeTextChangedListener(this);
et_blue.setText(""+b);
et_blue.addTextChangedListener(this);
tv_color.setBackgroundColor(Color.rgb(r,g,b));
}
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
}
然后每个EditText使用addTextChangedListener(TextWatcher watcher)方法对EditText实现监听
et_red = (EditText)findViewById(R.id.et_red);
et_green = (EditText)findViewById(R.id.et_green);
et_blue = (EditText)findViewById(R.id.et_blue);
et_red.addTextChangedListener(new TextChange(et_red));
et_green.addTextChangedListener(new TextChange(et_green));
et_blue.addTextChangedListener(new TextChange(et_blue));
不过在使用TextWatcher时,若在afterTextChanged方法中调用setText()来改变EditText的值,就会出现死循环,然后app卡死,那么会重复触发对此方法的递归死循环调用, 产生ANR。所以需要在setText()前移除对EditText的监听接口,在setText()之后再绑定接口。
et_red.removeTextChangedListener(this);
et_red.setText(""+r);
et_red.addTextChangedListener(this);
因为要同时监听三个EditText,所以用一个类TextChange继承TextWatcher。
//对EditText值监听
public class TextChange implements TextWatcher{
private EditText EditId = null;
public TextChange(EditText id){
EditId = id;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if(EditId == et_red){
r = Integer.parseInt(et_red.getText().toString());
if(r>255){
r=0;
}
if(r<0){
r=255;
}
et_red.removeTextChangedListener(this);
et_red.setText(""+r);
et_red.addTextChangedListener(this);
tv_color.setBackgroundColor(Color.rgb(r,g,b));
}
if(EditId == et_green){
g = Integer.parseInt(et_green.getText().toString());
if(g>255){
g=0;
}
if(g<0){
r=255;
}
et_green.removeTextChangedListener(this);
et_green.setText(""+g);
et_green.addTextChangedListener(this);
tv_color.setBackgroundColor(Color.rgb(r,g,b));
}
if(EditId == et_blue){
b = Integer.parseInt(et_blue.getText().toString());
if(b>255){
b=0;
}
if(g<0){
r=255;
}
et_blue.removeTextChangedListener(this);
et_blue.setText(""+b);
et_blue.addTextChangedListener(this);
tv_color.setBackgroundColor(Color.rgb(r,g,b));
}
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
}
然后每个EditText使用addTextChangedListener(TextWatcher watcher)方法对EditText实现监听
et_red = (EditText)findViewById(R.id.et_red);
et_green = (EditText)findViewById(R.id.et_green);
et_blue = (EditText)findViewById(R.id.et_blue);
et_red.addTextChangedListener(new TextChange(et_red));
et_green.addTextChangedListener(new TextChange(et_green));
et_blue.addTextChangedListener(new TextChange(et_blue));
不过在使用TextWatcher时,若在afterTextChanged方法中调用setText()来改变EditText的值,就会出现死循环,然后app卡死,那么会重复触发对此方法的递归死循环调用, 产生ANR。所以需要在setText()前移除对EditText的监听接口,在setText()之后再绑定接口。
et_red.removeTextChangedListener(this);
et_red.setText(""+r);
et_red.addTextChangedListener(this);
相关文章推荐
- 关于EditText中的TextWatcher监听
- android UI-EditText的长度监听慎用TextWatcher
- Android 文本监听接口TextWatcher详解
- 关于EditText中的TextWatcher监听
- 关于EditText中的TextWatcher监听
- 关于EditText中的TextWatcher监听
- android editview 设置TextWatcher 输入监听后产生崩溃
- Android TextWatcher三个回调详解,监听EditText的输入
- Android 文本监听接口TextWatcher详解
- Android TextWatcher三个回调详解,监听EditText的输入
- 最强理解:Android对EditText输入时设置监听即TextWatcher的用法
- android 关于EditText的输入监听
- Android中EditText监听软键盘的事件
- Android TextWatcher监控EditText中的输入内容并限制其输入字符个数
- Android开发教程:监听EditText的变化
- android EditText与Filterable接口之模糊查询
- Android应用开发EditText文本内容变化监听方法
- 关于EditText的android:maxLength属性的注意事项
- android 监听EditText输入字符长度
- Android EditText截获与监听输入事件