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

.NET MAUI Android应用设置全屏标志仍无法全屏问题求助

.NET MAUI Android全屏模式设置失效问题解决

问题描述

刚接触.NET MAUI,开发手机端简易FTP客户端时,无法设置全屏模式。已在MainActivity.cs中配置全屏相关标志,但本地设备测试始终不生效,截图如下:
全屏设置失效截图

当前使用的MainActivity.cs代码:

using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Views;
using AndroidX.Core.View;

namespace FTPBuddy
{
    [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
    public class MainActivity : MauiAppCompatActivity
    {
        protected override void OnCreate(Bundle? savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            Window?.AddFlags(WindowManagerFlags.Fullscreen | WindowManagerFlags.LayoutInScreen);
            Window?.ClearFlags(WindowManagerFlags.ForceNotFullscreen);

            var controller = Window?.InsetsController;
            controller?.Hide(WindowInsets.Type.SystemBars());
        }
    }
}

解决方案

1. 调整Android主题配置

在Android项目的Resources/values/styles.xml中,修改Maui.SplashTheme主题,添加全屏相关属性,确保主题本身支持全屏:

<style name="Maui.SplashTheme" parent="Theme.Maui.Light">
    <!-- 启用全屏 -->
    <item name="android:windowFullscreen">true</item>
    <!-- 适配刘海屏,允许内容延伸到刘海区域 -->
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>

2. 修正Activity中的全屏逻辑

将全屏标志设置代码移到base.OnCreate之前执行,并补充Insets控制器的行为设置:

protected override void OnCreate(Bundle? savedInstanceState)
{
    // 先设置全屏标志,再调用基类方法
    Window?.AddFlags(WindowManagerFlags.Fullscreen | WindowManagerFlags.LayoutInScreen | WindowManagerFlags.LayoutNoLimits);
    Window?.ClearFlags(WindowManagerFlags.ForceNotFullscreen);

    base.OnCreate(savedInstanceState);

    var controller = Window?.InsetsController;
    if (controller != null)
    {
        // 隐藏系统栏和刘海区域的Insets
        controller.Hide(WindowInsets.Type.SystemBars() | WindowInsets.Type.DisplayCutout());
        // 设置系统栏行为:隐藏后不再自动显示
        controller.SystemBarsBehavior = WindowInsetsControllerBehavior.Hide;
    }
}

3. 补充MAUI生命周期配置(可选)

在MauiProgram.cs中添加Android生命周期事件配置,确保全屏设置在应用启动时生效:

using Microsoft.Maui.LifecycleEvents;

namespace FTPBuddy;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            })
            .ConfigureLifecycleEvents(events =>
            {
#if ANDROID
                events.AddAndroid(android => android
                    .OnCreate((activity, bundle) =>
                    {
                        activity.Window.AddFlags(Android.Views.WindowManagerFlags.Fullscreen);
                        activity.Window.AddFlags(Android.Views.WindowManagerFlags.LayoutNoLimits);
                    }));
#endif
            });

        return builder.Build();
    }
}

4. 适配Android 11+权限(如需沉浸全屏)

如果需要完全沉浸的全屏效果(系统栏完全隐藏且不自动弹出),在Android项目的AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

内容的提问来源于stack exchange,提问作者Gabriel Gavrilov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:33:20