Подтвердить что ты не робот

Ошибка Android TextInputField Inflator

При сбое при попытке использовать новый TextInputField для Android и хотел поделиться моим решением.

Попытка нового TextInputField в андроидной appcompat-библиотеке разбивала мое приложение. Вот мой макет xml.

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="e-mail"
        android:inputType="textEmailAddress"
        android:singleLine="true"/>

</android.support.design.widget.TextInputLayout>

Ошибка, которую я получил:

android.view.InflateException: Binary XML file line #20: Error inflating class android.support.design.widget.TextInputLayout.

РЕШЕНИЕ: Добавьте атрибут hintTextAppearance к вашему TextInputLayout, поэтому ведущий тег выглядит следующим образом:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:hintTextAppearance="@android:style/TextAppearance.Medium">
4b9b3361

Ответ 1

Убедитесь, что у вас есть следующие зависимости в файле gradle:

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'

Рабочий пример:

<android.support.design.widget.TextInputLayout
    android:id="@+id/txtEmail_InpLyt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:id="@+id/txtEmail"
        android:hint="Email Address"
        android:singleLine="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>
</android.support.design.widget.TextInputLayout>

(Настройка hintTextAppearance не требуется.)

Update:

Если у вас возникли проблемы с текстом подсказки, не появляющимся в новых версиях Android (Marshmallow/Nougat), обновите библиотеку до версии 22.2.1 (см. TextInputLayout, не отображая подсказки EditText перед пользователем сосредоточиться на нем).

compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.1'

Ответ 2

Это случилось со мной, и я придумал решение, которое не требует изменения темы приложения, а просто изменение темы TextInputLayout:

<android.support.design.widget.TextInputLayout
    android:id="@+id/testingInputLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/Theme.AppCompat">

   <EditText
       android:id="@+id/testingEditText"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:hint="@string/testText"
       android:inputType="textEmailAddress" />

</android.support.design.widget.TextInputLayout>

Вам нужно будет добавить библиотеку appCompat, если вы еще этого не сделали:

compile 'com.android.support:appcompat-v7:23.0.1'

Ответ 3

У меня возникла такая же проблема при раздувании XML, содержащего TextInputLayout. Проблема была исправлена ​​установкой правильного стиля в моем приложении. Так же, как он говорит здесь: библиотека поддержки дизайна Android

У меня есть следующая проблема

Caused by: android.view.InflateException: Binary XML file line #38: Error inflating class android.support.design.widget.TextInputLayout

Мой стиль .xml был

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!-- Customize your theme here. -->
    </style>
</resources>

Как сказано в этот пост в Библиотеке поддержки дизайна

Обратите внимание, что поскольку библиотека Design зависит от библиотек поддержки поддержки v4 и AppCompat, они автоматически включаются при добавлении зависимостей библиотеки Design.

НЕТ НУЖНО ДОБАВИТЬ следующую строку внутри файла gradle

compile 'com.android.support:appcompat-v7:22.2.0'

Я нашел ссылку, объясняющую, что библиотека поддержки дизайна является частью AppCompat, и для ее работы требуется база приложений AppCompat. Так Я изменяю свой стиль .xml, чтобы быть

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>
</resources>

И это сработало.

Ответ 4

просто чтобы быть понятным, начиная с Android Studio 3.*, это теперь изменено на

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'

(если при добавлении он станет красным, примите версию, которую Android Studio хочет предложить)

это должно быть внутри

 dependencies {}

раздел build.gradle (Module:app), так это выглядит так

dependencies {
    ...
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:design:27.1.1'
}

затем нажмите sync now

Ответ 5

у меня в adroidx это сработало у меня есть библиотеки

 implementation 'com.android.support:appcompat-v7:28.0.0'
    //design widget
    implementation 'com.android.support:design:28.0.0'

я меняю

<android.support.design.widget.TextInputLayout

для

<com.google.android.material.textfield.TextInputLayout

Ответ 6

Используйте следующее:

View view = LayoutInflator.from(getActivity()).inflate(R.layout.your_layout_file,parent,false);

Ответ 7

Убедитесь, что LayoutInflater создан из AppCompatActivity

ех.

вместо

inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

использовать:

inflater = LayoutInflater.from(<appCompatActivity>);

Ответ 8

Ни одно из решений не помогло мне. я использую

compile 'com.android.support:appcompat-v7:28.0.0'
compile 'com.android.support:design:28.0.0'

Перепробовал весь солутон. Мое приложение отлично работает на устройствах с более низким SDK. Но вылетает на более новых (больше, чем SDK 26) устройствах. Но почесав голову за 2 дня наконец-то получил решение.

мой редактор макетов показал ошибку

The following classes could not be instantiated: - android.support.design.widget.TextInputLayout

enter image description here Но это не дало мне достаточно информации для работы. Так было до тех пор, пока я не посмотрел на другие ошибки в редакторе макетов. Под проблемой рендера я обнаружил, что

Couldn't resolve resource @string/path_password_strike_through

enter image description here

Я наконец получил решение после исследования этой проблемы рендеринга. Все, что вам нужно сделать, это добавить

app:passwordToggleDrawable="@string/string_name"

в вашем XML файле TextInputLayout.

                <android.support.design.widget.TextInputLayout
                    android:id="@+id/login_input_layout_password"
                    android:layout_width="match_parent"
                    app:passwordToggleDrawable="@drawable/ic_lock_outline_grey600_24dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="30dp"
                    android:layout_marginRight="30dp"
                    android:layout_marginTop="10dp"
                    android:backgroundTint="@color/colorAccent"
                    app:boxStrokeColor="#555"
                    android:textColorHint="@color/colorPrimary">

                    <EditText
                        android:id="@+id/login_input_password"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        />

                </android.support.design.widget.TextInputLayout>

Ответ 9

Возможно, вы добавили его compile 'com.android.support:appcompat-v7:22.2.0', но вам нужно добавить compile 'com.android.support:design:22.2.0'

вы можете попробовать эти зависимости:

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'

в вашем файле gradle.

Ответ 10

У меня была такая же проблема с Android Studio 3.0.1

Все что вам нужно добавить следующую строку в gradle.properties(Project Propeties):

android.enableAapt2 = ложь

Ответ 11

для меня работа меняется с EditText на TextInputEditText

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/date_raffle"/>

</android.support.design.widget.TextInputLayout>