Android TextInputLayout使用,解决setErrorEnabled的bug

来源:互联网 发布:lua 定义有序数组 编辑:程序博客网 时间:2024/06/05 02:36
    /**     * 内部类实现TextWatcher     */    private class MyTextWatcher implements TextWatcher{        private EditText editText;        private TextInputLayout textInputLayout;        private MyTextWatcher(EditText editText,TextInputLayout textInputLayout) {            this.editText = editText;            this.textInputLayout = textInputLayout;        }        @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 text = s.toString();            Log.i(TAG, "onTextChanged: ");            if (text.trim().equals("")){               //### textInputLayout.setErrorEnabled(false);//使用这个方法来控制显隐藏,在api 23下有bug  再改成true时  error信息不再显示                textInputLayout.setError(null);                //使用这个方法来控制显隐藏                if (textInputLayout.getChildCount() == 2){                    textInputLayout.getChildAt(1).setVisibility(View.GONE);                }                return;            }            switch (editText.getId()){                case R.id.id_et_phone:                    if (!RegexUtil.checkMobileNewSimple(text)){                       // textInputLayout.setErrorEnabled(true);//使用这个方法来控制显隐藏,在api 23下有bug  再改成true时  error信息不再显示                        textInputLayout.setError("请填写正确的手机号码");                        //使用这个方法来控制显隐藏                        if (textInputLayout.getChildCount() == 2){                            textInputLayout.getChildAt(1).setVisibility(View.VISIBLE);                        }                        Log.i(TAG, "onTextChanged: 手机号格式不正确");                    }else{                        //textInputLayout.setErrorEnabled(false);                        textInputLayout.setError(null);                        //使用这个方法来控制显隐藏                        if (textInputLayout.getChildCount() == 2){                            textInputLayout.getChildAt(1).setVisibility(View.GONE);                        }                    }                    break;                case R.id.id_et_email:                    if (!RegexUtil.checkEmail(text)){                       // textInputLayout.setErrorEnabled(true);                        textInputLayout.setError("请填写正确的邮箱");                        //使用这个方法来控制显隐藏                        if (textInputLayout.getChildCount() == 2){                            textInputLayout.getChildAt(1).setVisibility(View.VISIBLE);                        }                        Log.i(TAG, "onTextChanged: 邮箱格式不正确");                    }else{                       // textInputLayout.setErrorEnabled(false);                        textInputLayout.setError(null);                        //使用这个方法来控制显隐藏                        if (textInputLayout.getChildCount() == 2){                            textInputLayout.getChildAt(1).setVisibility(View.GONE);                        }                    }                    break;                case R.id.id_et_frsfzhm:                    if (!RegexUtil.checkIdCardNewSimple(text)){                        // textInputLayout.setErrorEnabled(true);                        textInputLayout.setError("请填写正确的身份证号码");                        //使用这个方法来控制显隐藏                        if (textInputLayout.getChildCount() == 2){                            textInputLayout.getChildAt(1).setVisibility(View.VISIBLE);                        }                        Log.i(TAG, "onTextChanged: 身份证号码格式不正确");                    }else{                        // textInputLayout.setErrorEnabled(false);                        textInputLayout.setError(null);                        //使用这个方法来控制显隐藏                        if (textInputLayout.getChildCount() == 2){                            textInputLayout.getChildAt(1).setVisibility(View.GONE);                        }                    }                    break;            }        }        @Override        public void afterTextChanged(Editable s) {            String text = s.toString();        }    }
  id_et_xxx.addTextChangedListener(new MyTextWatcher(id_et_xxx,id_til_xxx));

还有就是 2016年9月14日10:05:50补充

//Android官网bug fix log
https://developer.android.com/topic/libraries/support-library/revisions.html

Changes for Design Support Library:
Fixed an issue where TextInputLayout doesn’t clear error tint after setErrorEnabled(false) on API level 21 - 22 (Issue 202829)

0 0