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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:45:55