如图所见的红色背景问题,困扰了一整天,差点要放弃了,改用别的方案,终于在今日喜见云开。。。
因为在TextInputLayout setError方法源码中有
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(
ContextCompat.getColor(idtt2.getEditText().getContext(), R.color.editItemLittleGray),
PorterDuff.Mode.DST_IN