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

Xamarin.Forms PCL应用Android 12及以上版本启动页失效问题

Xamarin.Forms 安卓端适配Android 12+启动页可行方案

问题背景

Android 12及更高版本对Splash Screen API做出了变更,基于Xamarin.Forms开发的安卓应用已无法正常显示启动页。
目前公开可查的启动页替代实现方案均针对Xamarin.Android原生开发,不适用于Xamarin.Forms开发场景。
官方迁移文档给出的Kotlin适配示例代码如下:

val splashScreen = installSplashScreen()

C#开发环境下没有上述代码的直接等价实现,无法直接套用官方原生方案。

已尝试操作与报错

此前尝试在项目中新建名为values-v31的文件夹,在文件夹内创建styles.xml文件,写入如下XML配置:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.App.Starting" parent="Theme.SplashScreen">       

    <!-- 配置启动页结束后直接加载的Activity主题 -->
    <!-- 为必填配置项 -->
    <item name="postSplashScreenTheme">@style/SplashScreen</item>
</style></resources>

写入配置后项目编译阶段直接报错,报错截图如下:
编译报错截图

测试环境信息

  • Xamarin.Forms 版本:5.0.0.2478
  • 目标Android API 版本:31

适配步骤

1. 引入依赖包

安装Xamarin.AndroidX.Core.SplashScreen NuGet包到Xamarin.Android项目,该包为Google官方Splash Screen库的.NET绑定实现,提供了和原生installSplashScreen()等价的C# API。之前遇到的编译报错,本质是没有引入该依赖,系统找不到Theme.SplashScreen父主题资源导致的。

2. 完善启动主题配置

保留之前创建的values-v31/styles.xml文件,在原有配置基础上补充启动页图标、背景色配置,参考如下:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.App.Starting" parent="Theme.SplashScreen">       
    <!-- 启动页结束后加载的应用原有主题,替换为你项目实际使用的主题 -->
    <item name="postSplashScreenTheme">@style/MainTheme</item>
    <!-- 启动页中心图标,替换为你的应用启动图标资源 -->
    <item name="windowSplashScreenAnimatedIcon">@mipmap/launcher_foreground</item>
    <!-- 启动页背景色,替换为你需要的背景色值 -->
    <item name="windowSplashScreenBackground">@color/launcher_bg</item>
</style>
</resources>

注意:postSplashScreenTheme必须填写应用正常运行时使用的主题,不要和启动主题混淆,否则会出现样式异常。

3. 修改MainActivity代码

在MainActivity的OnCreate方法最开头,也就是base.OnCreate(savedInstanceState)调用之前,添加启动页安装代码,示例如下:

using AndroidX.Core.SplashScreen;
// 其他using引用保留

[Activity(
    Label = "你的应用名称",
    Icon = "@mipmap/icon",
    Theme = "@style/Theme.App.Starting", // 将Activity主题设置为刚才定义的启动主题
    MainLauncher = true,
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        // 安装启动页,必须在base.OnCreate之前调用
        SplashScreen.InstallSplashScreen(this);

        base.OnCreate(savedInstanceState);
        // 原有Xamarin.Forms初始化逻辑保持不变
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }

    // 其他原有方法代码保持不变
}

4. 兼容验证

上述配置同时兼容Android 12及以上、Android 12以下版本系统,不需要额外做版本判断,重新编译项目即可解决启动页不显示、编译报错的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:33:23