TextInputLayout Crashing in Android Lollipop and Above

人盡茶涼 提交于 2020-01-03 18:54:07

问题


I am using TextInputLayout in one of my app layouts. My app is crashing on user's devices with Lollipop(5.1) version and above. Below is the error

android.view.InflateException: Binary XML file line #34: Binary XML file line #2: Error inflating class android.support.design.widget.TextInputLayout arrow_drop_down
Caused by android.view.InflateException: Binary XML file line #34: Binary XML file line #2: Error inflating class android.support.design.widget.TextInputLayout arrow_drop_down
Caused by android.view.InflateException: Binary XML file line #2: Error inflating class android.support.design.widget.TextInputLayout arrow_drop_down
Caused by java.lang.reflect.InvocationTargetException: arrow_drop_down
Caused by android.content.res.Resources$NotFoundException: File res/drawable-v21/design_password_eye.xml from drawable resource ID #0x7f0200b1 arrow_drop_down
Caused by android.content.res.Resources$NotFoundException: File res/drawable-v21/avd_show_password.xml from drawable resource ID #0x7f02005c arrow_drop_down
Caused by android.content.res.Resources$NotFoundException: File res/drawable-v21/avd_show_password_1.xml from drawable resource ID #0x7f0201bd arrow_drop_down
Caused by org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag x

I have tried all solutions at StackOverflow but they are not working. This include updating my libraries, using android:theme="@style/Theme.AppCompat" but my the app is still crashing.

TextInputLayout

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TextInputLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:theme="@style/Theme.AppCompat"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/edittext_bg"
    android:id="@+id/passwordInput"
    app:hintTextAppearance="@style/UI.Text.HintText"
    app:errorTextAppearance="@style/UI.Text.ErrorText"
    android:textColorHint="@color/inputLabelColor"
    app:passwordToggleEnabled="true"
    app:passwordToggleTint="#000000">

    <EditText
        android:textSize="18sp"
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="3dp"
        android:textColorHint="@color/inputLabelColor"
        android:textColor="@android:color/black"
        android:hint="@string/password_hint"
        android:inputType="textPassword"
        android:background="@drawable/apptheme_edit_text_holo_light"
        />
</android.support.design.widget.TextInputLayout>

build.gradle

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    testOptions {
        unitTests.all {
            testLogging {
                exceptionFormat = 'full'
            }
        }
    }
    productFlavors {
    }
}

dependencies {
    compile 'com.android.support:design:25.1.0'
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.google.android.gms:play-services-auth:9.6.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha6'
}

Kindly help me get rid of this bug. I feel like crying. :(

UPDATE

This files can be found in generated folder. e.g for design_password_eye.xml it can be found at /app/build/intermediates/exploded-aar/com.android.support/design/25.1.0/res/drawable-v21/design_password_eye.xml

I don't know why then it's declared missing and crashing my app

UPDATE 2

manifest(app)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.r.p">

    <uses-sdk tools:overrideLibrary="com.base.ui.auth" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <uses-permission android:name="android.permission.CAMERA" />
    <!-- To access Google+ APIs: -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--
        The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
        Google Maps Android API v2, but you must specify either coarse or fine
        location permissions for the 'MyLocation' functionality.
    -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- EXTERNAL_STORAGE permissions are optional for Android 6.0 onwards. -->
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="22" />
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="22" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <permission
        android:name="com.example.gcm.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
    <application
        android:name=".activities.AppApplication"
        android:allowBackup="true"
        android:hardwareAccelerated="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:screenOrientation="portrait"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:theme">

// Activities here
        </application>

</manifest>

Manifest for module auth(com.base.ui.auth)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.base.ui.auth">

    <application>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

//activities here
 </application>

    </manifest>

Styles

app module

    <resources>
        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/md_blue_900</item>
            <item name="colorAccent">@color/dialog_color</item>
            <!--
            This overrides the default dark or light dialog background color.
            Note that if you use a dark color here, you should set md_dark_theme to
            true so text and selectors look visible
        -->
            <item name="md_background_color">@android:color/transparent</item>
            <!--To change the background of options menu-->
            <item name="android:itemBackground">@color/app_actionBar</item>
            <!--To change the text styling of options menu items</item>-->
            <item name="android:itemTextAppearance">@style/itemStyle</item>
            <item name="android:listPopupWindowStyle">@style/MyListPopupWindowStyle</item>
            <item name="android:actionModeBackground">@color/app_actionBar</item>
            <item name="android:actionModeCloseDrawable">@drawable/ic_action_close</item>
        </style>
 <style name="Toolbar" parent="Base.ThemeOverlay.AppCompat.ActionBar">
        <item name="android:textColorPrimary">@color/md_white_1000</item>
        <!--<item name="android:background">@color/dark_blue</item>-->
    </style>

    <style name="Toolbar_Popup" parent="Base.ThemeOverlay.AppCompat.ActionBar">
        <item name="android:textColorPrimary">@color/md_black_1000</item>
        <item name="android:background">@color/md_white_1000</item>
    </style>

    <style name="MyListPopupWindowStyle" parent="@android:style/Widget.Holo.Light.ListPopupWindow">
        <item name="android:popupBackground">@color/app_actionBar</item>
        <item name="android:textColor">@color/md_black_1000</item>
    </style>

    <style name="AppTheme.NoActionBar.PR" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@color/md_white_1000</item>
        <item name="colorAccent">@color/md_blue_900</item>
    </style>

    <style name="AppTheme.NoActionBar.PC" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@color/md_white_1000</item>
        <item name="colorAccent">@color/md_blue_900</item>
    </style>

    <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>
            <item name="windowActionModeOverlay">true</item>
            <item name="android:actionModeBackground">@color/app_actionBar</item>
            <item name="itemTextAppearance">@style/MyActionBar.MenuTextStyle</item>
        </style

>

values-21

<resources>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:itemTextAppearance">@style/MyActionBar.MenuTextStyle</item>
        <!--To change the background of options menu-->
        <item name="android:itemBackground">@color/md_white_1000</item>
    </style>
</resources>

styles for module auth

<style name="SplashTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@color/app_background</item>
        <item name="colorPrimary">@color/authui_colorPrimary</item>
        <item name="colorPrimaryDark">@color/authui_colorPrimaryDark</item>
        <item name="colorAccent">@color/authui_colorAccent</item>
        <item name="colorButtonNormal">@color/authui_colorPrimary</item>

        <item name="android:buttonStyle">@style/UI.Button</item>
        <item name="android:editTextStyle">@style/UI.EditText</item>
    </style>

<style name="UI.EditText">
        <item name="android:textSize">16sp</item>
        <item name="android:lineSpacingExtra">8sp</item>
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:fontFamily">sans-serif</item>
        <item name="android:colorActivatedHighlight">@color/authui_colorPrimary</item>
        <item name="android:colorFocusedHighlight">@color/authui_colorPrimary</item>
    </style>

回答1:


Update your Gradle Plugin to 2.3.0 if you are on Android Studio 2.3:

classpath 'com.android.tools.build:gradle:2.3.0'

If you are on Android Studio 2.2 update to 2.2.3

classpath 'com.android.tools.build:gradle:2.2.3'

Also, update your libs references to 25.2.0

https://developer.android.com/studio/releases/gradle-plugin.html




回答2:


It seems that TextInputLayout try to look up the resources like design_password_eye.xml only while using the default password-toggle Drawable.

So, we can avoid Resources$NotFoundException by setting app:passwordToggleDrawable="@null"

    <android.support.design.widget.TextInputLayout
        android:id="@+id/text_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:passwordToggleDrawable="@null"
        app:errorEnabled="true">


来源:https://stackoverflow.com/questions/42789175/textinputlayout-crashing-in-android-lollipop-and-above

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!