鸿蒙Next如何获取底部安全区高度

在鸿蒙Next开发中,如何获取底部安全区的高度?我需要在适配不同设备时动态调整布局,避免内容被系统导航栏遮挡。目前尝试了通过WindowInsets类获取,但实际获取的值与预期不符。请问正确的API调用方式是什么?是否需要考虑屏幕旋转或全屏模式等场景?

2 回复

鸿蒙Next获取底部安全区高度?简单!用window.getWindowAvoidArea(),再取typeavoidAreaTypeBottom的矩形高度。代码示例:

let avoidArea = window.getWindowAvoidArea(avoidAreaTypeBottom);
let bottomSafeHeight = avoidArea.topRect.height;

搞定!安全区高度到手,再也不用担心刘海和下巴了~ 😄

更多关于鸿蒙Next如何获取底部安全区高度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,获取底部安全区高度可以通过以下步骤实现:

  1. 使用窗口管理器:通过 window 模块获取窗口信息,并计算安全区域。
  2. 获取窗口矩形和安全区域:使用 getWindowRectgetWindowAvoidArea 方法。

示例代码(ArkTS):

import { window } from '@kit.ArkUI';

// 获取窗口实例
let windowClass = window.getLastWindow(this.context);

// 获取窗口矩形
windowClass.getWindowRect((err, data) => {
  if (err) {
    console.error('Failed to get window rect');
    return;
  }
  let windowRect = data;
  
  // 获取窗口的安全区域(避免区域)
  windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM, (err, data) => {
    if (err) {
      console.error('Failed to get avoid area');
      return;
    }
    let avoidArea = data;
    
    // 计算底部安全区高度
    let bottomSafeAreaHeight = windowRect.height - avoidArea.bottomRect.bottom;
    console.log('Bottom safe area height: ' + bottomSafeAreaHeight);
  });
});

说明:

  • getWindowAvoidArea 方法返回一个矩形区域,表示系统UI(如导航栏)占用的区域。
  • TYPE_SYSTEM 参数指定获取系统安全区域。
  • 通过窗口总高度减去安全区域底部的 bottom 值,得到底部安全区高度。

注意事项:

  • 确保在UI上下文中调用(例如在页面生命周期内)。
  • 需要 ohos.permission.SYSTEM_FLOAT_WINDOW 权限(如果涉及悬浮窗)。

这种方法适用于需要适配全面屏或异形屏设备的场景。

回到顶部