Android TextInputLayout使用,解决setErrorEnabled的bug

    /**
     * 内部类实现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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值