关闭

Android TextInputLayout使用,解决setErrorEnabled的bug

标签: bugtextInputLTextWatche
1214人阅读 评论(0) 收藏 举报
分类:
    /**
     * 内部类实现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
查看评论

TextInputLayout 中文翻译

TextInputLayout 中文翻译
  • pingfangx
  • pingfangx
  • 2016-07-18 13:23
  • 1117

TextInputLayout 的简单使用

TextInputLayout 的简单使用
  • antimage08
  • antimage08
  • 2015-12-20 23:33
  • 2313

Android TextInputLayout

TextInputLayout是Google在2015 I/O大会上发布的Design Library包下的控件,使用比较简单,简单的用了下确实挺方便的。 先来看下效果图: 我们可以看 1、,当EditText获得焦点时候,TextInputLayout会在左上角默认的生成一个Label用来...
  • mixin716
  • mixin716
  • 2015-12-11 14:46
  • 2173

android新特性:TextInputLayout使用方法

效果如下: TextInputLayout 控件表现得就像LinearLayout 一样,它是一个容器。TextInputLayout 中只能放一个子元素,和ScrollView有点类似,并且子元素必须是EditText; TextInputLayout 实现的功能就是当EditText中输入第一个...
  • huangxiaoguo1
  • huangxiaoguo1
  • 2017-02-07 09:58
  • 2525

android之TextInputLayout控件介绍和使用

Google开源的android中,新开发了许多的新控件供开发者使用,升级了Support Library这个库。其中的md设计是其中一个大亮点,我们可以利用之做一些很炫的效果。下面是md中TextInputLayout控件的使用。 在项目目录下的build.gradle文件的depend...
  • qq_16628781
  • qq_16628781
  • 2016-12-18 23:08
  • 549

TextinputLayout的错误提示的一些问题

这两天使用textinputlayout的时候发现一个问题,如果输入的内容为错误的话,会吧EditText变成红色,之后即使输入正确也不会变回原来的颜色。有什么好的解决办法么?谢谢          ...
  • qinhuapi6738
  • qinhuapi6738
  • 2017-01-01 02:13
  • 180

Android 5.0新控件——TextInputLayout

Android 5.0(M)新控件——TextInputLayout 介绍之前,先直观的看一下效果 TextInputLayout其实是一个容器,他继承自LinearLayout,该容器是作用于TextView的,TextInputLayout只能包裹一个子节点,类似于Scro...
  • q4878802
  • q4878802
  • 2015-11-11 13:53
  • 5127

TextInputLayout与TextInputEditText详解

导读:Android 从5.0版本开始,新增了Android Materia Design库,让开发者高效的实现炫酷的UI效果本篇文章将介绍Materia Design库的TextInputLayout与TextInputEditText组件TextInputLayout TextInputLayo...
  • u012792686
  • u012792686
  • 2017-06-12 11:12
  • 3403

Android5.0 TextInputLayout使用小结

TextInputLayout使用小结
  • byoooy
  • byoooy
  • 2016-12-07 10:09
  • 284

Android Design TextInputLayout 解析,带你深入TextInputLayout

出来工作好几年了,最近冷静下来总结发现自己技术真心不咋的,所以决定开始写博客来锻炼自己。 想了想写什么好呢,又不是大牛,所以写不出非常高深的好文章出来,所以从最基础的写起走。2015 I/O大会谷歌推出了 Android Design Support Library,所以就更新下来看了看。...
  • u011051627
  • u011051627
  • 2015-09-02 13:44
  • 7555
    个人资料
    • 访问:367093次
    • 积分:5673
    • 等级:
    • 排名:第5491名
    • 原创:217篇
    • 转载:57篇
    • 译文:0篇
    • 评论:67条
    最新评论