HarmonyOS 鸿蒙Next中获取屏幕高度的结果是包括状态栏和操作栏的么?

HarmonyOS 鸿蒙Next中获取屏幕高度的结果是包括状态栏和操作栏的么?

通过 以下方法获取的屏幕高度 包括状态栏和操作栏么?

let displayClass = display.getDefaultDisplaySync();
this.displayHeight = px2vp(displayClass.height);
10 回复
  1. 获取到的屏幕的数值是整个设备屏幕的数值: ohos.display(屏幕属性)-图形图像-仓颉API-API参考 - 华为HarmonyOS开发者

  2. 楼主想要测试的话可以使用沉浸式模式增加一个全屏组件,使用onClick打印出整个组件的属性来对比

更多关于HarmonyOS 鸿蒙Next中获取屏幕高度的结果是包括状态栏和操作栏的么?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


标题

这是第一段内容。

这是第二段内容。

通过display.getDefaultDisplaySync().height获取的屏幕高度包含状态栏和操作栏!

但需要注意一下2点-----

1 该方法返回的是屏幕的物理分辨率总高度(单位为px),包含状态栏、导航栏等系统预留区域。该数值反映的是屏幕的实际像素高度,不区分是否被系统占用。

2 楼主给的示例代码中通过px2vp将像素单位转换为虚拟像素(vp),转换后的数值为屏幕总高度的vp值,但不会自动扣除系统栏高度。vp单位会根据屏幕密度自动适配,但整体比例仍包含系统栏。

【背景知识】

DisPlay:屏幕属性提供管理显示设备的一些基础能力,包括获取默认显示设备的信息,获取所有显示设备的信息以及监听显示设备的插拔行为。获取屏幕属性信息需先使用getAllDisplays()getDefaultDisplaySync()中的任一方法获取到Display实例,再通过此实例调用对应方法。

【解决方案】

通过display.getDefaultDisplaySync获取当前的display对象,display对象包含宽高、密度、刷新率等属性。 示例代码如下:

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

let displayObj: display.Display | null = null;
// 获取display对象
displayObj = display.getDefaultDisplaySync();
// 获取屏幕宽度
let width: number = displayObj.width
// 获取屏幕高度
let height: number = displayObj.height
// 获取屏幕密度
let densityPixels: number = displayObj.densityPixels
// 获取屏幕刷新率
let refreshRate: number = displayObj.refreshRate
// 获取其他属性信息同上

【常见FAQ】

Q:获取屏幕高度的结果包括状态栏和操作栏吗? A:通过display.getDefaultDisplaySync()返回默认的Display对象,而Display对象的height显示设备的屏幕高度,单位为px,该参数为整数,会包含状态栏和操作栏。

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

是包括了的

获取的是整个屏幕的全部高度

height Int32
显示设备的高度,单位为像素,该参数应为整数。

是包括屏幕高度的!

下面方法是获取状态栏、导航栏高度的!this.windowClass是获取到的当前的主窗口-getMainWindow

// 获取导航条和状态栏高度
let navigationIndicatorAvoidArea = this.windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR) // 表示导航条区域
let systemAvoidArea = this.windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM) // 表示系统默认区域。一般包括状态栏、导航栏,各设备系统定义可能不同。
AppStorage.setOrCreate<number>("bottomNavHeight", navigationIndicatorAvoidArea.bottomRect.height)
AppStorage.setOrCreate<number>("topBarHeight", systemAvoidArea.topRect.height)

在HarmonyOS Next中,通过window.getTopWindow().getWindowProperties().windowRect.height获取的屏幕高度默认包含状态栏和操作栏。若需要获取可用显示区域高度(不包含系统栏),应使用window.getTopWindow().getWindowProperties().availableRect.height

在HarmonyOS Next中,通过display.getDefaultDisplaySync().height获取的屏幕高度是包含状态栏和操作栏的完整屏幕高度。该方法返回的是设备的物理屏幕总高度(单位为像素),包括系统UI区域。

如果需要获取应用可用的内容区域高度(不包含状态栏和操作栏),应该使用窗口管理器相关API来获取窗口的可用区域尺寸。例如:

let windowClass = window.getLastWindow(this.context);
let windowRect = windowClass.getWindowProperties().windowRect;
let availableHeight = px2vp(windowRect.height);

这两种方式获取的高度值会有差异,前者是物理屏幕总高度,后者是应用可用区域高度。

回到顶部