Android 12+系统下Xamarin Forms全屏启动页实现方案问询
Android 12+ Xamarin Forms 全屏启动页解决方案
针对Android 12+系统,必须使用官方的SplashScreen API实现全屏启动页,旧方案会被系统强制替换为默认圆角图标加载界面,以下是可行步骤:
1. 安装依赖NuGet包
在Xamarin Android项目中安装Xamarin.AndroidX.Core.SplashScreen包,这是调用Android 12+启动屏API的核心依赖。
2. 配置启动屏主题
在Resources/values/styles.xml中创建自定义启动屏主题,覆盖默认圆角图标样式并开启全屏:
<style name="FullScreenSplashTheme" parent="Theme.SplashScreen"> <!-- 设置启动页背景(纯色或自定义Drawable) --> <item name="windowSplashScreenBackground">#FFFFFF</item> <!-- 禁用默认图标,避免显示圆角方形加载界面 --> <item name="windowSplashScreenAnimatedIcon">@null</item> <!-- 启动屏动画时长,设为0直接过渡到应用 --> <item name="windowSplashScreenAnimationDuration">0</item> <!-- 开启全屏模式 --> <item name="android:windowFullscreen">true</item> <!-- 适配刘海屏,允许内容延伸到刘海区域 --> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> <!-- 禁用退出动画,避免过渡卡顿 --> <item name="windowSplashScreenExitAnimation">@null</item> </style>
在AndroidManifest.xml中,将MainActivity的主题替换为上述自定义主题:
<activity android:name=".MainActivity" android:theme="@style/FullScreenSplashTheme" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
3. 修改MainActivity代码
在MainActivity.cs的OnCreate方法中,先初始化启动屏,再切换回应用主题并加载Xamarin Forms:
protected override void OnCreate(Bundle savedInstanceState) { // 初始化启动屏,必须在base.OnCreate之前调用 SplashScreen.InstallSplashScreen(this); // 切换回应用原本的主题(替换为你项目的实际主题) SetTheme(Resource.Style.MainTheme); base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); }
4. 自定义全屏图片启动页(可选)
如果需要用图片作为全屏启动页,创建Resources/drawable/splash_background.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 背景色兜底 --> <item android:drawable="@color/white"/> <!-- 全屏显示的图片,确保图片适配不同分辨率 --> <item> <bitmap android:src="@drawable/splash_image" android:gravity="fill"/> </item> </layer-list>
然后修改FullScreenSplashTheme中的windowSplashScreenBackground为@drawable/splash_background即可。
关键注意事项
- 确保项目的
targetSdkVersion设置为31(Android 12)或更高,符合应用仅适配Android 12+的要求。 - 彻底移除旧的启动页实现(如单独的SplashActivity、旧主题中的
windowBackground配置),避免与新API冲突。 - 测试需在Android 12+设备或模拟器上进行,低版本系统无需兼容。
内容的提问来源于stack exchange,提问作者user18107302
相关产品推荐
相关产品推荐

