我有这个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
都是在旋转之前 在夜间模式下渲染的,每次旋转后都{1}}。那么,这是怎么回事,我该怎么做才能获得更一致的行为? (无论应用程序是否处于夜间模式,屏幕旋转后都要重新创建(或不重新创建)Activity
。)
答案 0 :(得分:1)
似乎是一个错误,将根据此issue在AppCompat v1.1.0中修复。
从AppCompat v1.1.0-alpha03开始,您不再需要uiMode
中的configChanges
标志作为解决方法