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

关于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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: