繁体   English   中英

更改应用主题而不重新创建活动

[英]Changing app theme without recreating activity

我有一个自定义主题, Theme.AppCompat.DayNight.NoActionBar作为父,具有白天和夜晚模式的资源。

在文档中,提供了一种更改主题的方法,除非重新创建当前活动,否则主题将仅在下次启动活动时更改。

另一方面,Twitter和Pocket更改主题而不重新创建用户所处的活动。

我怎样才能实现这一目标?

另一方面,Twitter和Pocket更改主题而不重新创建用户所处的活动。

你怎么知道的? 如果您正确处理已保存状态并提供看起来不像更改窗口的动画,则可以使活动娱乐看起来足够好。 事实上,你可以让它看起来很好,你甚至不会意识到重建的活动。

运行adb shell dumpsys activity在Twitter中切换夜间模式之前和之后提供以下输出:

ResumedActivity: ActivityRecord{40c4156 u0 com.twitter.android/com.twitter.app.main.MainActivity t11398}
ResumedActivity: ActivityRecord{adca640 u0 com.twitter.android/com.twitter.app.main.MainActivity t11399}

请注意,活动哈希代码已更改 - 活动确实已重新创建。 这适用于最近版本的Twitter和2016年11月9日发布的Twitter 6.22.1。

改变主题是一项非常重要的任务。 您必须遍历整个视图层次结构并更改所有背景颜色,文本颜色, 涟漪 (祝您好运),并且您必须确保将来对getResources().get*任何调用都将返回正确的资源。

另一方面,您可以调用Activity.recreate()并让系统执行已编程的操作。

之后,您可以调用Activity.overridePendingTransition(...) ,其中包含一些不会更改窗口大小和位置的动画。 有更多方法可以设置窗口过渡的动画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM