我一直在按照以下说明尝试实现材料设计主题。
- 我没有使用
ToolBar
(必须使用吗?) - 我的所有活动扩展ActionBarActivity
- 在整个项目中使用
getSupportActionBar()
- 我正在编译和目标API 21年级(最低是API 15)
- 我的
<application>
标记包含android:theme="@style/AppTheme"
- 在棒棒糖设备上运行应用程序(具有特定的v21类似主题作品)
我的styles.xml:
<style name="AppBaseTheme" parent="@style/Theme.AppCompat">
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar.Solid">
<item name="displayOptions">useLogo|showHome</item>
<item name="logo">@drawable/home_page_logo</item>
<item name="background">@color/actionbar_background_color</item>
<item name="textColor">@color/white</item>
<item name="titleTextStyle">@style/MyActionBarTextStyle</item>
</style>
无论我尝试了什么,当我在onCreate()
上启动我的主要活动时,应用程序都会崩溃,崩溃日志如下:
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:151)
at android.support.v7.app.ActionBarActivityDelegateBase.onCreate(ActionBarActivityDelegateBase.java:138)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:123)
有人经历过这个问题吗?关于可能导致这种情况的原因,有什么建议吗?
编辑:这肯定是我的styles.xml主题中的内容。如果我强制应用程序使用默认的Theme.AppCompat主题,它就可以工作了。什么可能导致主题失败?我验证了ActionBar属性没有使用"android:"。还有别的吗?
已解决
我的两个jar库显然有生成的values.xml
,其中包含AppTheme
和AppBaseTheme
的样式。我只验证了我们的依赖模块,因为jar库不应该声明应用程序主题,特别是不使用默认模块的名称。
在发布答案之前,我添加了我的AndroidManifest.xml
<application>
tools:replace="android:theme"
并声明了新主题,假设它可以工作,并且我的应用程序将覆盖任何其他主题。
解决方案最终,尽管很愚蠢,还是将我自己的AppTheme
和AppBaseTheme
重命名为不同的名称,现在它起作用了。花了几个小时在这样一个琐碎的修复上。希望这能为其他人腾出一些时间。
parent
应该是Theme.AppCompat
而不是@style/Theme.AppCompat
。
使用@style/
,您将使用Android API 21中的样式,并且它必须是AppCompat
库中的样式。
编辑:
Widget.AppCompat
可能也是如此
编辑2:
像这个
<style name="AppBaseTheme" parent="Theme.AppCompat">
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar.Solid">
<item name="displayOptions">useLogo|showHome</item>
<item name="logo">@drawable/home_page_logo</item>
<item name="background">@color/actionbar_background_color</item>
<item name="textColor">@color/white</item>
<item name="titleTextStyle">@style/MyActionBarTextStyle</item>
</style>
尝试从styles.xml的第一行中删除"@style/",这样您就有了:
<style name="AppBaseTheme" parent="Theme.AppCompat">
在我的例子中,我的themes.xml有以下内容:
style name="Theme.DollarBucket" parent="android:Theme.Material.Light.NoActionBar" />
出于某种奇怪的原因;android:";标签,删除它解决了我的问题。