android Lollipop下方的Material Design支持-崩溃

l2osamch  于 2023-05-12  发布在  Android
关注(0)|答案(4)|浏览(146)

我一直在尝试实现Material Design主题,遵循these instructions

  • 我没有使用ToolBar(必须使用吗?))
  • 我的所有活动都扩展了ActionBarActivity。
  • 在整个项目中使用getSupportActionBar()
  • 我在gradle中编译并定位到API 21(最小是API 15)。
  • 我的<application>标签包含android:theme="@style/AppTheme"
  • 在棒棒糖设备上运行应用程序(具有特定的v21类似主题)。

My 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()上启动主Activity的第二次崩溃,并显示以下崩溃日志:

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:“。还有别的吗?

sigwle7e

sigwle7e1#

已解决

我的两个jar库显然有生成的values.xml,其中包含AppThemeAppBaseTheme的样式。我只验证了我们的依赖模块,因为jar库不应该声明应用程序主题,特别是不应该使用默认主题的名称。
在发布答案之前,我添加到我的AndroidManifest.xml<application>tools:replace="android:theme"并声明了新的主题,假设它会工作,我的应用程序将覆盖任何其他主题。
最后的解决方案是,把我自己的AppThemeAppBaseTheme重命名为不同的名字,现在它工作了。几个小时都花在这么琐碎的事上。希望这能为其他人腾出一些时间。

dtcbnfnu

dtcbnfnu2#

parent应该是Theme.AppCompat而不是@style/Theme.AppCompat
使用@style/,您将使用Android API 21中的样式,并且它必须是AppCompat库中的样式。

编辑:

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

wxclj1h53#

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

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

j5fpnvbx4#

在我的例子中,我的themes.xml有以下内容:

style name="Theme.DollarBucket" parent="android:Theme.Material.Light.NoActionBar" />

由于一些奇怪的原因,有一个“Android:”标签,删除它解决了我的问题。

相关问题