使用TextInputLayout所遇到的坑-java.lang.UnsupportedOperationException: Failed to resolve attribute at index

相信我们小伙伴们都用过这个TextInputLayout这个控件,By source Code ,发现它是继承于LinearLayout,关于LinearLayout的东东在这里就不啰嗦啦.我们只关心TextInputLayout自身的属性:

TextInputLayout自身的属性


属性名 相关方法 描述
app:counterEnabled setCounterEnabled(boolean) 设置是否显示一个计数器,布尔值
app:counterMaxLength setCounterMaxLength(int) 设置计数器的最大计数数值,整型
app:errorEnabled setErrorEnabled(boolean) 设置是否显示一个错误信息,布尔值
app:hintAnimationEnabled setHintAnimationEnabled(boolean) 设置是否要显示输入状态时候的动画效果,布尔值
app:hintEnabled setHintEnabled(boolean) 设置是否要用这个浮动标签的功能,布尔值
app:hintTextAppearance setHintTextAppearance(int) 设置提示文字的样式(注意这里是运行了动画效果之后的样式)

然后当我们在使用TextInputLayout,而且添加了app:counterEnabled 和 app:counterMaxLength属性,里面嵌套着EditText,在代码中,我们给EditText在 addTextWatcher()里面的

onTextChanged()方法里,监听EditText的字符数。这时,当我们运行程序输入的字符串达到最大的counterMaxLength值时,程序就会crash,同时给出如下错误:


即:java.lang.UnsupportedOperationException: Failed to resolve attribute at index 3: TypedValue{t=0x2/d=0x7f01010b a=2}

此时此刻,你的感觉应该是:“农村路也滑,人心更复杂”。

废话不多说了,直接上解决方案:

在 你的value包的styles声明主题Theme部分,加入如下代码:

<item name="textColorError">@color/design_textinput_error_color_light</item>
或者

使你的theme 继承 Them.Design.*;

PS: 这个 textColorError 属性在这里定义是为了能在TextInputLayout的ErrorState下使用,你可以使用自己定义的color值,否则就会crash.

系统中有如下属性可供我们使用:

1.light themes下:

@color/design_textinput_error_color_light 

2.dark themes:

 @color/design_textinput_error_color_dark


注:这些color值AS不会自动提示,需要自己动手..


最后给个stackOverFlow的链接:

http://stackoverflow.com/questions/35767158/android-edittext-with-textinputlayout-crashing-when-reaching-limit-of-countermax

我为这样做感到可耻:我不解决问题,我只是解决方案的搬运工。

努力提高自己才是硬道理。






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值