具有configChanges的Android DayNight主题

时间:2018-09-13 12:31:49

标签: android rotation orientation

我正在创建一个应用,其中使用了Android支持库的主题DayNight。

这是themes.xml中的代码

<style name="ActivityTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

我在清单中使用configChanges来管理轮换。

android:configChanges="keyboardHidden|orientation|screenSize"

在AppcompatActivity的onCreate中,我添加了:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

问题是当我使用setDefaultNightMode时,android:configChanges停止工作,并在每次旋转中重新创建活动。

欢迎您提供任何帮助

3 个答案:

答案 0 :(得分:1)

可能您需要在清单中添加' uiMode '参数:

android:configChanges="orientation|screenSize|uiMode|keyboardHidden"

答案 1 :(得分:0)

似乎是一个错误,将根据此issue在AppCompat v.1.1.0中修复。

在修正之前,我会像提到的here一样向uiMode添加android:configChanges标志

答案 2 :(得分:0)

issue已通过AppCompat v1.1.0-alpha05修复。

参见此处:https://developer.android.com/preview/features/darktheme#changing_themes_in-app

  

注意:从AppCompat v1.1.0-alpha05开始, setDefaultNightMode()不会自动重新创建任何已开始的活动。

将您的appcompat依赖项更新为latest版本,当前为1.1.0-rc01。

implementation 'androidx.appcompat:appcompat:1.1.0-rc01'

如果您添加了清单,请不要忘记从清单中的uiMode中删除android:configChanges标志。