我有这个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
在AppCompat v1.1.0中修复。
从AppCompat v1.1.0-alpha03开始,您不再需要Activity
中的Activity
-flag作为解决方法