在 .NET MAUI 项目里,启动画面并不是由某个单独的配置文件控制的,而是通过项目文件中的 MSBuild 项来完成声明。你只需要在 .csproj 里添加一个 <MauiSplashScreen> 项,MAUI 的构建系统就会自动为不同平台生成对应的启动图资源。与 Xamarin.Forms 时期需要分别维护 Android 的 splash.xml、iOS 的 LaunchScreen.storyboard 不同,这种方式把跨平台差异收敛到了同一套配置里,维护成本明显降低。

一个最小配置如下。假设项目 Resources 目录下有一个 Splash 子目录,里面放了一张名为 splash.svg 的矢量图,那么可以在 .csproj 的 <ItemGroup> 中写入:
<ItemGroup> <MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" /> </ItemGroup>
这段声明的作用是告诉 MAUI:以 splash.svg 作为启动画面图像,背景色使用 #512BD4,基准尺寸为 128 乘 128。下面展开说明每个属性的具体含义。
一、理解 MauiSplashScreen 的配置项
在 MAUI 中,<MauiSplashScreen> 是写在项目文件里的 MSBuild 项,它有两个核心属性:Include 指定资源路径,Color 指定背景色。除此之外,常用的是 BaseSize 和 Resize。BaseSize 表示原始图像在逻辑上的基准宽高,它是两个整数,中间用英文逗号分隔,例如 128,128。
BaseSize 并不要求与你实际文件的像素完全一致,但它会直接影响缩放计算。如果你使用的是一张 1024 乘 1024 的 PNG,却把 BaseSize 写成 128,128,MAUI 会认为这张图的原始尺寸是 128 乘 128,然后按各平台需要的尺寸进行放大,结果通常仍然比直接写 1024,1024 更节省内存,但可能造成某些平台生成资源时丢失细节。对于 SVG 矢量图,BaseSize 主要用来确定宽高比和初始布局,实际渲染由矢量计算完成,所以强烈建议优先使用 SVG。
Resize 属性用来控制图像如何适配启动画面的可绘制区域。可选值一般包括 contain、cover 和 fill。contain 会完整显示图片,并保持宽高比,四周留出背景色;cover 会填满整个区域,超出部分被裁剪;fill 会拉伸图片以填满区域,宽高比可能被破坏。默认行为接近 contain,这也是多数应用想要的效果。
二、准备合适的启动图资源
启动画面图片最好使用正方形构图。Android、iOS 和 Windows 在生成启动画面时,通常会从中心区域取内容,边缘部分容易被裁切或遮挡。把品牌 Logo 或核心图形放在画面中央,并四周预留约 10% 到 15% 的安全边距,可以避免不同屏幕比例下出现缺角的问题。
资源格式方面,SVG 是 .NET MAUI 官方模板的选择,也是目前维护成本最低的方案。因为它可以无损缩放到任意分辨率,不需要为不同 DPI 准备多套 PNG。假如你的项目必须使用 PNG,比如设计团队只能输出位图,那么应该提供一张高分辨率版本,并将 BaseSize 设置成图片实际像素尺寸。比如一张 512 乘 512 的 PNG,就写 BaseSize="512,512"。同时避免使用透明背景,因为启动画面的背景色只由 Color 控制,透明区域会直接显示为 Color 设置的颜色,如果图片本身带阴影或渐变,可能与背景不协调。
如果需要替换默认模板中的 splash.svg,直接把新文件放到 Resources\Splash 目录,然后修改 Include 指向即可。注意路径中的反斜杠和大小写应保持一致,尤其是在 macOS 和 Linux 上构建时,资源路径区分大小写。可以使用通配符一次声明多个文件吗?MAUI 的启动画面通常只应保留一个激活项,多个匹配项可能导致构建警告或行为不一致,建议始终明确指定一个文件。
三、平台行为差异与常见问题
Android 12 及以上系统引入了统一的 SplashScreen API,MAUI 会把项目里的启动画面映射到系统启动窗口。此时系统会强制在启动期间显示应用图标,所以你的图片应作为中心图标处理,而不是铺满全屏的背景图。如果 Android 上发现启动画面边缘出现白色或黑色,先检查 Color 是否写成了透明或无效值,再检查图片是否带透明通道。
iOS 上 MAUI 会从同一个配置生成 LaunchScreen.storyboard。升级旧项目后如果发现仍然显示 MAUI 默认的紫色启动页,多半是 csproj 中的 <MauiSplashScreen> 没有生效。先确认项名称拼写、Include 路径和文件是否存在,然后清理 bin、obj 目录并重新部署。iOS 缓存较顽固,仅重新运行可能不会刷新启动画面,需要在设备上删除应用后再安装。
Windows 端启动画面的背景色还会受到应用清单中背景色设置的影响。如果 csproj 与清单颜色不一致,启动过程中可能出现短暂的颜色跳变。保持两者使用相同的颜色值,或者只在 csproj 中维护颜色、不要手动改清单,可以降低这类问题。若某个平台确实不需要启动画面,可以在平台条件下移除该项:
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">
<MauiSplashScreen Remove="Resources\Splash\splash.svg" />
</ItemGroup>
这个片段仅在 Windows 目标框架下移除启动画面声明。其他平台不会被影响。不过大多数应用不需要这样做,只要颜色和 BaseSize 设置正确,MAUI 的启动画面已经足够稳定。

