Lollipop下面的材料设计支持 - 崩溃

时间:2015-02-17 20:45:06

标签: android android-theme android-appcompat material-design

我一直在尝试按照these instructions实现Material Design主题。

  • 我没有使用ToolBar(我必须吗?)
  • 我的所有活动都扩展了ActionBarActivity。
  • 在整个项目中使用getSupportActionBar()
  • 我正在gradle中编译和定位到API 21(最小化是API 15)。
  • 我的<application>标记包含android:theme="@style/AppTheme"
  • 在Lollipop设备上运行应用程序(具有特定的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属性没有使用&#34; android:&#34;。还要别的吗?

3 个答案:

答案 0 :(得分:7)

已解决......

我的jar库中有2个显然有生成 values.xml,其中包含AppThemeAppBaseTheme的样式。 我只验证了我们的依赖模块,因为jar库不应该声明应用程序主题,特别是不能使用默认名称。

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

解决方案最终,实际上是愚蠢的,是将我自己的AppThemeAppBaseTheme重命名为不同的名称,现在它可以运行了。 花在这样一个微不足道的修复上的时间。希望这会为其他人留出一些时间。

答案 1 :(得分:2)

parent应为Theme.AppCompat而不是@style/Theme.AppCompat

使用@style/您将使用Android API 21中的样式,它必须是AppCompat库中的样式。

修改

{p>可能与Widget.AppCompat

相同

<强> EDIT2:

像这样

<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>

答案 2 :(得分:0)

尝试从styles.xml的第一行删除“@ style /”,这样就可以了:

<style name="AppBaseTheme" parent="Theme.AppCompat">