Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
321 views
in Technique[技术] by (71.8m points)

android - TextInputLayout/TextInputEditText is causing exception after hint color replacement

I'm using TextInputEditText inside TextInputLayout and it worked perfectly since today. I just changed attribute for color and it caused this error:

android.view.InflateException: Binary XML file line #97: Binary XML file line #8: Error inflating class com.google.android.material.textfield.TextInputLayout
    Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class com.google.android.material.textfield.TextInputLayout
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:647)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:965)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:859)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126)
        at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:95)
        at com.project.utils.CustomResources$Companion.inflateLayout(CustomResources.kt:62)
        at com.project.screens.Registration.getScreen(RegistrationScreen.kt:34)
        at com.project.registration.CustomViewPagerAdapter.instantiateItem(CustomViewPagerAdapter.kt:40)
        at com.project.registration.CustomViewPagerAdapter.instantiateItem(CustomViewPagerAdapter.kt:25)
        at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1224)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:23180)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
        at android.view.View.measure(View.java:23180)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6764)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
        at android.view.View.measure(View.java:23180)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6764)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
        at android.view.View.measure(View.java:23180)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6764)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:23180)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6764)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:23180)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6764)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:716)
        at android.view.View.measure(View.java:23180)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2734)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1583)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1867)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1471)
2021-01-12 12:26:03.681 21736-21736/? E/AndroidRuntime:     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7215)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1012)
        at android.view.Choreographer.doCallbacks(Choreographer.java:823)
        at android.view.Choreographer.doFrame(Choreographer.java:758)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:998)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6735)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 1: TypedValue{t=0x2/d=0x7f030375 a=5}
        at android.content.res.TypedArray.getColorStateList(TypedArray.java:546)
        at androidx.appcompat.widget.TintTypedArray.getColorStateList(TintTypedArray.java:184)
        at com.google.android.material.textfield.TextInputLayout.<init>(TextInputLayout.java:561)
        at com.google.android.material.textfield.TextInputLayout.<init>(TextInputLayout.java:420)
            ... 64 more

I'm using custom attributes for my App style, so I added new attribute and just created same selector for that attribute but with different color.

attrs.xml

<attr name="textInputFieldHint" format="reference"/>

styles.xml

<style name="AppThemeBlueColor" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
    ...
    <item name="textInputFieldHint">@color/textinputfield_hint_blue</item>
</style>

textinputfield_hint_blue.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/darkBlue" android:state_focused="true"/>
    <item android:color="@color/darkGrey"/>
</selector>

TextInputEditTextStyles:

<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    <item name="android:textColor">@color/form_edit_text_color</item>
    <item name="android:textColorHint">?attr/textInputFieldHint</item>
    <item name="hintTextColor">?attr/textInputFieldHint</item>
    <item name="boxStrokeColor">?attr/textInputFieldOutline</item>
    <item name="errorTextColor">@color/colorRed</item>
    <item name="android:textSize">@dimen/text_normal</item>
    <item name="android:layout_marginBottom">@dimen/textInputLayout_margin_bottom</item>
</style>

<style name="TextInputEditTextStyle">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">@color/form_edit_text_color</item>
    <item name="android:textColorHint">?attr/textInputFieldHint</item>
    <item name="boxStrokeColor">?attr/textColorTertiary</item>
    <item name="errorTextColor">@color/colorRed</item>
    <item name="android:textSize">@dimen/text_normal</item>
    <item name="android:paddingStart">@dimen/textInputEditText_padding_start</item>
    <item name="android:singleLine">true</item>
    <item name="android:focusable">true</item>
    <item name="android:focusableInTouchMode">true</item>
    <item name="android:textCursorDrawable">@null</item>
</style>

I just replaced textInputFieldOutline attribute with textInputFieldHint attribute. Both are same selectors but different color. And color does exist because its used in other layout components. Seems like some Android bug because it does not have any reason to not work when its the exact same code but different color.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...