http://blog.csdn.net/shichaosong/article/details/7548493
Android EditText截获与监听输入事件
EditText作为给用户输入内容的控件,有时候为了需要,我们不得已要去监听用户输入的内容,比如限制只能输入中文、或者数字、或者电话号码、或者字母加数字。。。。等等吧。
怎么监听呢?前几天我这里涉及到一个地方,就是限制用户不能输入中文,那么如何判断呢?
有个办法就是用正则表达式,我也确实采用了这种办法,不过其实还有另外一种方式,就是判断用户输入内容的ASCII码,对每个字符都做一次判断。还有,就是获取用户输入内容的字节数和它的长度相比较,如果不相等,就是中文字符。这3种办法都可以实现这种效果。
第一种办法:
// if(Methods.isHaveChina(ddd)){
// Methods.log(this, "tag", "密码中含有中文,给他删掉");
// edt.delete(edt.length()-ddd.length(), edt.length());
// }
第二种办法:
// try {
// String temp = edt.toString();
// String tem = temp.substring(temp.length()-1, temp.length());
// char[] temC = tem.toCharArray();
// int mid = temC[0];
// if(mid>=48&&mid<=57){//数字
// return;
// }
// if(mid>=65&&mid<=90){//大写字母
// return;
// }
// if(mid>=97&&mid<=122){//小写字母
// return;
// }
// edt.delete(temp.length()-1, temp.length());
// } catch (Exception e) {
// try {
// throw new Exception("登录页面监听密码输入框只能输入数字或者英文出错");
// } catch (Exception e1) {
// e1.printStackTrace();
// }
// }
第三种办法:
String s = "ss";
if(s.length() != s.getBytes().length){
System.out.println(9);
}else{
System.out.println(8);
}
还有这些,看看也无妨:
输入框中每输入一个字符,下面的TextView可以迅速的显示出来输入框中的内容。
1.第一种方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件。
edittext.setOnKeyListener(
new
View.OnKeyListener() {
@Override
public
boolean
onKey(View v,
int
keyCode, KeyEvent event) {
textview.setText(edittext.getText());
return
false
;
}
});
2.第二种方法:使用TextWatcher类,这种方式是可以监听软键盘和硬键盘的,我们只需要实现onTextChanged方法即可,另外TextWatcher还提供了beforeTextChanged和afterTextChanged方法,用于更加详细的输入监听处理。
edittext.addTextChangedListener(
new
TextWatcher() {
@Override
public
void
onTextChanged(CharSequence s,
int
start,
int
before,
int
count) {
textview.setText(edittext.getText());
}
@Override
public
void
beforeTextChanged(CharSequence s,
int
start,
int
count,
int
after) {
}
@Override
public
void
afterTextChanged(Editable s) {
}
});
3、代码片段:实现当输入到最大值时则不允许再输入了,另外,由于EditText并没有提供给我们EditText的禁止输入功能,以下方法也实现了此功能。
private
void
setEditable(EditText mEdit,
int
maxLength,
boolean
value) {
if
(value) {
mEdit.setFilters(
new
InputFilter[] {
new
MyEditFilter(maxLength) });
mEdit.setCursorVisible(
true
);
mEdit.setFocusableInTouchMode(
true
);
mEdit.requestFocus();
}
else
{
mEdit.setFilters(
new
InputFilter[] {
new
InputFilter() {
@Override
public
CharSequence filter(CharSequence source,
int
start,
int
end, Spanned dest,
int
dstart,
int
dend) {
return
source.length() <
1
? dest.subSequence(dstart, dend) :
""
;
}
} });
mEdit.setCursorVisible(
false
);
mEdit.setFocusableInTouchMode(
false
);
mEdit.clearFocus();
}
}