.NET MAUI中Android 12及以上版本启动屏无法全屏显示求助
.NET MAUI Android 12+ 启动屏全屏适配解决方案
针对Android 12及更高版本启动屏无法全屏、内容显示过小的问题,可通过以下系统级适配方案解决(避免用ContentPage带来的性能延迟):
1. 配置Android 12+专属启动屏主题
在Platforms/Android/Resources/values-v31/styles.xml中创建或修改启动屏主题,强制启用全屏行为并适配系统状态栏/导航栏:
<style name="Maui.SplashTheme" parent="Theme.Maui.SplashScreen"> <!-- 启动屏背景色 --> <item name="android:windowSplashScreenBackground">@color/splash_background</item> <!-- 自定义启动屏内容(用layer-list构建) --> <item name="android:windowSplashScreenAnimatedIcon">@drawable/custom_splash</item> <!-- 强制全屏显示 --> <item name="android:windowSplashScreenBehavior">android.window.SplashScreenBehavior#SPLASH_SCREEN_BEHAVIOR_FULLSCREEN</item> <!-- 适配刘海屏 --> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> <!-- 透明状态栏/导航栏 --> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:navigationBarColor">@android:color/transparent</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> </style>
同时确保MainActivity.cs指定该主题:
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] public class MainActivity : MauiAppCompatActivity { // ... 原有代码 }
2. 用Layer-List构建自适应的启动屏内容
Android 12+对启动屏图标有尺寸规范,直接用单张图片会导致缩放问题。创建Platforms/Android/Resources/drawable/custom_splash.xml,通过分层布局实现logo+底部文字的自适应:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 背景层 --> <item android:drawable="@color/splash_background" /> <!-- 居中显示的Logo --> <item> <bitmap android:gravity="center" android:src="@drawable/app_logo" android:width="128dp" android:height="128dp" /> </item> <!-- 底部文字区域 --> <item android:gravity="bottom|center_horizontal" android:bottom="40dp"> <text android:text="第一行文字" android:textColor="@android:color/white" android:textSize="16sp" android:gravity="center" /> </item> <item android:gravity="bottom|center_horizontal" android:bottom="16dp"> <text android:text="第二行文字" android:textColor="@android:color/darker_gray" android:textSize="12sp" android:gravity="center" /> </item> </layer-list>
可根据需求调整元素的尺寸、位置和样式,确保在不同屏幕密度下显示正常。
3. 补充初始化时的全屏设置
在MauiProgram.cs中添加生命周期事件,确保启动时隐藏系统状态栏和导航栏:
builder.ConfigureLifecycleEvents(events => { #if ANDROID events.AddAndroid(android => android .OnCreate((activity, bundle) => { activity.Window.DecorView.SystemUiVisibility = Android.Views.StatusBarVisibility.Hidden; // Android 11+ 可用以下方式强制全屏 activity.Window.SetFlags(Android.Views.WindowManagerFlags.LayoutNoLimits, Android.Views.WindowManagerFlags.LayoutNoLimits); })); #endif });
关键说明
- 系统级启动屏是Android原生提供的机制,比ContentPage实现的启动屏性能高得多,不会出现初始化延迟。
- Android 12+启动屏API变更较大,必须针对API 31及以上版本单独配置主题,低版本会自动沿用原有适配逻辑。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

