.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
相关产品推荐
相关产品推荐

