HarmonyOS 鸿蒙Next怎么让部分页面沉浸式,部分不沉浸式显示

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next怎么让部分页面沉浸式,部分不沉浸式显示

页面要是沉浸式显示的所以,在 EntryAbility 设置了

windowStage.getMainWindow((err, windowClass) => {
    windowClass.setWindowLayoutFullScreen(true)
    windowClass.setWindowSystemBarEnable(['navigation'])
})

但是,跳转到 其他应用的页面后也会沉浸式显示 顶部返回按钮就基本看不见了,有没有手动,或者设置 让 部分页面设置 沉浸式显示, 部分页面一般的显示的方式?


更多关于HarmonyOS 鸿蒙Next怎么让部分页面沉浸式,部分不沉浸式显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

系统侧提供了两种方案(窗口全局布局【布局全屏】和组件安全区方案【绘制全屏】),对应官网文档可参考链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-develop-apply-immersive-effects-0000001820435461-V5?catalogVersion=V5

两种方案都有自己的特点,一个是绘制全屏,一个是布局全屏。从灵活度上,布局全屏是最灵活的,完全控制状态栏和导航栏。

而针对需要单独布局UI元素到状态栏和导航条区域的场景建议使用窗口全屏布局方案处理。应用可针对自身场景来选择使用哪种方案。

窗口管理不能对不同的页面进行统一的沉浸式设置,您可以在需要页面的生命周期中进行设置。

在EntryAbility的onWindowStageCreate方法中通过windowStage获取window,然后分别调用setWindowLayoutFullScreen和setWindowSystemBarEnable方法。

参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/application-window-stage-V5

示例如下:

let windowClass = null;
//获取窗口
windowStage.getMainWindow((err, data) => {
  if (err.code) {
    console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
    return;
  }
  windowClass = data;
  console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
  //设置窗口全屏
  windowClass.setWindowLayoutFullScreen(true)
  let names = [];
  //设置状态栏和导航栏不显示
  windowClass.setWindowSystemBarEnable(names, (err) => {
    if (err.code) {
      console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err));
      return;
    }
    console.info('Succeeded in setting the system bar to be visible.');
  });
})

您可以在需要页面的生命周期里设置,不需要时隐藏,代码如下

// 页面生命周期:当页面显示时
onPageShow() {
  window.getLastWindow(getContext(this), (err, win) => {
    // 获取当前窗口的属性
    let prop: window.WindowProperties = win.getWindowProperties();
    // 打印当前窗口属性
    console.log(JSON.stringify(prop));
    win.setWindowSystemBarEnable([])
  })
}
// 页面生命周期:当页面隐藏时
onPageHide() {
  window.getLastWindow(getContext(this), (err, win) => {
    // 设置当前窗口状态栏和导航栏为显示
    win.setWindowSystemBarEnable(['status', 'navigation']);
  })
}

更多关于HarmonyOS 鸿蒙Next怎么让部分页面沉浸式,部分不沉浸式显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,实现部分页面沉浸式、部分页面不沉浸式显示,通常涉及对页面布局和窗口属性的调整。以下是如何操作的基本思路:

  1. 沉浸式页面设置

    • 在需要沉浸式显示的页面中,通过设置窗口属性来实现。具体可以通过在页面的onAttach或onCreate等生命周期方法中调用系统API,如setWindowFlags,并传入相应的沉浸式标志,如LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,同时确保背景透明或设置为需要的颜色。
  2. 非沉浸式页面设置

    • 对于不需要沉浸式显示的页面,保持默认窗口属性即可,或者显式地清除沉浸式标志。这通常意味着不需要对窗口进行特殊处理,保持系统默认的UI显示行为。
  3. 页面切换与状态保持

    • 在页面切换时,确保正确加载和应用相应的窗口属性。这可能需要在页面的生命周期方法中适当处理,以保证沉浸式状态与非沉浸式状态的正确切换。

请注意,实际操作中可能需要根据具体的鸿蒙系统版本和API调整实现细节。如果上述方法无法直接应用或效果不佳,可能需要查阅最新的鸿蒙开发文档或参考官方示例代码。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部