应用程序在样式下更改主题时崩溃

Posted

技术标签:

【中文标题】应用程序在样式下更改主题时崩溃【英文标题】:App crashes on changing theme under styles 【发布时间】:2015-08-21 23:13:40 【问题描述】:

我的 Android 应用:

目标 API:22

最小 API15

设备在:API 级别 22

上运行

我不明白整个主题概念,

在我的manifest.xml中,我设置了android:theme="@style/AppTheme"

所有活动都使用这个主题

现在我的理解是,他们都使用名为 AppTheme 的主题,我现在可以通过在 styles.xml 中扩展其他主题来定义它

在我的styles.xml

我有这个

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

</resources>

我的理解是AppCompat 主题允许我们在旧设备上使用更新的(比如材料主题)。 我在 API Level 22 和 API Level 15 上运行这个应用程序,它运行良好

现在当我把它改成

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Material">
        <!-- Customize your theme here. -->
    </style>

</resources>

它发出警告说这个主题只能在 API 21 或更高版本上使用,这是正确的,现在当我忽略警告并在 API 22 上运行它时它会崩溃。 为什么?

我还尝试将 AppTheme 的父级设置为 Holo、Light 等,它们都使 App 崩溃,为什么,请解释一下?

所有这些最终都会导致应用程序崩溃

<style name="AppTheme" parent="android:Theme.Translucent">
   <style name="AppTheme" parent="android:Theme.Holo">

为什么这些都不行,Holo 是在 15 年推出的吧?

我正在使用 22 ,

您能否详细说明两者之间的区别 主题......,BaseTheme......,Android......主题名称

我正在运行 android studio 1.3 并使用最新版本(稳定版)的 SDK、SDK 构建和 SDK-Platform 工具。 谢谢!

【问题讨论】:

【参考方案1】:

抱歉,我发现了问题,我的活动是扩展 AppCompatActivity 而不是一般活动,我现在明白了

【讨论】:

那是什么意思?? @Pugazh 我在 android studio 4 中也遇到了这个问题。从 class MainActivity : AppCompatActivity() 更改为 class MainActivity : Activity() 为我解决了这个错误。 @Guus,感谢分享解决方案【参考方案2】:

在使用自定义样式时,您必须照顾您提供的父级。尝试更改父主题,它可能会解决您的问题。

【讨论】:

以上是关于应用程序在样式下更改主题时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

3.1 活动应用样式与主题

颤动谷歌地图在运行时更新地图样式

JavaFX CSS 在运行时更改自定义样式类的属性

更改 CalendarView 样式

无法更改样式化组件主题提供程序

使用不同的 CSS 样式表动态更改 Angular 组件的样式