Ошибка 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">
Ответы
Ответ 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
Но это не дало мне достаточно информации для работы. Так было до тех пор, пока я не посмотрел на другие ошибки в редакторе макетов. Под проблемой рендера я обнаружил, что
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>