在Android Pie中同时支持浅色和深色主题

时间:2018-12-03 10:21:10

标签: android themes android-9.0-pie

Android Pie在“设置”->“显示”->“设备主题”菜单中添加了切换亮/暗主题的功能。

我希望我的应用根据设备设置中设置的“设备主题”应用正确的主题。

根据Styles and Themes Android指南,对于深色模式,应用程序应使用扩展了Theme.AppCompat的主题,对于浅色模式,应用程序应使用扩展了Theme.AppCompat.Light的主题。 / p>

所以我在应用程序中创建了两个主题:

<style name="AppTheme.Dark" parent="Theme.AppCompat">
  ...
</style>

<style name="AppTheme.Light" parent="Theme.AppCompat.Light">
  ...
</style>

但是在AndroidManifest.xml中,当我使用<application>标签声明应用程序时,我只能在android:theme属性中指定一个主题:

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher"
    android:supportsRtl="true"
    android:theme="@style/AppTheme.Light"
    tools:replace="android:name">

如何根据设备设置中设置的设备主题在AndroidManifest.xml中声明我的应用程序以动态选择@style/AppTheme.Light@style/AppTheme.Dark

2 个答案:

答案 0 :(得分:0)

如果要更改现有活动的主题,请在setTheme()之后调用recreate()。

注意:如果在onCreate()中更改主题,请勿调用recreate,以避免无限循环。

wp-config

答案 1 :(得分:0)

您可能想尝试Theme.AppCompat.DayNight而不是定义两个主题。在此视频Cost of a Pixel Color中的实现。

但是,当我在模拟器上进行测试时,切换设置->显示->设备主题菜单不起作用。我必须切换“开发人员选项”->“夜间模式”->“始终打开”并自动选择黑暗主题。

由于我没有Android Pie设备,因此不确定这是否是模拟器的错误。