Unity开发:如何始终显示Status和Navigation Bar
Unity中始终显示状态栏与导航栏的实现方法
一、基础Player Settings配置
打开Unity编辑器的「Player Settings」路径:Edit > Project Settings > Player,切换到「Android」标签页:
- 找到「Resolution and Presentation」区域
- 确保Status Bar Hidden和Navigation Bar Hidden两个选项均未勾选
二、代码强制保持显示(解决场景切换/后台恢复后的隐藏问题)
创建一个C#脚本KeepBarsVisible.cs,挂载到场景中持久化的对象上(比如主相机或全局管理对象),代码如下:
using UnityEngine; public class KeepBarsVisible : MonoBehaviour { void Start() { #if UNITY_ANDROID && !UNITY_EDITOR // 获取当前Android活动实例 AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject window = currentActivity.Call<AndroidJavaObject>("getWindow"); // 定义需要移除的隐藏标志位 AndroidJavaClass viewClass = new AndroidJavaClass("android.view.View"); int flagFullscreen = viewClass.GetStatic<int>("SYSTEM_UI_FLAG_FULLSCREEN"); int flagHideNavigation = viewClass.GetStatic<int>("SYSTEM_UI_FLAG_HIDE_NAVIGATION"); int flagImmersiveSticky = viewClass.GetStatic<int>("SYSTEM_UI_FLAG_IMMERSIVE_STICKY"); // 移除隐藏标志,恢复栏目的显示 int currentFlags = window.Call<int>("getDecorView").Call<int>("getSystemUiVisibility"); int newFlags = currentFlags & ~flagFullscreen & ~flagHideNavigation & ~flagImmersiveSticky; window.Call<AndroidJavaObject>("getDecorView").Call("setSystemUiVisibility", newFlags); // 取消窗口全屏布局限制 AndroidJavaClass windowManagerClass = new AndroidJavaClass("android.view.WindowManager$LayoutParams"); int flagLayoutNoLimits = windowManagerClass.GetStatic<int>("FLAG_LAYOUT_NO_LIMITS"); int currentWindowFlags = window.Call<int>("getFlags"); window.Call("setFlags", currentWindowFlags & ~flagLayoutNoLimits, -1); #endif } // 应用从后台返回前台时,重新恢复栏目的显示 void OnApplicationFocus(bool hasFocus) { if (hasFocus) { #if UNITY_ANDROID && !UNITY_EDITOR Start(); #endif } } }
代码说明
- 仅在Android平台生效,通过宏定义屏蔽编辑器和其他平台的执行逻辑
- 调用Android原生API,移除所有可能导致状态栏/导航栏隐藏的系统UI标志
- 监听应用焦点变化,确保后台切回前台时栏目的显示状态不会丢失
三、注意事项
- 项目最低Android API级别建议设置为28(Android 9.0)及以上,避免API兼容问题
- 必须使用真实Android设备测试,编辑器中无法预览状态栏与导航栏的显示效果
- 若使用第三方插件修改过UI显示逻辑,需确保插件代码不会覆盖当前设置
内容的提问来源于stack exchange,提问作者Ahmet Berat AĞIRMAN
相关产品推荐
相关产品推荐

