You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms安卓闪屏页白色背景显示为灰色问题求解

问题场景
  • 运行环境:开启系统深色模式的安卓设备
  • 异常表现:自行开发的Xamarin.Forms应用闪屏页已配置白色背景,实际运行时显示灰色背景,疑似与系统深色模式逻辑相关
  • 相关配置:
    1. 闪屏页drawable文件 splash_screen.xml:
<?xml version="1.0" encoding="utf-8" ?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="@color/launcher_background"/>
    </item>
    <item>
        <bitmap 
            android:src="@drawable/logo1_100x153"
            android:tileMode="disabled"
            android:gravity="center"/>
    </item>
</layer-list>
  1. 主题样式文件 styles.xml:
<?xml version="1.0" encoding="utf-8" ?>
<resources>

  <style name="MainTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Xamarin.Forms 4.6+ 主题内置到Forms程序集,可在此处覆盖自定义配置 -->
    <!-- colorPrimary 用于默认ActionBar背景 -->
    <!--<item name="colorPrimary">#2196F3</item>-->
    <!-- colorPrimaryDark 用于状态栏颜色 -->
        <item name="colorPrimaryDark">#000000</item>
        <item name="android:forceDarkAllowed">false</item>
    <!-- colorAccent 用于控件激活态的默认着色 -->
    <!--<item name="colorAccent">#FF4081</item>-->
  </style>
  <style name="MyTheme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="android:windowBackground">@drawable/splash_screen</item>
      <item name="android:windowNoTitle">true</item>
      <item name="android:windowFullscreen">true</item>
      <item name="android:windowContentOverlay">@null</item>
      <item name="android:windowActionBar">true</item>
  </style>
</resources>
  • 实际运行效果:
    闪屏页实际显示效果
问题根因

该异常由安卓深色模式的两个生效规则共同导致:

  1. 闪屏主题遗漏强制深色禁用配置:android:forceDarkAllowed属性是按主题维度独立生效的,你仅在主主题MainTheme中配置了false阻止系统自动转暗色,但闪屏页使用的独立主题MyTheme.Splash未添加该配置。安卓10及以上版本开启深色模式时,会对未显式关闭该属性的Light主题自动做暗色转换,将原本的白色背景转为适配深色模式的灰色调。
  2. 颜色资源存在夜间模式专属配置:代码中引用的@color/launcher_background是Xamarin.Android默认模板生成的颜色资源,默认在Resources/values-night/colors.xml路径下存在深色模式专属配置,色值为灰色。系统开启深色模式时会优先加载values-night目录下的资源,直接覆盖普通values目录下的白色配置。
修复方案

按以下步骤调整配置即可固定闪屏页白色背景,不受系统深色模式影响:

  1. 为闪屏主题补充强制深色禁用配置
    在MyTheme.Splash样式节点下新增android:forceDarkAllowed属性,和主主题配置保持一致,修复后代码如下:
<style name="MyTheme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_screen</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowActionBar">true</item>
    <!-- 禁用系统强制暗色转换 -->
    <item name="android:forceDarkAllowed">false</item>
</style>
  1. 统一背景色值,避免夜间资源覆盖
    两种实现方式二选一即可:
  • 方式一:打开项目下Resources/values/colors.xml和Resources/values-night/colors.xml两个文件,将其中launcher_background的色值统一修改为#FFFFFF;
  • 方式二:直接修改splash_screen.xml,将背景色硬编码为白色,跳过颜色资源引用,修改后对应节点代码为:
<item>
    <color android:color="#FFFFFF"/>
</item>
  1. 校验清单文件配置
    确认AndroidManifest.xml中闪屏对应的Activity配置的主题为MyTheme.Splash,未被全局Application主题覆盖。

内容的提问来源于stack exchange,提问作者user18972374

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 08:27:24