首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DayNight主题不跟随系统

DayNight主题不跟随系统
EN

Stack Overflow用户
提问于 2020-08-22 22:21:10
回答 1查看 668关注 0票数 1

我实现了一个主题,其父主题是Theme.AppCompat.DayNight,并将其分配给我的活动。如果我的应用程序被停止,我将系统主题更改为黑暗模式,然后启动我的应用程序,黑暗主题正确工作。然而,如果我然后关闭系统黑暗模式,而我的应用程序运行,它不会切换主题,直到我重新启动应用程序。

我可以看到,当我按下系统黑暗模式按钮时,支持黑暗主题的其他应用程序会立即改变。

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-23 19:51:36

好的,所以它的工作方式是DayNight主题在主题之间自动切换,或者当您使用AppCompatDelegate.setDefaultNightMode()或(setLocalNightMode)设置不同的主题时,或者(我假设)当您跟踪系统设置时,系统发出“现在就使用夜间模式”的消息。

它的“切换”方式是通过重新创建活动,使用主题的适当变化。这里有一个devs 解释它

如果需要进行配置更改,上述两种方法都将重新创建活动,以便可以应用新的主题。这是一个很好的机会来测试活动+片段是否正确地保存了它们的实例状态。

问题是,您正在重写这些配置更改,而不是让系统处理它。你基本上是在说“别担心,如果这个活动因为这些原因需要重新创建,不要这样做--我会处理的”。但这很复杂,建议您使用别干那事

警告:自己处理配置更改的会使使用替代资源变得更加困难,因为系统不会自动为您应用这些资源。当您必须避免由于配置更改而重新启动时,这种技术应该被视为最后的手段,并且不推荐在大多数应用程序中使用。

因此,通过包含这些重写,您将阻止系统应用这些更改。当您重新启动应用程序时,它可以工作,因为它可以(重新)创建活动,并使用正确的样式和资源设置它。

我猜删除重写会导致问题,因为您一直依赖它们来停止重新创建活动,所以您没有保存状态和重建一切的代码。(这就是为什么很多人一开始就增加了重写,这是一种让他们的生活更容易的黑客行为,但它会造成这样的问题!)

如果这是你的问题,你将不得不重做应用程序的部分,以便在活动被破坏时保存和恢复状态,但更好的是,它可以处理这些东西无论如何-避免随机的空白,当他们回来的背景,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63541666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档