如何实现Xamarin Android中Splash Screen全屏显示 消除状态栏导航栏遮挡
Xamarin Android 启动页全屏显示解决方案
步骤1:完善启动页主题配置
修改styles.xml中MyTheme.Splash主题,补充适配状态栏、导航栏、刘海屏的属性:
<style name="MyTheme.Splash" parent="AppTheme"> <item name="android:windowBackground">@drawable/splash_screen</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowActionBar">false</item> <!-- 新增以下属性 --> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:navigationBarColor">@android:color/transparent</item> <!-- 适配刘海屏/挖孔屏,让内容延伸到刘海区域 --> <item name="android:windowLayoutInDisplayCutoutMode" tools:ignore="NewApi">shortEdges</item> </style>
如果编译时报找不到tools命名空间的错误,在resources根节点添加属性xmlns:tools="http://schemas.android.com/tools"即可。
步骤2:SplashActivity添加沉浸模式代码
仅靠主题配置在Android 11及以上版本无法完全隐藏系统栏,需要在SplashActivity.cs的OnCreate方法中添加动态设置代码:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 新增沉浸模式配置 if (Build.VERSION.SdkInt >= BuildVersionCodes.R) { Window.SetDecorFitsSystemWindows(false); var insetsController = Window.InsetsController; if (insetsController != null) { insetsController.Hide(WindowInsets.Type.StatusBars() | WindowInsets.Type.NavigationBars()); insetsController.SystemBarsBehavior = (int)WindowInsetsControllerBehavior.ShowTransientBarsBySwipe; } } else { Window.DecorView.SystemUiVisibility = (StatusBarVisibility) (SystemUiFlags.LayoutStable | SystemUiFlags.LayoutHideNavigation | SystemUiFlags.LayoutFullscreen | SystemUiFlags.HideNavigation | SystemUiFlags.Fullscreen | SystemUiFlags.ImmersiveSticky); } }
额外说明
你提到的NavigationPage方案是针对Xamarin.Forms项目的,如果你开发的是原生Xamarin.Android应用不需要使用该方案。如果是Xamarin.Forms项目,只需要在MainActivity加载Xamarin.Forms之前添加上述沉浸模式代码即可,无需额外调整NavigationPage配置。
内容的提问来源于stack exchange,提问作者YusufUcan
相关产品推荐
相关产品推荐

