以前可能更多的是讓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是否是漢字
大功告成