Android DayNight Theme with configChanges

2020-03-26 16:54发布

I'm creating an app where I use the theme DayNight of the Android support libraries.

This is the code in 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>

I use configChanges in the manifest to manage rotations.

android:configChanges="keyboardHidden|orientation|screenSize"

In the onCreate on my AppcompatActivity I have added:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

The problem is that when I use setDefaultNightMode, android:configChanges stops working, and recreate de activity in every rotation.

Any kind of help will be welcome

3条回答
混吃等死
2楼-- · 2020-03-26 17:07

This issue has been fixed with AppCompat v1.1.0-alpha05.

See here: https://developer.android.com/preview/features/darktheme#changing_themes_in-app

Note: Starting with AppCompat v1.1.0-alpha05, setDefaultNightMode() does not automatically recreate any started activities.

Update your appcompat dependency to the latest version, currently 1.1.0-rc01.

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

Don't forget to remove the uiMode flag from android:configChanges in your manifest if you added it.

查看更多
够拽才男人
3楼-- · 2020-03-26 17:12

Seems to be a bug and will be fixed in AppCompat v.1.1.0 according to this issue.

Until its fixed I would add the uiMode flag to android:configChanges like mentioned here

查看更多
走好不送
4楼-- · 2020-03-26 17:30

Probably you need to add 'uiMode' parameter to your manifest:

android:configChanges="orientation|screenSize|uiMode|keyboardHidden"
查看更多
登录 后发表回答