如果夜间模式为ON,则当屏幕旋转发生变化时,将重新创建活动

问题描述 投票:1回答:1

我有这个ActivityAppCompatActivity的子类):

<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时,这就消失了,但是我需要做到这一点似乎很奇怪。

从查看源代码看起来:

  • qazxsw poi称qazxsw poi为qazxsw poi
  • 在那里,onConfigurationChanged被召唤
  • 在那里,getDelegate().onConfigurationChanged(newConfig);返回AppCompatDelegateImpl.onConfigurationChanged(newConfig),这是有道理的,因为这是我设置它。 applyDayNight()只是返回该值不变。然后getNightMode被召唤
  • 在那里,AppCompatDelegateImpl.MODE_NIGHT_YES被正确地计算为mapNightModeupdateForNightMode(AppCompatDelegateImpl.MODE_NIGHT_YES)(从newNightMode读入)在每次旋转后总是看起来是Configuration.UI_MODE_NIGHT_YES,即使currentNightMode在旋转前以夜间模式渲染。

那么,这里发生了什么,我该怎么做才能获得更一致的行为? (在屏幕旋转后重新创建(或不重新)mContext.getResources().getConfiguration().uiMode,无论应用程序是否处于夜间模式。)

android android-appcompat android-resources android-night-mode
1个回答
1
投票

似乎是一个错误,将根据此Configuration.UI_MODE_NIGHT_NO在AppCompat v1.1.0中修复。

从AppCompat v1.1.0-alpha03开始,您不再需要Activity中的Activity-flag作为解决方法

© www.soinside.com 2019 - 2024. All rights reserved.