Unity 6.4+UI Toolkit开发安卓App:如何显示状态栏?
在Unity 6.4中让安卓App显示顶部状态栏的解决方法
一、先检查Player Settings配置
打开Edit > Project Settings > Player > Android > Resolution and Presentation,确认以下设置:
- 取消勾选
Status Bar Hidden,这是让状态栏显示的基础开关 - 勾选
Render Outside Safe Area,避免UI被状态栏或导航栏遮挡
二、添加适配安卓的脚本(针对部分版本兼容)
有些安卓版本仅靠Player Settings可能不生效,添加一个简单的C#脚本,挂载到场景中任意常驻GameObject上(比如主相机或全局管理器):
using UnityEngine; public class AndroidStatusBarSetup : MonoBehaviour { void Start() { #if UNITY_ANDROID && !UNITY_EDITOR // 获取安卓当前Activity与Window实例 AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject window = currentActivity.Call<AndroidJavaObject>("getWindow"); // 清除全屏标记,强制显示状态栏 window.Call("clearFlags", 0x00000040); // 对应FLAG_FULLSCREEN window.Call("addFlags", 0x80000000); // 对应FLAG_FORCE_NOT_FULLSCREEN // 可选:设置状态栏文字为深色(适配浅色状态栏背景) AndroidJavaClass viewClass = new AndroidJavaClass("android.view.View"); int lightStatusBarFlag = viewClass.GetStatic<int>("SYSTEM_UI_FLAG_LIGHT_STATUS_BAR"); AndroidJavaObject decorView = window.Call<AndroidJavaObject>("getDecorView"); decorView.Call("setSystemUiVisibility", lightStatusBarFlag); #endif } }
- 脚本仅在安卓真机运行时生效,编辑器中自动跳过
- 代码直接调用安卓原生API,无需第三方插件,兼容最新安卓版本
三、UI Toolkit的布局适配
因为用的是UI Toolkit,要避免UI被状态栏遮挡:
- 在UI Document的根容器上,设置
style.marginTop: var(--safe-area-inset-top),利用系统提供的安全区域变量自动适配 - 也可以通过代码动态获取安全区域:
Rect safeArea = Screen.safeArea; // 在UI Toolkit中调整根元素的paddingTop为safeArea.y
额外注意事项
- 若自定义了安卓Manifest,确保主题没有设置全屏(比如去掉
android:theme="@style/UnityTheme.Fullscreen") - 必须用安卓真机测试,编辑器预览无法显示真实的状态栏效果
内容的提问来源于stack exchange,提问作者Mehalon
相关产品推荐
相关产品推荐

