Сбой TextInputLayout в Android Lollipop и выше

Я использую TextInputLayout в одном из моих макетов приложений. Мое приложение дает сбой на пользовательских устройствах с версией Lollipop (5.1) и выше. Ниже ошибка

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

Я испробовал все решения на StackOverflow, но они не работают. Это включает в себя обновление моих библиотек с помощью android:theme="@style/Theme.AppCompat", но мое приложение по-прежнему дает сбой.

Макет ввода текста

<?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'
}

Пожалуйста, помогите мне избавиться от этой ошибки. Мне хочется плакать. :(

ОБНОВЛЕНИЕ

Эти файлы можно найти в сгенерированной папке. например, для design_password_eye.xml его можно найти по адресу /app/build/intermediates/exploded-aar/com.android.support/design/25.1.0/res/drawable-v21/design_password_eye.xml

Я не знаю, почему тогда он объявлен пропавшим без вести и приводит к сбою моего приложения.

ОБНОВЛЕНИЕ 2

манифест (приложение)

<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>

Манифест для аутентификации модуля (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>

Стили

модуль приложения

    <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

>

значения-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>

стили для аутентификации модуля

<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>

comment
Не касается вопроса, хотя зачем использовать бета-версию компоновки ограничений, когда есть стабильная версия?   -  person azizbekian    schedule 14.03.2017
comment
вам не хватает чего-то из вашего drawable-v21, убедитесь, что у вас есть тот же элемент в drawable-v21, что и у вас есть простой drawable   -  person Hamza    schedule 14.03.2017
comment
@AmeerHamza я использую TextInputLayout, в нем должно быть все, что нужно, не так ли? все необходимые чертежи. это не моя пользовательская библиотека, а андроид   -  person Edijae Crusar    schedule 14.03.2017
comment
@azizbekian я не думаю, что это может быть причиной моего конфликта приложений. проблема в этом TextInputLayout и мне это нужно   -  person Edijae Crusar    schedule 14.03.2017
comment
@gikarasojokinene, поэтому я и сказал, что вопрос меня не касается   -  person azizbekian    schedule 14.03.2017
comment
@azizbekian о, брат, пожалуйста. Ты имеешь в виду, что можешь оставить меня здесь?   -  person Edijae Crusar    schedule 14.03.2017
comment
попробуй поставить @style/Theme.AppCompat в свой TextInputLayout и убрать подсказки   -  person rafsanahmad007    schedule 14.03.2017
comment
@ rafsanahmad007 Я уже пытался использовать @style/Theme.AppCompat, но мое приложение по-прежнему конфликтовало. для подсказок, мне это нужно, так как именно здесь пользователи входят в систему, чтобы использовать мое приложение.   -  person Edijae Crusar    schedule 14.03.2017
comment
Вы можете опубликовать манифест .. и style.xml?   -  person rafsanahmad007    schedule 14.03.2017
comment
@ rafsanahmad007 не уходи, позвольте мне обновить свой вопрос и предоставить все эти подробности........   -  person Edijae Crusar    schedule 14.03.2017
comment
Я попробовал ваш код в примере проекта, он отлично работает на Android 7.0 без всех ссылок @style. Можете ли вы опубликовать свой файл styles.xml?   -  person ale.m    schedule 14.03.2017
comment
@ale.m делает это, сэр, не уходите, просто оставайтесь там   -  person Edijae Crusar    schedule 14.03.2017
comment
android:background=@drawable/edittext_bg убедитесь, что в вашем Simple Drawble есть edittext_bg.png   -  person Hamza    schedule 14.03.2017
comment
@ale.m обновил мой вопрос   -  person Edijae Crusar    schedule 14.03.2017
comment
Какую версию подключаемого модуля Gradle вы используете? также обновите ссылки на свои библиотеки как минимум до 25.2.5.   -  person ale.m    schedule 14.03.2017
comment
@rafsanahmad007 обновил мой вопрос   -  person Edijae Crusar    schedule 14.03.2017
comment
@ale.m classpath 'com.android.tools.build:gradle:2.1.0'   -  person Edijae Crusar    schedule 14.03.2017
comment
@AmeerHamza drawable/edittext_bg находится в папке drawable   -  person Edijae Crusar    schedule 14.03.2017


Ответы (2)


Обновите подключаемый модуль Gradle до версии 2.3.0, если вы используете Android Studio 2.3:

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

Если вы используете Android Studio 2.2, обновите до версии 2.2.3.

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

Кроме того, обновите ссылки на свои библиотеки на 25.2.0.

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

person ale.m    schedule 14.03.2017
comment
Знаете что, я реализовал ваш ответ и обновил свое приложение в магазине Google Play. и один из моих пользователей сказал мне, что это сработало. это не конфликтовало. - person Edijae Crusar; 16.03.2017
comment
Рад это слышать :) - person ale.m; 17.03.2017
comment
У меня была та же проблема: 5.1.1, сбой приложения (только в режиме выпуска, режим отладки не сбой), Error inflating class android.support.design.widget.TextInputLayout, Caused by: android.content.res.Resources$NotFoundException: File res/drawable-v21/design_password_eye.xml (хотя файл был в промежуточном состоянии), я смог воспроизвести его локально, поэтому я могу подтвердить обновление gradle, как было предложено, устранило проблему. Мне все еще интересно, @ale.m, в чем реальная проблема, поскольку заявлено, что Studio и плагин можно обновлять отдельно. Также мы собираем релизы без Studio. - person Alessio; 13.04.2017
comment
Привет! В библиотеке поддержки 25.1.0 была обнаружена ошибка в сочетании с функциональностью сжимаемых ресурсов плагина gradle (v2.2.2). - person ale.m; 17.04.2017
comment
Я реализовал ваш ответ. +1 - person Felix Gutierrez; 16.05.2017

Кажется, что TextInputLayout пытается искать ресурсы, такие как design_password_eye.xml, только при использовании Drawable для переключения пароля по умолчанию.

Таким образом, мы можем избежать Resources$NotFoundException, установив 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">
person YusukeIwaki    schedule 17.11.2017