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

本文介绍如何解决使用TextInputLayout和EditText时遇到的应用崩溃问题。通过调整主题中的textColorError属性,可以有效避免当输入文本达到最大长度限制时出现的异常。

相信我们小伙伴们都用过这个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

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

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






2025-10-02 20:36:18.579 10061-10061 ResourcesCompat com.tplink.omada W Failed to inflate ColorStateList, leaving it to the framework java.lang.UnsupportedOperationException: Failed to resolve attribute at index 0: TypedValue{t=0x2/d=0x7f040131 a=-1}, theme={InheritanceMap=[id=0x7f140321com.tplink.omada:style/ThemeOverlay.APP.Red, id=0x7f14004acom.tplink.omada:style/AppTheme, id=0x7f14031dcom.tplink.omada:style/Theme.TPDesign.Default, id=0x7f1402decom.tplink.omada:style/Theme.Material3.DayNight.NoActionBar, id=0x7f1402eccom.tplink.omada:style/Theme.Material3.Light.NoActionBar, id=0x7f1402e6com.tplink.omada:style/Theme.Material3.Light, id=0x7f1400a3com.tplink.omada:style/Base.Theme.Material3.Light, id=0x7f1400f8com.tplink.omada:style/Base.V24.Theme.Material3.Light, id=0x7f1400d2com.tplink.omada:style/Base.V14.Theme.Material3.Light, id=0x7f14030bcom.tplink.omada:style/Theme.MaterialComponents.Light, id=0x7f1400b2com.tplink.omada:style/Base.Theme.MaterialComponents.Light, id=0x7f1400eccom.tplink.omada:style/Base.V21.Theme.MaterialComponents.Light, id=0x7f1400dacom.tplink.omada:style/Base.V14.Theme.MaterialComponents.Light, id=0x7f1400dbcom.tplink.omada:style/Base.V14.Theme.MaterialComponents.Light.Bridge, id=0x7f1401b3com.tplink.omada:style/Platform.MaterialComponents.Light, id=0x7f1402c2com.tplink.omada:style/Theme.AppCompat.Light, id=0x7f140096com.tplink.omada:style/Base.Theme.AppCompat.Light, id=0x7f1400fecom.tplink.omada:style/Base.V28.Theme.AppCompat.Light, id=0x7f1400fbcom.tplink.omada:style/Base.V26.Theme.AppCompat.Light, id=0x7f1400f5com.tplink.omada:style/Base.V23.Theme.AppCompat.Light, id=0x7f1400f3com.tplink.omada:style/Base.V22.Theme.AppCompat.Light, id=0x7f1400e8com.tplink.omada:style/Base.V21.Theme.AppCompat.Light, id=0x7f140101com.tplink.omada:style/Base.V7.Theme.AppCompat.Light, id=0x7f1401b0com.tplink.omada:style/Platform.AppCompat.Light, id=0x7f1401bbcom.tplink.omada:style/Platform.V25.AppCompat.Light, id=0x1030241android:style/Theme.Material.Light.NoActionBar, id=0x1030237android:style/Theme.Material.Light, id=0x103000candroid:style/Theme.Light, id=0x1030005android:style/Theme], Themes=[com.tplink.omada:style/ThemeOverlay.APP.Red, forced, com.tplink.omada:style/AppTheme, forced, com.tplink.omada:style/Theme.AppCompat.Empty, forced, android:style/Theme.DeviceDefault.Light.DarkActionBar, forced]} at android.content.res.TypedArray.getColor(TypedArray.java:594) at androidx.core.content.res.ColorStateListInflaterCompat.inflate(ColorStateListInflaterCompat.java:157) at androidx.core.content.res.ColorStateListInflaterCompat.createFromXmlInner(ColorStateListInflaterCompat.java:122) at androidx.core.content.res.ColorStateListInflaterCompat.createFromXml(ColorStateListInflaterCompat.java:102) at androidx.core.content.res.ResourcesCompat.inflateColorStateList(ResourcesCompat.java:259) at androidx.core.content.res.ResourcesCompat.getColorStateList(ResourcesCompat.java:234) at androidx.core.content.ContextCompat.getColorStateList(ContextCompat.java:516) at androidx.appcompat.content.res.AppCompatResources.getColorStateList(AppCompatResources.java:46) at androidx.appcompat.widget.TintTypedArray.getColorStateList(TintTypedArray.java:178) at androidx.appcompat.widget.AppCompatBackgroundHelper.loadFromAttributes(AppCompatBackgroundHelper.java:66) at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:86) at com.google.android.material.button.MaterialButton.<init>(MaterialButton.java:234) at com.tplink.design.button.TPButton.<init>(TPButton.kt:15) at com.tplink.design.button.TPButton.<init>(TPButton.kt:10) at com.tplink.design.button.TPButton.<init>(Unknown Source:13) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:972) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1124) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1079) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1241) 2025-10-02 20:36:18.608 10061-10061 ResourcesCompat com.tplink.omada W at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1202) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1244) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1202) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1244) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1202) at android.view.LayoutInflater.inflate(LayoutInflater.java:756) at android.view.LayoutInflater.inflate(LayoutInflater.java:592) at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126) at androidx.databinding.ViewDataBinding.inflateInternal(ViewDataBinding.java:1409) at com.tplink.omada.databinding.FragmentDeviceDetailBinding.inflate(FragmentDeviceDetailBinding.java:149) at com.tplink.omada.databinding.FragmentDeviceDetailBinding.inflate(FragmentDeviceDetailBinding.java:135) at com.tplink.omada.ecsp.ui.DeviceDetailFragment.onCreateView(DeviceDetailFragment.kt:33) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3119) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:577) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:286) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2214) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2115) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2052) at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:703) at android.os.Handler.handleCallback(Handler.java:996) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:302) at android.app.ActivityThread.main(ActivityThread.java:9702) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:601) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1062) 2025-10-02 20:36:18.681 10061-10061 ResourcesCompat com.tplink.omada W Failed to inflate ColorStateList, leaving it to the framework
10-03
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值