EditText 內容限制

1. 特殊字符限制

情景:密碼輸入框不允許輸入特殊字符,如果輸入給相關的提示,並且輸入不成功
方法:根據EditText 的setFilters 方法去做限制
 InputFilter filter_speChat = new InputFilter() {
            @Override
            public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
                String speChat = "[`~!@#_$%^&*()+=|{}'.:;',\\[\\]<>/?~!@#¥%……&*()— +\\-|{}【】‘;:”“’。,、?]";
                Pattern pattern = Pattern.compile(speChat);
                Matcher matcher = pattern.matcher(charSequence.toString());
                if (matcher.find()) {
                    ToastUtils.showToast(context, Utils.getStringByValues(R.string.threshold_area),ToastUtils.ERROR_LEVEL);
                    return "";
                } else {
                    return null;
                }
            }
        };
        editText.setFilters(new InputFilter[]{filter_speChat});

2. 限制輸入整數數大小

情景:成績輸入框限制只能輸入 0-100大小的整數
方法: 使用EditText addTextChangedListener 監聽方法 和配合限制輸入特殊字符的限制條件
etSetting.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) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s != null && s.toString().equals(".")) {
                    etSetting.setText("");
                } else if (s != null && !"".equals(s.toString()) && Integer.parseInt(s.toString()) > 100) {
                    etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
                    etSetting.setSelection(etSetting.getText().toString().length());
                    ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area), ToastUtils.ERROR_LEVEL);
                }else if (s != null && !"".equals(s.toString())){
                        if (s.toString().length()>=2&&s.toString().startsWith("0")){
                            etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
                            etSetting.setSelection(etSetting.getText().toString().length());
                            ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area), ToastUtils.ERROR_LEVEL);
                        }
                }
            }
        });

3. 限制輸入小數數大小

情景:溫度輸入框限制只能輸入 35-40大小的整數,精確到小數點後一位
方法: 使用EditText addTextChangedListener 監聽方法 和配合限制輸入特殊字符的限制條件(特殊字符要除去 小數點 (.))
 etSetting.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) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s != null && !"".equals(s.toString())){
                    if (s.toString().length()==1){
                        String regex = "^[0-25-9]";
                        Pattern pattern = Pattern.compile(regex);
                        Matcher match = pattern.matcher(s.toString());
                        if (match.matches()){
                            etSetting.setText("");
                            ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_1), ToastUtils.ERROR_LEVEL);
                        }
                    }else if (s.toString().length()==2){
                        String regex = "^[1-4]";
                        Pattern pattern = Pattern.compile(regex);
                        Matcher match = pattern.matcher(s.toString().substring(1));
                        if (match.matches()){
                            etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
                            etSetting.setSelection(etSetting.getText().toString().length());
                            ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_1), ToastUtils.ERROR_LEVEL);
                        }
                    }else if (s.toString().indexOf(".")==-1&&s.toString().length()>2){
                        etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
                        etSetting.setSelection(etSetting.getText().toString().length());
                        ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_1), ToastUtils.ERROR_LEVEL);
                    }else {
                        if (checkFloatLength(s.toString())>1){
                            etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
                            etSetting.setSelection(etSetting.getText().toString().length());
                            ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_2), ToastUtils.ERROR_LEVEL);
                        }else if (s.toString().length()==4&&Float.parseFloat(s.toString())>40){
                            etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
                            etSetting.setSelection(etSetting.getText().toString().length());
                            ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_1), ToastUtils.ERROR_LEVEL);
                        }
                    }

                }
            }
        });
        
        
        
          private int checkFloatLength(String toString) {
//        Log.e("zyb", "checkFloatLength: "+toString.split("\\.")[1].length());
        if (toString.indexOf(".")>-1&&toString.split("\\.").length>1){
            return toString.split("\\.")[1].length();
        }else {
            return 0;
        }

    }
        

4.限制輸入框制定長度的字符

情景:名稱輸入框制定輸入16個字符(中文8個文字,英文16個字母)
方法: 使用EditText addTextChangedListener 監聽方法
 device_name.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) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                try {
                    if (s.toString().getBytes("GBK").length>16){
                        device_name.setText(s.toString().substring(0, s.toString().length() - 1));
                        device_name.setSelection(device_name.getText().toString().length());
                        ToastUtils.showToast(DevicesSettingActivity.this, Utils.getStringByValues(R.string.device_area), ToastUtils.ERROR_LEVEL);
                    }
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章