【问题标题】:Change background color in launch screen when using DayNight theme使用 DayNight 主题时更改启动屏幕中的背景颜色
【发布时间】:2016-09-23 13:21:03
【问题描述】:

我正在使用带有启动屏幕DayNight主题。

启动屏幕是一个白色背景的图层列表。

因此,当它的一天,白色启动屏幕显示随后是白色活动。但在晚上,白色启动屏幕显示随后是黑暗活动。

如何根据主题更改启动屏幕的背景颜色。

无法使用自定义颜色属性,因为只有 DayNight 主题。

themes.xml

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:colorControlNormal">@color/colorAccent</item>
</style>

<style name="LaunchTheme" parent="AppTheme">
    <item name="android:windowBackground">@drawable/launch_screen</item>
</style>

launch_screen.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <color android:color="@color/material_white"/>
</item>
<item>
    <bitmap
       android:gravity="center"
       android:src="@drawable/launch_logo"
       android:tileMode="disabled"/>
</item>

【问题讨论】:

  • 阅读本文你会得到一些想法:blog.nkdroidsolutions.com/…
  • 非常感谢您的链接。不知道 drawable-night 和 values-night 文件夹。这样就可以了:)
  • 很遗憾,夜间预选赛不适用于启动屏幕。因为启动屏幕是由操作系统而不是应用程序加载的。 :(
  • 是的,但是如果您将android:windowBackground 更改为styles,它会成功更改初始背景。问题是DayNight 模式直到启动才改变。因为它是一个动态的东西(可以根据偏好进行更改)。
  • 你找到解决办法了吗?

标签: android android-theme android-styles


【解决方案1】:

除了您的默认启动主题外,在适当的资源目录中提供其夜间变体。

res/values-night/themes.xml

<style name="LaunchTheme" parent="AppTheme">
    <item name="android:windowBackground">@drawable/launch_screen_night</item>
</style>

res/drawable/launch_screen_night.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <color android:color="@color/material_black"/>
</item>
<item>
    <bitmap
       android:gravity="center"
       android:src="@drawable/launch_logo"
       android:tileMode="disabled"/>
</item>

【讨论】:

  • 试过这个解决方案。就我而言,我仍然无法在初始屏幕上获得所需的模式背景颜色。正如这里所解释的(cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous),Android 使用 Zygote 技巧来显示预览窗口。此窗口的背景颜色由应用程序清单中设置的默认应用程序主题设置。
  • 应用程序在首次启动时无法加载夜间主题 1-​​2 秒。
  • 是的,这只有在你有一个特殊的启动活动并且它快速启动时才有效(你的应用程序类中没有繁重的代码)。日/夜“预览主题”应该可以在 Android 10 上运行,就像本地夜间模式设置为“跟随系统”一样。
【解决方案2】:

查了一会儿,我找到了答案。

由于闪屏配置是由系统加载的,因此您需要影响系统 UI 模式。

getSystemService<UiModeManager>()?.nightMode = UiModeManager.MODE_NIGHT_YES

但不幸的是,这不是干净的解决方案,因为它会影响系统设置。

对夜间模式的更改将在全球范围内生效,并将导致 配置更改(以及可能的 Activity 生命周期事件) 应用于所有正在运行的应用程序。有兴趣的开发者 夜间模式的应用程序本地实现应考虑使用 AppCompatDelegate.setDefaultNightMode(int) 来管理 -night 本地限定符。

【讨论】:

  • 好吧,我想我不会再有启动画面了。
猜你喜欢
  • 2023-03-28
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2019-11-15
  • 2021-06-28
相关资源
最近更新 更多