以编程方式将主题设置为Android系统预览窗口

时间:2019-03-17 04:59:30

标签: android android-theme

我有一个应用程序,用户可以在其中选择默认主题和深色主题。清单将AppTheme应用于<application>,而每个活动都会检查相关标志并在必要时使用setTheme(AppTheme.Dark)

此实现对我的所有活动都效果很好,但是在应用程序启动之前,操作系统 所显示的预览窗口使用清单主题(即清单主题)。因此,用户在进入黑暗的应用程序之前会突然出现白屏。

基于其他SO答案,我收集到的唯一信息是,我们可以做的唯一设置是为要使用的窗口设置windowBackground可绘制对象(如果需要,还可以设置statusBarColor)。

即使我为每个主题设置了两个不同的windowBackground,但由于Application类似乎在其后加载,因此无法更改预览窗口的主题,并且在此处设置主题不会差异。

我想避免禁用预览,因为它增加了明显的延迟,而没有太多迹象表明该应用正在启动。有什么解决办法吗?我正在考虑在最坏的情况下两个主题都使用深色,就像Reddit应用程序一样。

样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- primary and accent color attributes -->

    <item name="android:windowBackground">@color/activityBackgroundLight</item>
</style>

<style name="AppTheme.Dark" parent="AppTheme">
    <!-- primary and accent color attributes -->

    <item name="android:windowBackground">@color/activityBackgroundDark</item>
</style>

注意:当我在这里使用颜色时,我已经尝试过使用渐变可绘制对象,并且它不会改变任何内容。


更新:我无法获得任何其他方法,因此我继续在默认情况下在SplashActivity上应用了深色主题。这意味着预览窗口始终是黑暗的,而SplashActivity的onCreate中的检查是倒置的(与其他活动相比),并在需要时应用浅色主题。

仍在寻找一种实际上可以让我在运行时切换的解决方案。

0 个答案:

没有答案