HarmonyOS 鸿蒙Next 获取屏幕状态栏跟底部安全区域的高度

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

HarmonyOS 鸿蒙Next 获取屏幕状态栏跟底部安全区域的高度

有没有比较好的获取状态栏跟底部安全区域的高度的方式。  

目前看到的文档如下:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window#getwindowavoidarea9

 场景是播放视频的时候横屏全屏播放的时候想留两个边。 写法如下:  .width(this.orientation == window.Orientation.PORTRAIT ? ‘720lpx’: ‘100%’) .height(this.orientation == window.Orientation.PORTRAIT ? ‘410lpx’ : ‘100%’)  目前竖屏的时候用的是设背景颜色。  w.setWindowBackgroundColor(backgroundColor)  不过感觉可能会闪一下,因此如果开启的时候设置成全屏然后留一个内边距可能比较好。或者有比较好的方式也可以发一个文档看一下。  非常感谢。

2 回复
可以在EntryAbility里获取并存储,获取到的高度是px,所以用px2vp()转换为vp使用:
  onWindowStageCreate(windowStage: window.WindowStage) {
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
    windowStage.loadContent('pages/Index', (err, data) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
      let windowClass = windowStage.getMainWindowSync()
      let statusHeight = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height;
      let bottomHeight = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR).bottomRect.height;
      AppStorage.setOrCreate('bottomHeight',px2vp(bottomHeight));
      AppStorage.setOrCreate('statusHeight',px2vp(statusHeight));
    });
  } 

在需要的界面使用 AppStorage.get('bottomHeight'),AppStorage.get('statusHeight') 获取。

相关文档可参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-develop-apply-immersive-effects-0000001820435461#section171801550301

在HarmonyOS(鸿蒙)Next系统中,获取屏幕状态栏和底部安全区域的高度通常涉及系统提供的API来获取窗口的装饰区域(Insets)。以下是如何实现这一目标的简要说明:

  1. 状态栏高度

    • 可以通过WindowInsets对象获取状态栏的高度。通常,在组件或页面的onWindowFocusChanged方法中调用getWindow().getDecorView().getWindowInsets().getSystemWindowInsets().top来获取。
  2. 底部安全区域高度

    • 类似地,底部安全区域(如导航栏)的高度可以通过getWindowInsets().getSystemWindowInsets().bottom来获取。

示例代码(伪代码,具体实现需根据实际开发环境和API版本调整):

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        WindowInsets windowInsets = getWindow().getDecorView().getWindowInsets();
        int statusBarHeight = windowInsets.getSystemWindowInsets().top;
        int navigationBarHeight = windowInsets.getSystemWindowInsets().bottom;
        // 使用statusBarHeight和navigationBarHeight
    }
}

请确保您的开发环境和HarmonyOS SDK版本支持上述API。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部