现在的位置: 首页 > 移动开发 > 正文

【转】Android EditText截获与监听输入事件

2019年05月19日 移动开发 ⁄ 共 2350字 ⁄ 字号 评论关闭

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还提供了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, intdend)
{
return source.length() < 1 ?
dest.subSequence(dstart, dend) : 
"";
}
} });
mEdit.setCursorVisible(false);
mEdit.setFocusableInTouchMode(false);
mEdit.clearFocus();
}
}

 

抱歉!评论已关闭.