uni-app Android隐藏状态栏需三条件:pages.json设navigationStyle:"custom"且titleNView:false;onShow中用#ifdef APP-PLUS调plus.navigator.setFullscreen(true);用CSS变量--status-bar-height适配高度,厂商系统限制时需原生层修改。

uni-app 在 Android 手机上隐藏状态栏,不能只靠 CSS 或页面配置,必须满足三个硬性条件:配置交出控制权、时机正确调用 API、真机环境就绪。缺一不可,否则 plus.navigator.setFullscreen(true) 会静默失败或只在部分机型生效。
pages.json 必须设 navigationStyle: "custom" 并关闭 titleNView
这是所有操作的前提,不是可选项。Android 原生导航栏由容器控制,不设 custom 就永远无法触发全屏逻辑:
-
"navigationStyle": "custom"表示彻底放弃原生导航栏渲染权,包括标题、返回键、下拉刷新区 - 必须配套写
"app-plus": { "titleNView": false },否则 MIUI、HyperOS 等系统仍会渲染空白 title 区域,造成顶部 1px 白边或内容上移 - 单独写
navigationBarHidden: true在 APP 端完全无效,该字段仅对小程序/H5 生效
onShow 中调 plus.navigator.setFullscreen(true),且必须包裹 #ifdef APP-PLUS
这个 API 是真正隐藏状态栏的动作,但极易因时机或环境错失:
- 只能在
onShow(或onLaunch)中调用,mounted/created时plus环境尚未初始化,调了也白调 - 必须用
#ifdef APP-PLUS包裹,否则 H5 或小程序运行时报plus is not defined - 它只隐藏状态栏,不处理底部虚拟导航栏;若需隐藏底部栏,可加
plus.navigator.hideSystemNavigation(),但在小米 HyperOS、OPPO ColorOS 14+ 上已失效,属系统限制
用 --status-bar-height 替代 JS 获取高度
隐藏后内容常被“顶上去”或留黑边,问题不在 CSS 写错,而在高度适配方式错误:
- 别信
uni.getSystemInfoSync().statusBarHeight—— Android 返回值不稳定(常固定为 24/25),全面屏机型不准,H5 和小程序甚至不返回 - uni-app 在 App 端注入了可靠的 CSS 变量:
--status-bar-height,直接在根容器写padding-top: var(--status-bar-height); - 如果用了
<uni-nav-bar>,记得显式设background-color="transparent",否则默认背景色会挡住状态栏区域
最易忽略的点是:即使代码全对,某些 Android 11+ 厂商系统(如华为 EMUI、小米 HyperOS)会拦截 setFullscreen,此时必须结合原生层修改 AndroidManifest.xml 和 MainActivity.java,启用 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 并调用 setDecorFitsSystemWindows(false) —— 纯 JS 层做不到真正沉浸式全屏。


















