我正在尝试在运行时设置我的Activity的主题,选择一个主题。我希望所选主题在活动启动时立即显示。
在我的清单的<application>
部分中,我使用android:theme="@style/AppTheme"
设置了默认主题。然后在我的onCreate()
我使用setTheme(R.style.DarkAppTheme)
将主题设置为用户选择的主题(用所选主题替换DarkAppTheme
)。
基于研究,似乎setTheme()
应该在onCreate()
之前和setContentView()
之前进行。
但是,虽然这可以在用户选择的主题中显示活动,但活动首先加载看起来像默认主题的活动,然后在短暂的延迟后加载正确的主题。
如果我直接在清单中设置用户选择的主题,我会立即加载,但当然这是硬编码的,我想根据共享的偏好动态更改它。
如何避免可见的转换?我希望从一开始就显示用户选择的主题。
感谢。
答案 0 :(得分:1)
活动首先加载看起来像默认主题的内容,然后在短暂的延迟后加载正确的主题......如何避免可见的转换?
活动分为两部分&#39;进入/打开&#39;窗口动画,当您的应用首次启动时从主屏幕上的图标
第1部分是您标识为&#34; 看起来像默认主题的内容&#34;。您可以使用活动/应用程序样式中的以下项禁用此第一部分:
<item name="android:windowDisablePreview">true</item>
这样可以防止出现深灰色矩形&#39;动画,只允许显示视图布局&#39;因此避免可见的转换或闪烁。但有一些警告:
标记允许您禁用窗口的初始屏幕。默认值为false;如果设置为true,系统永远不会使用窗口的主题在向用户显示实际实例之前显示启动画面预览。
更多信息:
答案 1 :(得分:0)
AndroidManifest
上的主题只会在Activity
加载时间过长时出现。您可以尝试调整Activity
加载并从android:theme="@style/AppTheme"
删除AndroidManifest
,甚至可以在这两种用途之间设置折衷方案。
我希望它可以帮助你\ o /