Ответ 1
Убедитесь, что стиль темы приложения унаследован от Theme.MaterialComponents
Пример:
<style name="XXXXXAppTheme" parent="@style/Theme.MaterialComponents.Light.DarkActionBar">
Я пытаюсь использовать кодовую метку MDC на codelabs.developers.google.com с последними версиями библиотеки. EditText - android.support.design.widget.TextInputEditText
кажется, работает должным образом, однако при использовании android.support.design.button.MaterialButton создается исключение InflateException во время выполнения.
compileSdkVersion 28
minSdkVersion 21
targetSdkVersion 28
dependencies {
def lifecycle_version = "1.1.1"
def nav_version = "1.0.0-alpha05"
def work_version = "1.0.0-alpha06"
def supportLibraryVersion = "28.0.0-rc01"
implementation fileTree(include: ['*.jar'], dir: 'libs')
api "android.arch.lifecycle:extensions:$lifecycle_version"
api "android.arch.lifecycle:common-java8:$lifecycle_version"
api "android.arch.navigation:navigation-fragment:$nav_version"
api "android.arch.navigation:navigation-ui:$nav_version"
api "android.arch.work:work-runtime:$work_version"
api ("com.android.support:appcompat-v7:$supportLibraryVersion", {
exclude group: 'com.android.support', module: 'support-media-compat'
})
api ("com.android.support:design:$supportLibraryVersion", {
exclude group: 'com.android.support', module: 'support-media-compat'
})
api ("com.android.support:cardview-v7:$supportLibraryVersion", {
exclude group: 'com.android.support', module: 'support-media-compat'
})
api ("com.android.support:customtabs:$supportLibraryVersion", {
exclude group: 'com.android.support', module: 'support-media-compat'
})
...
E/XXXXXXApp: Unhandled Exception - Application Crash
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.XXXXXX/com.XXXXXX.activities.XXXXXXActivity}: android.view.InflateException: Binary XML file line #84: Binary XML file line #84: Error inflating class android.support.design.button.MaterialButton
at com.XXXXXXActivity.onCreate(LoginActivity.java:107)
...
Caused by: java.lang.IllegalArgumentException: This component requires that you specify a valid TextAppearance attribute. Update your app theme to inherit from Theme.MaterialComponents (or a descendant).
at android.support.design.internal.ThemeEnforcement.checkTextAppearance(ThemeEnforcement.java:170)
at android.support.design.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.java:75)
at android.support.design.button.MaterialButton.<init>(MaterialButton.java:140)
at android.support.design.button.MaterialButton.<init>(MaterialButton.java:133)
РЕДАКТИРОВАТЬ: добавил больше деталей в stacktrace и выяснил, что проблема была в том, что тема приложения должна быть унаследована от Theme.MaterialComponents.
Убедитесь, что стиль темы приложения унаследован от Theme.MaterialComponents
Пример:
<style name="XXXXXAppTheme" parent="@style/Theme.MaterialComponents.Light.DarkActionBar">
Если вы не можете (пока) изменить тему для всего приложения, вы также можете сделать это только для this
вида:
<com.google.android.material.button.MaterialButton
android:id="@+id/fooButon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:fontFamily="sans-serif"
android:padding="8dp"
==> android:theme="@style/Theme.MaterialComponents.Light"
app:backgroundTint="@color/base_white" />
Помимо добавления Theme.MaterialComponents
1) вы также можете добавить Theme.MaterialComponents.Bridge, если хотите получать только атрибуты, а не стили по умолчанию
2) Добавьте библиотеки androidx и com.google.android.material вместо смены тем.
Более подробную информацию можно найти (5) Компоненты материального дизайна (Android Dev Summit '18) - YouTube в 3:25 мин.
Ошибка также может возникать при использовании любых версий Материальных компонентов, начиная с 1.0.0 и выше, вызванных конфликтом имен тем из-за тем, указанных во внешних библиотеках, таких как Mobile FFmpeg. В этом случае вам нужно изменить название своей темы. Для получения дополнительной информации я объясню это более подробно в ответе на подобный вопрос: fooobar.com/info/15855550/...
В основном, если вы столкнулись с этой проблемой, но знаете, что вы правильно используете тему MaterialComponents, выполните поиск в Android Studio для вашей темы приложения, используя "Найти в пути" → "Область" → "Все места". Например, после создания и запуска приложения, если имя вашей темы - AppTheme
, найдите "AppTheme"
, включая кавычки, чтобы увидеть, существует ли кэшированный файл XML, в котором указано точно такое же имя.