以前可能更多的是让edittext设置成只允许输入英文和特殊符号,因为一般都是输入密码的时候要这么限定,这次需要只让edittext输入中文,这里用InputFilter来过滤输入文字
InputFilter inputFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!isChinese(source.charAt(i))) {
ToastUtils.show("只能输入汉字");
return "";
}
}
return null;
}
};
editText.setFilters(new InputFilter[]{inputFilter});
那么如何判断是否是中文呢,也就是要排除英文、特殊字符、标点、表情等,这里通过unicode编码标准来判断(中、日、韩
三国的象形文字的Unicode编码)
private boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
// 4E00-9FBF:CJK 统一表意符号
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
//F900-FAFF:CJK 兼容象形文字
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
//3400-4DBF:CJK 统一表意符号扩展 A
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
//2000-206F:常用标点
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
//3000-303F:CJK 符号和标点
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
//FF00-FFEF:半角及全角形式
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
判断每一个char是否是汉字
大功告成