在开发过程会根据实际情况对输入框中的输入内容加以限制,限制输入内容不同对应的策略不同
在实际开发过程中遇到输入框中只允许输入汉字的要求,针对该问题的解决方案如下:
setFilters接收的参数是InputFilter类型的数组,通过该方法对输入的文字进行过滤
mEditText.setFilters(filter);
private InputFilter[] filter = new InputFilter[]{
new InputFilter() {
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
if (!checkNameChese(charSequence.toString())) {
return "";
}
return null;
}
}
};
/**
* 检测String是否全是中文
*
* @param name
* @return
*/
public boolean checkNameChese(String name) {
boolean res = true;
char[] cTemp = name.toCharArray();
for (int i = 0; i < name.length(); i++) {
if (!isChinese(cTemp[i])) {
res = false;
break;
}
}
return res;
}
/**
* 判定输入汉字
* @param c
* @return
*/
public boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
) {
return true;
}
return false;
}
针对输入框中只能输入字母或数字的情况,对应的策略如下:
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String editable = mEditText.getText().toString();
String regEx = "[^a-zA-Z0-9]"; //只能输入字母或数字
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(editable);
String str = m.replaceAll("").trim(); //删除不是字母或者数字的字符
if (TextUtils.equals(str, mEditText.getText().toString())) {
mEditText.setText(str);
mEditText.setSelection(str.length()); //重新设置光标的所在位置
}
@Override
public void afterTextChanged(Editable s) {
}
});