HarmonyOS 鸿蒙Next中如何取得PC的标题栏高度
HarmonyOS 鸿蒙Next中如何取得PC的标题栏高度 我在做一个简易的绘图软件
这是在鸿蒙手机上的样子
上面含有时间电量的状态栏高度我已经透过getStatusBarHeightTOvp取得
用来在触控点坐标扣掉状态栏的高度
这样的话在手机上触控起来就是正常的了
但是部署到鸿蒙PC上之后,因为没有状态栏,变成标题栏
这是在鸿蒙PC上的样子
我鼠标拖拽物件时
触控点坐标高度就会有一个状态栏或是标题栏的误差
请问我要怎么判断软件是在手机上还是电脑上运行
在手机上时扣掉状态栏高度去运行
在电脑上时扣掉标题栏高度去运行
另外我查不到怎么取得标题栏的高度
更多关于HarmonyOS 鸿蒙Next中如何取得PC的标题栏高度的实战教程也可以访问 https://www.itying.com/category-93-b0.html
您好 感谢你的回答 虽然我目前项目还没用到这个 但之前看视频教程大概知道这是监听视窗宽度去做UI的变化 当用户去拉动更改PC视窗大小的时候也会做到响应式变化。
但是目前遇到的问题是要监听鼠标点击的位置坐标 手机跟电脑的坐标原点都是最左上角
目前有两个方案:
- 分别读取手机状态栏及电脑标题栏的高度 再偵測使用者的设备是哪种进行分别扣除高度
- 所有设备取消状态栏跟标题栏 完全全屏
目前是想保留状态栏,但只查到怎么取得状态栏高度,其他的还在研究中。
你是想要获取状态栏的高度的话尝试用这个接口(window.getLastWindow
),手机获取状态栏的高度就是通过这个接口实现的:
这样就可以拿到安全高度,
在HarmonyOS Next中获取PC标题栏高度,可以使用WindowManager
类。具体方法是通过WindowManager.getWindow().getAttributes().height
来获取。这个值包含了标题栏的高度。需要注意的是,不同设备或窗口模式可能会影响实际获取的高度值。如果是自定义标题栏,需要先设置WindowManager.LayoutParams.TYPE_APPLICATION
类型。
在HarmonyOS Next中,可以通过以下方式解决您的问题:
- 判断设备类型:
使用
ohos.deviceInfo
模块的deviceType
属性来区分设备类型:
import deviceInfo from '@ohos.deviceInfo';
const isPC = deviceInfo.deviceType === 'desktop';
- 获取标题栏高度:
对于PC设备,可以使用
windowClass
的getWindowAvoidArea
方法获取窗口避让区域:
import window from '@ohos.window';
// 获取窗口实例后
const avoidArea = window.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
const titleBarHeight = avoidArea.topRect.height; // 标题栏高度
- 适配不同设备:
let offsetY = 0;
if (isPC) {
offsetY = titleBarHeight;
} else {
offsetY = getStatusBarHeightToVp(); // 您已有的方法
}
// 使用offsetY调整坐标
注意:PC端标题栏高度可能因窗口模式(全屏/窗口化)变化,建议在窗口尺寸变化时重新获取避让区域。