gpt4 book ai didi

android - 当且仅当夜间模式打开时,屏幕旋转发生变化时, Activity 才会重新创建

转载 作者:行者123 更新时间:2023-11-29 00:54:30 25 4
gpt4 key购买 nike

我有这个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com