TextInputLayout Crashing in Android Lollipop and Above
L

2

6

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>
Liszt answered 14/3, 2017 at 14:48 Comment(18)
Not concerned to the question, though why using beta of constraint layout, when there is a stable version?Perl
you missing some thing from your drawable-v21 , make sure you have same item in drawable-v21 witch you have simple drawableAntenna
@AmeerHamza am using TextInputLayout,it should have everything it need isn't it? all the drawables it need. it's not my custom library but android'sLiszt
@Perl i don't think that can be the reason for my app clash. the problem is this TextInputLayout and I need itLiszt
@gikarasojokinene, that's why I said "not concerned to the question"Perl
@Perl ooh brother, please be. you mean you can leave me stacked here?Liszt
try to set @style/Theme.AppCompat in your TextInputLayout and remove the hintsMilliner
@Milliner I have already tried to use @style/Theme.AppCompat, but my app still clashed. for hints, i need it since this is where users sign in in order to use my app.Liszt
can u post the manifest.. and style.xml?Milliner
@Milliner don't go away, let me update my question and provide all those details.........Liszt
I Have tried your code in a sample project, it works just fine on Android 7.0 without all the @style references. Can you post your styles.xml ?Gregarine
@Gregarine doing so sir, don't go away, just stay thereLiszt
android:background="@drawable/edittext_bg" make sure you have in your Simple drawble edittext_bg.pngAntenna
@Gregarine updated my questionLiszt
Which Gradle plug-in version are you using? also, update your libs references to 25.2.5 at least.Gregarine
@Milliner updated my questionLiszt
@Gregarine classpath 'com.android.tools.build:gradle:2.1.0'Liszt
@AmeerHamza drawable/edittext_bg is in drawable folderLiszt
G
11

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

Gregarine answered 14/3, 2017 at 16:6 Comment(5)
You know what, I have implemented your answer and updated my app at Google play store. and one of my users have told me that it have worked. it didn't clash.Liszt
Nice to hear that :)Gregarine
I had the same problem: 5.1.1, app crashing (in release mode only, debug mode didn't crash), Error inflating class android.support.design.widget.TextInputLayout, Caused by: android.content.res.Resources$NotFoundException: File res/drawable-v21/design_password_eye.xml (though file was into intermediates), I was able to reproduce it locally, so I can confirm updating gradle as suggested fixed the problem. I still wonder @Gregarine what is the real issue, as it's stated Studio and the plugin can be updated separatedly. Also, we build releases without Studio.Purlieu
Hi! A bug was introduced in the support library 25.1.0 in combination with the shrinkResources functionality of the gradle plugin (v2.2.2).Gregarine
I have implemented your answer. +1Boaster
M
5

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">
Mcnair answered 17/11, 2017 at 2:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.