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还提供了beforeTextChangedafterTextChanged方法,用于更加详细的输入监听处理。

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();
}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值