Android EditText 讓編輯框只能輸入漢字
阿新 • • 發佈:2019-01-30
最近在專案中,有遇到“讓編輯框只能輸入漢字”這種需求,然後上網看了一下,解決方法大致是兩種,一種是自定義了一個EditText,然後重寫commitText方法,實現限制輸入漢字的方法,例如:
/** * 對輸入的內容進行攔截 * * @param text * @param newCursorPosition * @return */ @Override public boolean commitText(CharSequence text, int newCursorPosition) { // 只能輸入漢字 if (!isChinese(text.toString())) { return false; } return super.commitText(text, newCursorPosition); }
另一種是在所有的輸入都完成後,檢查EditText裡面的字元是否都是漢字,這種就不舉例了。
其實實現這種需求還有第三種方式,通過使用Android原始碼中的InputFilter介面可以非常簡單的實現這個功能。
實現介面中的filter方法,然後把它設定到EditText元件上,就可以實現此需求了。InputFilter filter = new InputFilter() { 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))) { return ""; } } return null; } };
et_chinese.setFilters(new InputFilter[]{filter});
然後InputFilter介面中還有個靜態類LengthFilter可以實現對編輯框輸入字元數量的控制。//如果想要再實現輸入字元數量的限制,可以這麼寫,如果限制字元數為6,就在LengthFilter中傳入引數6
et_chinese.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(6)});
程式碼中的isChinese方法來自:/**
* 判定輸入漢字
*
* @param c
* @return
*/
public static 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
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
最後放出DEMO位置:點選前往