如图所见的红色背景问题,困扰了一整天,差点要放弃了,改用别的方案,终于在今日喜见云开。。。

因为在TextInputLayout setError方法源码中有

  // Set the EditText's background tint to the error color
        mErrorShown = true;
        updateEditTextBackground();
        updateLabelVisibility(true);

动态添加背景也不行
动态反射改变文字颜色也有问题

真是醉了。。。

总体来说,我觉得这应该是TextInputLayout 的一个bug 也许哪天就修复了 就和setErrorEnable设置false后再设置true后 错误信息不再显示的bug差不多

还是先解决方案,再消化吧:
本来是这样的

 @Override
            public void afterTextChanged(Editable editable) {
                if (editable.length() > 0) {
                    idtt.setError("格式不正确");
                } else {
                    idtt.setError(null);

改成现在这样

       @Override
            public void afterTextChanged(Editable editable) {
                if (editable.length() > 0) {
                    idtt2.setError("格式不正确");
1.PorterDuff.Mode.CLEAR
所绘制不会提交到画布上。
这里的效果:无背景 无边框
2.PorterDuff.Mode.SRC
显示上层绘制图片
这里的效果:有背景 无边框
3.PorterDuff.Mode.DST
显示下层绘制图片
这里的效果:有背景 有边框 √
4.PorterDuff.Mode.SRC_OVER
正常绘制显示,上下层绘制叠盖。
这里的效果:有背景 无边框
5.PorterDuff.Mode.DST_OVER
上下层都显示。下层居上显示。
这里的效果:有背景 有边框 √
6.PorterDuff.Mode.SRC_IN
取两层绘制交集。显示上层。
这里的效果:有背景 无边框
7.PorterDuff.Mode.DST_IN
取两层绘制交集。显示下层。
这里的效果:有背景 有边框 √
8.PorterDuff.Mode.SRC_OUT
取上层绘制非交集部分。
这里的效果:无背景 无边框
9.PorterDuff.Mode.DST_OUT
取下层绘制非交集部分。
这里的效果:无背景 无边框
10.PorterDuff.Mode.SRC_ATOP
取下层非交集部分与上层交集部分
这里的效果:有背景 无边框
11.PorterDuff.Mode.DST_ATOP
取上层非交集部分与下层交集部分
这里的效果:有背景 有边框 √
12.PorterDuff.Mode.XOR
取两层绘制非交集。两层绘制非交集。
这里的效果:无背景 无边框
13.PorterDuff.Mode.DARKEN
上下层都显示。变暗
这里的效果:有背景 有边框 √
14.PorterDuff.Mode.LIGHTEN
上下层都显示。变亮
这里的效果:有背景 无边框
15.PorterDuff.Mode.MULTIPLY
取两层绘制交集
这里的效果:有背景 有边框  颜色变黑
16.PorterDuff.Mode.SCREEN
上下层都显示。
这里的效果:有背景 有边框  颜色变白
                    if (idtt2.getEditText().getBackground() != null) {
                        idtt2.getEditText().getBackground()
                                .setColorFilter(
                                        //R.color.editItemLittleGray是背景颜色
                                        ContextCompat.getColor(idtt2.getEditText().getContext(), R.color.editItemLittleGray),
                                        //PorterDuff.Mode.DST_OVER  //有错误提示时,边框外也有背景
                                            //PorterDuff.Mode.DST  //通过
                                            PorterDuff.Mode.DST_IN  //通过
                                            //PorterDuff.Mode.DST_ATOP  //有错误提示时,边框外也有背景
                                            //PorterDuff.Mode.DARKEN  //有错误提示时,边框外也有背景
                   /*if(idtt2.getEditText().getBackground() != null) {
                        idtt2.getEditText().getBackground().mutate().setColorFilter(
                          //R.color.editItemLittleGray是背景颜色
                                ContextCompat.getColor(idtt2.getEditText().getContext(), R.color.editItemLittleGray),
                               //PorterDuff.Mode.DST_OVER  //有错误提示时,边框外也有背景
                                            PorterDuff.Mode.DST  //通过
                                            //PorterDuff.Mode.DST_IN  //通过
                                            //PorterDuff.Mode.DST_ATOP  //有错误提示时,边框外也有背景
                                            //PorterDuff.Mode.DARKEN  //有错误提示时,边框外也有背景
                } else {
                    idtt2.setError(null);

效果就是文章开头第三张图片的下面一个EditText所呈现的效果

ps:另外hint和EditText上下的距离解决方法可以看看这个:
http://blog.csdn.net/richiezhu/article/details/52621170

如图所见的红色背景问题,困扰了一整天,差点要放弃了,改用别的方案,终于在今日喜见云开。。。因为在TextInputLayout setError方法源码中有 // Set the EditText's background tint to the error color mErrorShown = true; updateEditText... * 内部类实现TextWatcher private class MyTextWatcher implements TextWatcher{ private EditText editText; private TextInputLayout textInputLayout; private MyTextWatc
工作中,有时候需要修改TextInputLayout提示信息文字颜色,怎么办呢?谷歌把Design Support Library写的很好。每一个控件的颜色都是直接通过主题颜色绘制的,在 style.xml 中指定。打开它添加colorAccent 到主题以改变表单的颜色。 <style name="AppTheme" parent="Them...
使用TextInputLayout中的setError功能时,不只会出现错误提示,而且会将EditText背景渲染成提示文字的颜色,而一般又不需要这种样式,查看源码发现主要是因为调用了updateEditTextBackground()方法,只好重写了一些方法将颜色重置.public class NewTextInputLayout extends TextInputLayout {
TextInputLayout是一个能够把EditText包裹在当中的一个布局,当输入文字时,它可以把Hint文字飘到EditText的上方。 引用design版本号不同导致使用方式不同 我们可以使用22版本的compile ‘com.android.support:design:22.2.0’,但是这个版本你不能直接在布局文件中加入默认显示hint。 <android.support
public void afterTextChanged(Editable s) { if (textInputLayout.getEditText().getText().toString().length() != length) { textInputLayout.setError(errorInfo);
Android TextInputLayout是一个支持Material Design风格的输入框容器,它可以用来包装任何EditTextEditText的子类,提供了一些功能,如错误提示、计数器、密码可见性切换等。 TextInputLayout的主要功能有: 1.错误提示:当用户输入无效数据时,可以显示错误消息。 2.计数器:可以显示已输入字符的数量和最大字符数量。 3.密码可见性切换:可以在明文和密码模式之间切换。 4.动画效果:包含了一些动画效果,如标签浮动和错误消息上移等。 使用TextInputLayout,需要在XML中将EditText包装在TextInputLayout中,并在TextInputLayout设置相关属性。例如: <com.google.android.material.textfield.TextInputLayout android:id="@+id/textInputLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter your name"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content"/> </com.google.android.material.textfield.TextInputLayout> 在代码中,可以使用以下方法来设置错误消息、计数器等: // 设置错误消息 textInputLayout.setError("Invalid input"); // 显示计数器 textInputLayout.setCounterEnabled(true); textInputLayout.setCounterMaxLength(50); // 密码可见性切换 textInputLayout.setEndIconMode(TextInputLayout.END_ICON_PASSWORD_TOGGLE); 总之,TextInputLayout是一个非常有用的控件,可以提高Android应用程序的用户体验。
AS 3.3 The given artifact contains a string literal with a package reference 'android.support.v4.con 16386 Android Studio fatal: could not read Username for ‘https://github.com‘: No such file or directory weixin_41813066: 正解,我就是命令可以as不行,这个勾选上就可以了 Android Studio fatal: could not read Username for ‘https://github.com‘: No such file or directory zhangjin1120: 解决了我“update project”时,报错的问题。 Android Studio fatal: could not read Username for ‘https://github.com‘: No such file or directory yanjinjun: 命令push没问题,as就不行!害的我装了卸2次 Android Studio fatal: could not read Username for ‘https://github.com‘: No such file or directory Android Studio / IDEA 编辑器显示代码路径目录层级 国产操作系统汇总