HarmonyOS鸿蒙Next中如何在应用中获取系统信息(状态栏高度等)?

HarmonyOS鸿蒙Next中如何在应用中获取系统信息(状态栏高度等)? 获取系统信息是鸿蒙应用适配的基础,本文介绍如何使用 uni.getSystemInfoSync 获取状态栏高度、屏幕尺寸、安全区域等系统信息。

3 回复

【解决方案】

开发者您好,uni-app提供了异步uni.getSystemInfo和同步uni.getSystemInfoSync的2个API获取系统信息。调用参数和返回值相同,可直接获取状态栏高度(statusBarHeight)、屏幕尺寸(屏幕宽度:screenWidth,屏幕高度:screenHeight)、安全区域(safeArea)等系统信息。

更多关于HarmonyOS鸿蒙Next中如何在应用中获取系统信息(状态栏高度等)?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,可通过@ohos.systemParameter模块获取系统信息。使用getSync('statusBarHeight')方法可直接获取状态栏高度。具体实现需先导入模块,然后调用该同步接口。

在HarmonyOS Next中,获取系统信息(如状态栏高度)的方式与您提到的Web/小程序API(如uni.getSystemInfoSync)有本质不同。HarmonyOS Next提供了原生的ArkUI开发框架和系统能力接口。

核心方法是使用window模块。该模块提供了窗口相关的信息,包括状态栏、导航栏的高度以及安全区域等。

以下是关键步骤和代码示例:

  1. 导入模块:在您的ArkTS文件中导入window模块。

    import { window } from '@kit.ArkUI';
    
  2. 获取窗口实例并读取属性:通过window.getLastWindow()获取当前应用窗口实例,然后访问其属性。

    // 获取窗口实例
    let windowClass = window.getLastWindow(this.context);
    
    // 获取状态栏高度
    let statusBarHeight: number = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height;
    
    // 获取导航栏高度(如果存在)
    let navigationBarHeight: number = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR).bottomRect.height;
    
    // 获取整个窗口的尺寸
    let windowRect = windowClass.getWindowProperties().windowRect;
    let windowWidth = windowRect.width;
    let windowHeight = windowRect.height;
    

关键对象解析:

  • window.getWindowAvoidArea(): 此方法返回系统为避免与关键UI(如状态栏、导航栏、刘海)重叠而建议的安全区域。它返回一个AvoidArea对象。

    • type: 使用AvoidAreaType枚举指定类型,例如:
      • TYPE_SYSTEM: 系统栏(顶部状态栏)。
      • TYPE_NAVIGATION_INDICATOR: 底部导航指示器区域。
      • TYPE_CUTOUT: 刘海屏切口区域。
    • topRect, bottomRect, leftRect, rightRect: 对应方向安全区域的矩形信息,包含height, width, position等。
  • window.getWindowProperties(): 此方法返回窗口的通用属性,如窗口矩形大小、亮度、沉浸式模式等。

简单示例(获取状态栏高度并设置Padding):

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

@Entry
@Component
struct Index {
  private context = getContext(this);
  @State statusBarHeight: number = 0;

  aboutToAppear() {
    let win = window.getLastWindow(this.context);
    this.statusBarHeight = win.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height;
  }

  build() {
    Column() {
      // 您的内容
      Text('Hello HarmonyOS Next')
        .fontSize(20)
    }
    .width('100%')
    .height('100%')
    .padding({ top: this.statusBarHeight }) // 将内容下移,避开状态栏
    .backgroundColor(Color.White)
  }
}

总结: HarmonyOS Next通过@kit.ArkUI中的window模块提供系统UI区域信息。主要使用getWindowAvoidArea()方法获取安全区域(包含状态栏、导航栏高度),使用getWindowProperties()获取窗口尺寸等属性。这是进行应用布局适配的正确原生方式。

回到顶部