HarmonyOS 鸿蒙Next中如何取得PC的标题栏高度

HarmonyOS 鸿蒙Next中如何取得PC的标题栏高度 我在做一个简易的绘图软件

这是在鸿蒙手机上的样子

screenshot_20250702_193049.jpg

上面含有时间电量的状态栏高度我已经透过getStatusBarHeightTOvp取得

cke_14642.png

用来在触控点坐标扣掉状态栏的高度

无标题图片

这样的话在手机上触控起来就是正常的了

但是部署到鸿蒙PC上之后,因为没有状态栏,变成标题栏

无标题图片

这是在鸿蒙PC上的样子

我鼠标拖拽物件时

触控点坐标高度就会有一个状态栏或是标题栏的误差

请问我要怎么判断软件是在手机上还是电脑上运行

在手机上时扣掉状态栏高度去运行

在电脑上时扣掉标题栏高度去运行

另外我查不到怎么取得标题栏的高度


更多关于HarmonyOS 鸿蒙Next中如何取得PC的标题栏高度的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

我们处理不同设备目前只是处理屏幕变化,更具媒体查询来实现的,暂时还没开发PC上的东西,这个是一个思路,楼主可以参考一下

breakpoint.mediaQueryListener = mediaQuery.matchMediaSync(condition)
if (breakpoint.mediaQueryListener.matches) {
  this.updateCurrentBreakpoint(breakpoint.name)
}

参考文档:[@system.mediaquery (媒体查询)-已停止维护的接口-ArkTS API-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-system-mediaquery#mediaquerymatchmedia)

更多关于HarmonyOS 鸿蒙Next中如何取得PC的标题栏高度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


您好 感谢你的回答 虽然我目前项目还没用到这个 但之前看视频教程大概知道这是监听视窗宽度去做UI的变化 当用户去拉动更改PC视窗大小的时候也会做到响应式变化。

但是目前遇到的问题是要监听鼠标点击的位置坐标 手机跟电脑的坐标原点都是最左上角

目前有两个方案:

  1. 分别读取手机状态栏及电脑标题栏的高度 再偵測使用者的设备是哪种进行分别扣除高度
  2. 所有设备取消状态栏跟标题栏 完全全屏

目前是想保留状态栏,但只查到怎么取得状态栏高度,其他的还在研究中。

你是想要获取状态栏的高度的话尝试用这个接口(window.getLastWindow),手机获取状态栏的高度就是通过这个接口实现的:

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

这样就可以拿到安全高度,

在HarmonyOS Next中获取PC标题栏高度,可以使用WindowManager类。具体方法是通过WindowManager.getWindow().getAttributes().height来获取。这个值包含了标题栏的高度。需要注意的是,不同设备或窗口模式可能会影响实际获取的高度值。如果是自定义标题栏,需要先设置WindowManager.LayoutParams.TYPE_APPLICATION类型。

在HarmonyOS Next中,可以通过以下方式解决您的问题:

  1. 判断设备类型: 使用ohos.deviceInfo模块的deviceType属性来区分设备类型:
import deviceInfo from '@ohos.deviceInfo';

const isPC = deviceInfo.deviceType === 'desktop';
  1. 获取标题栏高度: 对于PC设备,可以使用windowClassgetWindowAvoidArea方法获取窗口避让区域:
import window from '@ohos.window';

// 获取窗口实例后
const avoidArea = window.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
const titleBarHeight = avoidArea.topRect.height; // 标题栏高度
  1. 适配不同设备:
let offsetY = 0;
if (isPC) {
  offsetY = titleBarHeight;
} else {
  offsetY = getStatusBarHeightToVp(); // 您已有的方法
}

// 使用offsetY调整坐标

注意:PC端标题栏高度可能因窗口模式(全屏/窗口化)变化,建议在窗口尺寸变化时重新获取避让区域。

回到顶部