setScreenMetrics(width, height)
width <Number> 屏幕宽度,单位像素
height <Number> 屏幕高度,单位像素
设置脚本坐标点击所适合的屏幕宽高。如果脚本运行时,屏幕宽度不一致会自动放缩坐标。
例如在 1920*1080 的设备中,某个操作的代码为,这个方法,我是用1240×2772这个比例来进行调试的,但是在1440×3168这个分辨率的手机就点击不了,偶尔点击不到,这是为什么,兼容性没做好?更多尺寸的我还没试
回答
文档地址 https://docs.hamibot.com/
你遇到的问题很可能不是因为 setScreenMetrics() 的兼容性没做好,而是使用方式或理解上存在一些偏差。
setScreenMetrics(width, height) 的作用是设定脚本设计时所依据的原始屏幕分辨率。当你调用这个函数后,Hamibot 会根据当前设备的实际屏幕尺寸,对后续所有基于坐标的操作(如 click(x, y)、longClick()、swipe() 等)进行自动缩放。
例如:
setScreenMetrics(1080, 1920);
click(540, 960); // 在 1080×1920 设备点击中心
当这段脚本运行在 1440×3168 的设备上时,click(540, 960) 实际会被换算为:
- x: (540 / 1080) * 1440 = 720
- y: (960 / 1920) * 3168 = 1584
也就是实际点击了 (720, 1584) 这个位置,理论上应该是正确的中心点。
你说你在 1240×2772 上调试,但运行在 1440×3168 上偶尔点击不到,可能的原因如下:
✅ 正确用法示例
你应该将 setScreenMetrics() 设置为你开发脚本时所用设备的分辨率,即:
setScreenMetrics(1240, 2772); // 告诉 Hamibot:我是按这个分辨率写的坐标
然后你在代码中使用的 click(x, y) 坐标必须是在 1240×2772 屏幕上获取的真实坐标。
比如你想点击某个按钮,它在 1240×2772 设备上的坐标是 (620, 800),那么写:
click(620, 800);
在 1440×3168 设备上,Hamibot 会自动计算:
- x = (620 / 1240) * 1440 ≈ 720
- y = (800 / 2772) * 3168 ≈ 916
并点击 (720, 916),只要界面布局比例一致,就能点中。
❌ 可能导致问题的原因
-
没有正确设置 setScreenMetrics
- 如果你忘了调用
setScreenMetrics(1240, 2772),Hamibot 默认按 1080×1920 计算缩放,会导致坐标严重偏移。
- 如果你忘了调用
-
不同设备 UI 布局不一致
- 即使分辨率接近,不同手机厂商的系统 UI(状态栏、导航栏高度、字体缩放等)可能导致控件位置偏移。
- 比如一个按钮在小屏上位于中间,在大屏上可能被拉伸或重新排版,导致“比例相同但实际不可点”。
-
动态内容或加载延迟
- 页面未完全加载就执行点击,目标区域尚未出现,导致点击无效。
- 解决方法:加入等待逻辑,例如
waitForActivity(),id("xxx").exists(), 或图像识别辅助定位。
-
横竖屏方向或安全区域影响(尤其是全面屏)
- 高分辨率手机多为全面屏,有更大的圆角、刘海、底部安全区,可能裁剪了可操作区域。
- 注意检查点击坐标是否落在这些不可触控的安全区域边缘。
-
坐标获取方式不准确
- 确保你是通过开发者选项中的“指针位置”或 Hamibot 的“记录”功能,在 真实设备(1240×2772) 上取到的坐标。
- 不要从截图工具或其他模拟器上估算坐标。
✅ 推荐最佳实践
// 第一步:明确声明设计基准分辨率
setScreenMetrics(1240, 2772);
// 第二步:确保页面已加载
sleep(2000); // 或更优的方式:等待某个控件出现
if (!text("首页").exists()) {
toast("页面未加载");
exit();
}
// 第三步:执行点击(这里的坐标是