我有这个Activity
(AppCompatActivity
的子类):
<activity
android:name=".ui.settings.SettingsActivity"
android:configChanges="keyboardHidden|smallestScreenSize|orientation|screenSize|screenLayout"
android:launchMode="singleTask"
android:parentActivityName=".ui.main.MainActivity" />
现在,当我在正常(即“白天”)模式下旋转手机时,我会接到一个电话 onConfigurationChanged
但是Activity
不会重新创建。
但是,当应用程序设置为夜间模式(通过在创建 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
之前在我的 Application
中调用 Activity
)并且我然后旋转手机时,我首先得到一个调用 onConfigurationChanged
然后是 Activity
也重新创建,即使 uiMode
一点都没变!这在我添加 uiMode
时消失了到 configChanges
在我的 AndroidManifest.xml
中应该被忽略,但我需要这样做似乎很奇怪。
通过查看源代码似乎:
-
onConfigurationChanged
电话getDelegate().onConfigurationChanged(newConfig);
转到AppCompatDelegateImpl.onConfigurationChanged(newConfig)
- 在那里,
applyDayNight()
被调用 - 在那里,
getNightMode
返回AppCompatDelegateImpl.MODE_NIGHT_YES
,这是有道理的,因为这是我设置的。mapNightMode
只是返回那个值不变。那么updateForNightMode(AppCompatDelegateImpl.MODE_NIGHT_YES)
被调用 - 在那里,
newNightMode
正确计算为Configuration.UI_MODE_NIGHT_YES
但是currentNightMode
(从mContext.getResources().getConfiguration().uiMode
读入)总是显示为Configuration.UI_MODE_NIGHT_NO
每次旋转后,即使Activity
在旋转之前以夜间模式呈现。
那么,这里发生了什么,我可以做些什么来获得更一致的行为? (在屏幕旋转后重新创建(或不创建)Activity
,无论应用是否处于夜间模式。)
最佳答案
似乎是一个错误,将根据此 issue 在 AppCompat v1.1.0 中修复.
从 AppCompat v1.1.0-alpha03 开始,您不再需要 configChanges
中的 uiMode
标记作为解决方法
关于android - 当且仅当夜间模式打开时,屏幕旋转发生变化时, Activity 才会重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55846087/