ThemeEnforcement错误实际上是由未设置的attrs引起的
ThemeEnforcement error actually caused by unset attrs
我收到以下 ThemeEnforcement 错误。警告。
Caused by: android.view.InflateException: Binary XML file line #9 in com.yourproject:layout/app_bar_main: Error inflating class com.google.android.material.appbar.AppBarLayout
Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
典型的解决方案表明我没有将 Theme.AppCompat 应用于我的应用程序主题。除了我是
<style name="Theme.TestApp" parent="Theme.AppCompat">
</style>
此外,其他解决方案表明这是由于未包含适当的 material 库造成的,这些库已包含在内并且我之前能够成功编译和 运行 项目。
项目编译没有错误,但在某些情况下,应用程序会立即崩溃,但在其他情况下(我禁用了某些组件),当布局其他视图时会发生崩溃。
在后面的崩溃中,错误可能会导致标准 Button 或 TextField 膨胀。
TLDR 未设置布局中使用的自定义属性值会导致此错误。
部分问题是错误消息明确指出问题是我没有应用 Theme.AppCompat
,但实际上我是。
但是我不知道的是 nav_header_main.xml
文件正在将样式 AppMenuTitle
应用到 Textfield
.
此样式正在消耗名为 my.custom.attr
的 custom attribute
。该问题是由 this attr's value had not be set in the theme
这一事实引起的。所以它基本上是空的。
<style name="AppMenuTitle" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:textColor">?my.custom.attr</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">18sp</item>
</style>
现在因为这些 attr 值被用在很多地方,我也遇到了膨胀你的标准的错误 Button
。这真的很令人困惑,因为按钮只是竖直向上的按钮,没有直接应用样式。
相反,从应用于父容器的主题中获取样式的按钮,父容器的样式设置了 buttonStyle 属性。
这些按钮使用自定义 drawables
。猜猜看,还在使用自定义属性值,猜猜看....主题中也没有设置。
确保这些自定义属性具有值,解决了错误。
<style name="Theme.TestApp" parent="Theme.AppCompat">
<item name="my.custom.attr.used.in.textstyle">@color/black</item>
<item name="my.custom.attr.used.in.drawable">@color/black</item>
</style>
我收到以下 ThemeEnforcement 错误。警告。
Caused by: android.view.InflateException: Binary XML file line #9 in com.yourproject:layout/app_bar_main: Error inflating class com.google.android.material.appbar.AppBarLayout
Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
典型的解决方案表明我没有将 Theme.AppCompat 应用于我的应用程序主题。除了我是
<style name="Theme.TestApp" parent="Theme.AppCompat">
</style>
此外,其他解决方案表明这是由于未包含适当的 material 库造成的,这些库已包含在内并且我之前能够成功编译和 运行 项目。
项目编译没有错误,但在某些情况下,应用程序会立即崩溃,但在其他情况下(我禁用了某些组件),当布局其他视图时会发生崩溃。
在后面的崩溃中,错误可能会导致标准 Button 或 TextField 膨胀。
TLDR 未设置布局中使用的自定义属性值会导致此错误。
部分问题是错误消息明确指出问题是我没有应用 Theme.AppCompat
,但实际上我是。
但是我不知道的是 nav_header_main.xml
文件正在将样式 AppMenuTitle
应用到 Textfield
.
此样式正在消耗名为 my.custom.attr
的 custom attribute
。该问题是由 this attr's value had not be set in the theme
这一事实引起的。所以它基本上是空的。
<style name="AppMenuTitle" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:textColor">?my.custom.attr</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">18sp</item>
</style>
现在因为这些 attr 值被用在很多地方,我也遇到了膨胀你的标准的错误 Button
。这真的很令人困惑,因为按钮只是竖直向上的按钮,没有直接应用样式。
相反,从应用于父容器的主题中获取样式的按钮,父容器的样式设置了 buttonStyle 属性。
这些按钮使用自定义 drawables
。猜猜看,还在使用自定义属性值,猜猜看....主题中也没有设置。
确保这些自定义属性具有值,解决了错误。
<style name="Theme.TestApp" parent="Theme.AppCompat">
<item name="my.custom.attr.used.in.textstyle">@color/black</item>
<item name="my.custom.attr.used.in.drawable">@color/black</item>
</style>