在做项目开发的时候,有时候要求输入框EditText只能输入特定内容,比如手机号码只能输入数字,用户名密码能输入字母及数字等。针对这种要求android中也自带了一些处理方式,比如可以在布局文件中设置android:inputType="number"保证只能输入数字等,也可以在布局文件中设置android:digits=""设置特定的字字符等。今天我们要讲的是另外一种方式,就是通过EditText的addTextChangedListener()监听来实现对输入内容的限制。
addTextChangedListener()传入的参数是TextWatcher对象,我们只要对TextWatch做在相应处理就可以了,方法就是写一个类继承TextWatcher,在我们写的类中对文字进行处理。今天讲的是一个很简单的例子,实现的目的就是只能让EditText输入字母,下划线,小数点及@,也相当于只能输入邮箱(可以用正则表达示来判断),今天主要讲的是TextWatch.例子代码如下:
/*
*实现只能输入特定字符的工具类
*/
public class UnitEditTextTool implements TextWatcher {
private EditText mEditText;
private int length = 0;
private String filter = "abcdefghijgklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.@";
private String filterCharacter = "";
public UnitEditTextTool(EditText mEditText, int length) {//限制了输入文字长度,与android:maxLength=“‘不同的是,我们这里对输入的内容进行了中文字符判断
super();
this.mEditText = mEditText;
this.length = length;
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
filterCharacter = s.toString();
}
@Override
public void afterTextChanged(Editable s) {
int count = 0;
StringBuffer sb = new StringBuffer();
String str = s.toString();
if (!str.equals(filterCharacter)) {
return;
}
for (int i = 0; i < str.length(); i++) {
if (VerifyTool.isChineseChar(str.charAt(i) + "")) {//如果是中文字符长度为2,其它的长度为1
sb.append(str.charAt(i));
count += 2;
}
if (filter.indexOf(str.charAt(i)) != -1) {
sb.append(str.charAt(i));
count += 1;
}
if (count >= length) {
break;
}
}
filterCharacter = sb.toString();
mEditText.setText(filterCharacter);
Editable edt = mEditText.getText();
Selection.setSelection(edt, edt.length());
}
}
另外贴上判断中是不是中文字符的正则表达示:
/**
* 判断中文
*/
public static boolean isChineseChar(String inputString) {
Pattern pattern = Pattern.compile("^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$");
return pattern.matcher(inputString).matches();
}
工具类写好了,比如你在某个页面的EditText中要使用这个方法,只需要做的是
EditText edt=findViewById(R.id.....)
edt.addTextChangedListener(new UnitEditTextTool(edt,100));//限制edt只能输入100个字符。
ok,就写到这里了。
原文地址:http://blog.csdn.net/true100/article/details/43969857