您的位置:首页 > 移动开发 > Android开发

Android EditText 让编辑框只能输入汉字

2016-12-23 13:13 393 查看
转载请标明出处:http://blog.csdn.net/lx_asymmetric/article/details/53838165

最近在项目中,有遇到“让编辑框只能输入汉字”这种需求,然后上网看了一下,解决方法大致是两种,一种是自定义了一个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接口可以非常简单的实现这个功能。

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;
}
};
实现接口中的filter方法,然后把它设置到EditText组件上,就可以实现此需求了。
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位置:点击前往
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息