棒棒糖以下的材料设计支持-崩溃



我一直在按照以下说明尝试实现材料设计主题。

  • 我没有使用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,其中包含AppThemeAppBaseTheme的样式。我只验证了我们的依赖模块,因为jar库不应该声明应用程序主题,特别是不使用默认模块的名称。

在发布答案之前,我添加了我的AndroidManifest.xml <application>tools:replace="android:theme"并声明了新主题,假设它可以工作,并且我的应用程序将覆盖任何其他主题。

解决方案最终,尽管很愚蠢,还是将我自己的AppThemeAppBaseTheme重命名为不同的名称,现在它起作用了。花了几个小时在这样一个琐碎的修复上。希望这能为其他人腾出一些时间。

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:";标签,删除它解决了我的问题。

最新更新