【问题标题】:Android 12+ splash screen background color is ignored in dark modeAndroid 12+ 启动画面背景颜色在深色模式下被忽略
【发布时间】:2022-12-17 18:35:58
【问题描述】:

我正在向现有应用程序添加 Android 12+ 启动画面。我想保留 Android < 12 的现有启动画面,因此我在“values-v31”文件夹中定义“新”启动画面样式。这是res/values-v31/styles.xml的内容:

<resources>
    <!-- Splash Screen Theme (Android 12+)
         Ref: https://developer.android.com/develop/ui/views/launch/splash-screen/migrate
     -->
    <style name="AppTheme.Splash">
        <item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_foreground</item>
        <item name="android:windowSplashScreenBackground">@color/primary</item>
    </style>
</resources>

在模拟器(使用 Pixel4a 设备)中测试时效果很好。但是,在真实设备(Poco X4 Pro 5G)中进行测试时,我发现当设备配置为夜间模式时,背景颜色会被忽略。复制“values-night-v31”文件夹中的 styles.xml 文件可以解决问题,但我认为这不是必需的。

我错过了什么吗?

【问题讨论】:

  • 哪个androidx.core:核心启动画面你用的版本?
  • 没有任何。我没有使用兼容库,因为我只想使用适用于 Android 12+ 的新启动画面。
  • 你的@color/primary有夜间主题变体吗?
  • @SovathnaHong 不,我没有定义夜间主题变体(我想使用相同的颜色)。我是不是该 ?
  • 您将需要两个主题文件:一个用于白天,另一个用于晚上。确保在两个主题中都包含样式以使其正常工作。此外,还有两个颜色文件:一个用于白天,另一个用于夜间,根据白天和夜间模式更改颜色。

标签: android


【解决方案1】:

你的问题与MIUI ROM有关。大多数使用Android这个分支的XIAOMI设备都有Dark Mode问题(你可以通过谷歌搜索找到很多关于它的报告)。 MIUI 试图在不支持 dark theme 的应用程序上强制使用 dark mode,但它不够聪明,无法正确处理它。所以你需要explicitly告诉操作系统如何通过在values-night文件夹中定义你的样式和主题来处理你的应用程序中的黑暗模式,并且有必要避免这个问题。另一种方法是用户使用此路径Settings-&gt;Display-&gt;More Dark Mode Options 中的手机设置排除应用程序应用黑暗模式。当然,有时它不起作用。

【讨论】:

  • 这是有道理的,你有任何描述这种行为的参考资料吗?
  • 请检查herehere
【解决方案2】:

我假设您喜欢保留在较旧的 Android 版本上的旧启动画面使用 windowBackground 可绘制对象?

这是我设法做到这一点的方法。

我已经实现了 androidx.core:core-splashscreen 并将我的主题设置如下:

values/themes.xml 包含以下我使用旧 windowBackground 的样式:

<style name="AppTheme.Splash" parent="Theme.SplashScreen">
    <item name="android:windowLightStatusBar">true</item>
    <item name="postSplashScreenTheme">@style/AppTheme</item>
    <item name="android:windowBackground">@drawable/launch_screen</item>
</style>

values-v31/themes.xml 中,我已经使用新的原生启动画面为 android 12+ 配置了这种样式。

<style name="AppTheme.Splash" parent="Theme.SplashScreen">
    <item name="android:windowLightStatusBar">true</item>
    <item name="windowSplashScreenBackground">@color/primary</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/ic_launcher</item>
    <item name="postSplashScreenTheme">@style/AppTheme</item>
</style>

【讨论】:

    【解决方案3】:

    要尝试解决此问题,您可以将 android:forceDarkAllowed 属性添加到 AppTheme.Splash 样式,如下所示

    <resources>
        <!-- Splash Screen Theme (Android 12+)
             Ref: https://developer.android.com/develop/ui/views/launch/splash-screen/migrate
         -->
        <style name="AppTheme.Splash" parent="android:Theme.DeviceDefault.Light">
            <item name="android:forceDarkAllowed">true</item>
            <item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_foreground</item>
            <item name="android:windowSplashScreenBackground">@color/primary</item>
        </style>
    </resources>
    

    如果不是,这将默认为 false,不确定这是否会在这里解决您的特定问题,但之前遇到过并希望它有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多