HarmonyOS 鸿蒙Next中底部导航条怎么去除
HarmonyOS 鸿蒙Next中底部导航条怎么去除 使用setWindowLayoutFullScreen(true),h5的页面还是会有底部安全区,这个安全区高度怎么去除?
你要实现完全去除底部安全区,需结合窗口全屏设置与布局安全区扩展方法。
解决方法:
1/强制全屏设置,确保启用setWindowLayoutFullScreen(true)的同时,隐藏系统栏避免残留区域:
// 设置窗口全屏
let windowClass = window.getLastWindowSync(getContext());
windowClass.setWindowLayoutFullScreen(true);
// 隐藏状态栏和导航栏
windowClass.setWindowSystemBarEnable([]);
2/扩展组件安全区域,在需要覆盖底部安全区的组件上应用expandSafeArea属性:
Column()
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
.backgroundColor(Color.Black)
.height('100%')
更多关于HarmonyOS 鸿蒙Next中底部导航条怎么去除的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
要完全去除底部导航条并消除H5页面的底部安全区,需结合窗口配置和Web组件适配两种方式:
1. 隐藏系统导航条(完全去除导航条)
使用 setWindowSystemBarEnable
接口直接隐藏导航条(包括底部导航条):
import window from '@ohos.window';
import common from '@ohos.app.ability.common';
// 获取当前窗口实例(如在UIAbility的onWindowStageCreate中)
let windowClass = await window.getLastWindow(context);
// 隐藏状态栏和导航栏(传入空数组表示全部隐藏)
await windowClass.setWindowSystemBarEnable([]);
- 作用:直接隐藏系统导航条(包括底部导航条),使其不显示。
- 注意:此操作会完全移除导航条,用户无法通过系统导航操作(如返回、主页),需在应用中提供替代交互方式。
2. 设置沉浸式布局(避免安全区避让)
通过 setWindowLayoutFullScreen(true)
设置窗口为沉浸式布局,使内容延伸至非安全区域(包括底部):
// 设置窗口为沉浸式布局(内容扩展至状态栏/导航栏区域)
await windowClass.setWindowLayoutFullScreen(true);
- 作用:取消系统默认的安全区避让行为,允许内容覆盖底部导航条区域。
- 注意:此方法需配合 Web组件的安全区适配(见下文)才能完全消除H5页面的底部安全区。
3. Web组件安全区适配(针对H5页面)
即使窗口已沉浸式布局,Web组件默认仍会保留安全区避让(如底部安全区)。需通过以下方式去除:
- 方法一:使用
avoidVisibleViewportBottom(0)
设置Web组件底部避让高度为0:
// WebviewController示例
webviewController.avoidVisibleViewportBottom(0); // 避让高度设为0
- 方法二:通过HTML的viewport-fit属性
在H5页面的<meta>
标签中设置viewport-fit=cover
,使网页内容覆盖整个视口(包括非安全区):
<meta name="viewport" content="viewport-fit=cover">
- 方法三:使用CSS env()函数(可选)
若仍需部分避让,可通过CSS动态调整内容位置(但高度设为0时无需此操作):
body {
padding-bottom: env(safe-area-inset-bottom, 0px); /* 可选:安全区高度设为0 */
}
完整代码示例(结合窗口和Web配置)
// 在UIAbility或页面中设置窗口
async setImmersionMode() {
let windowClass = await window.getLastWindow(this.context);
// 1. 隐藏导航条
await windowClass.setWindowSystemBarEnable([]);
// 2. 设置沉浸式布局
await windowClass.setWindowLayoutFullScreen(true);
}
// Web组件中配置避让
@Entry
@Component
struct WebPage {
controller: webview.WebviewController = new webview.WebviewController();
build() {
Column() {
Web({ controller: this.controller })
.onReady(() => {
// 3. 设置Web组件底部避让高度为0
this.controller.avoidVisibleViewportBottom(0);
})
}
}
}
注意事项
-
兼容性:
setWindowSystemBarEnable
和setWindowLayoutFullScreen
从API version 10开始支持全功能(文档中多次提及)。avoidVisibleViewportBottom
是Web组件的专用接口(见《arkts-apis-webview-WebviewController.md》)。
-
效果验证:
- 隐藏导航条后,底部导航条完全消失。
- 沉浸式布局 + Web避让高度设为0后,H5页面底部安全区高度应为0。
-
替代方案:
若不想完全隐藏导航条(仅去除安全区),可改用:
// 仅设置沉浸式布局(保留导航条显示,但内容扩展至其下方)
await windowClass.setWindowLayoutFullScreen(true);
// 并设置导航栏背景透明
await windowClass.setWindowSystemBarProperties({
navigationBarColor: '#00000000', // 透明
});
在HarmonyOS Next中,去除底部导航条可通过修改页面配置实现。在module.json5
文件中,找到对应页面的window
属性,将navigationBarHidden
设置为true
。示例代码如下:
"window": {
"navigationBarHidden": true
}
保存后重新编译运行即可隐藏底部导航条。
在HarmonyOS Next中,可以通过设置setWindowLayoutFullScreen(true)
结合setWindowSystemBarEnable([])
来隐藏底部导航条和安全区。具体代码示例如下:
import window from '@ohos.window';
// 获取当前窗口
let currentWindow = await window.getLastWindow(this.context);
// 启用全屏布局
await currentWindow.setWindowLayoutFullScreen(true);
// 禁用系统栏(包括底部导航条)
await currentWindow.setWindowSystemBarEnable([]);
这样设置后,页面将完全占据屏幕,底部安全区会被隐藏。注意,此操作会同时隐藏状态栏和导航栏,适用于需要沉浸式体验的场景。