Android 对输入框EditText中输入内容加以限制

在开发过程会根据实际情况对输入框中的输入内容加以限制,限制输入内容不同对应的策略不同

在实际开发过程中遇到输入框中只允许输入汉字的要求,针对该问题的解决方案如下:

setFilters接收的参数是InputFilter类型的数组,通过该方法对输入的文字进行过滤

mEditText.setFilters(filter);
 private InputFilter[] filter = new InputFilter[]{
            new InputFilter() {
                @Override
                public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
                    if (!checkNameChese(charSequence.toString())) {
                        return "";
                    }
                    return null;
                }
            }
    };
 /**
     * 检测String是否全是中文
     *
     * @param name
     * @return
     */
    public boolean checkNameChese(String name) {
        boolean res = true;
        char[] cTemp = name.toCharArray();
        for (int i = 0; i < name.length(); i++) {
            if (!isChinese(cTemp[i])) {
                res = false;
                break;
            }
        }
        return res;
    }
 /**
     * 判定输入汉字
     * @param c
     * @return
     */
    public 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
        ) {
            return true;
        }
        return false;
    }

针对输入框中只能输入字母或数字的情况,对应的策略如下:

 mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String editable = mEditText.getText().toString();
                String regEx = "[^a-zA-Z0-9]";  //只能输入字母或数字
                Pattern p = Pattern.compile(regEx);
                Matcher m = p.matcher(editable);
                String str = m.replaceAll("").trim(); //删除不是字母或者数字的字符
                if (TextUtils.equals(str, mEditText.getText().toString())) {
                    mEditText.setText(str);
                    mEditText.setSelection(str.length()); //重新设置光标的所在位置
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值