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

最近在项目中,有遇到“让编辑框只能输入汉字”这种需求,然后上网看了一下,解决方法大致是两种,一种是自定义了一个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位置:点击前往


转载出处:http://blog.csdn.net/lx_asymmetric/article/details/53838165


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值