Android TextInputLayout使用,解决setErrorEnabled的bug

原创 2016年08月29日 11:17:05
    /**
     * 内部类实现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)

版权声明:本文为【LouisGeek】原创文章,转载请注明出处!

Android TextInputLayout

TextInputLayout是Google在2015 I/O大会上发布的Design Library包下的控件,使用比较简单,简单的用了下确实挺方便的。 先来看下效果图: 我们可以看 1、,...

TextInputLayout 的简单使用

TextInputLayout 的简单使用

使用TextInputLayout时,error信息为空白

TextInputLayout tilUsername; TextInputLayout tilPwd; if (userName.isEmpty() | passWord.isEmpty...

关于android4.0系统周围红框的问题

其实,这个不是什么bug,听说这个是为了开发调试用的,具体我页不是很清除,之前移植4.0的时候,就遇到测试不提出的这个问题,在查阅了资料之后找到了解决的办法。             解决办法如下: ...

Android EditText.setError() - 会弹出一个popupwindow,效果很好

SetError提供了以下两个方法: 1.显示自定义文字 public void setError (CharSequence error) 2.显示自定义文字和图标 public void ...

Android TextInputLayout修改提示信息文字颜色

工作中,有时候需要修改TextInputLayout提示信息文字颜色,怎么办呢?谷歌把Design Support Library写的很好。每一个控件的颜色都是直接通过主题颜色绘制的,在 style....

android开发给linearlayout设置边框

最近在学习android开发,遇到了一个地方需要一个边框的设置,找了一些资料找到了实现方法,这里网上也有一些方法,说的比较大概,这里将详细的步骤说明一下  1.首先在res目录下新建一个xml文...

Android中用Spannable在TextView中给文字加上边框

项目中需要给一个文本中的一些关键字高亮的效果,在网上找资料后发现TextView支持Spannable来实现一些效果, 传送门:Android中用Spannable在TextView中设置超链接、颜...

Android 通过solid来定义不同边框的颜色,可以只定义一个边框的颜色

以下是设置按钮的右边框和底边框颜色为红色,边框大小为3dp,如下图: 在drawable新建一个 buttonstyle.xml的文件,内容如下: ...
  • AMinfo
  • AMinfo
  • 2012年07月24日 21:20
  • 101663

Android中EditText的setError文字不显示的问题

现象 Android系统提供的控件EditText,使用其方法setError时,会出现错误框显示但是文字不显示的问题。原因是系统部分主题的setError文字和背景都是白色,例如系统自带的几个lig...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android TextInputLayout使用,解决setErrorEnabled的bug
举报原因:
原因补充:

(最多只允许输入30个字)