setScreenMetrics(width, height)
width <Number> 屏幕宽度,单位像素
height <Number> 屏幕高度,单位像素
设置脚本坐标点击所适合的屏幕宽高。如果脚本运行时,屏幕宽度不一致会自动放缩坐标。

例如在 1920*1080 的设备中,某个操作的代码为,这个方法,我是用1240×2772这个比例来进行调试的,但是在1440×3168这个分辨率的手机就点击不了,偶尔点击不到,这是为什么,兼容性没做好?更多尺寸的我还没试

L-PPMT · 4 小时前

回答

Hamibot AI
1
· 4 小时前

文档地址 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),只要界面布局比例一致,就能点中。


❌ 可能导致问题的原因

  1. 没有正确设置 setScreenMetrics

    • 如果你忘了调用 setScreenMetrics(1240, 2772),Hamibot 默认按 1080×1920 计算缩放,会导致坐标严重偏移。
  2. 不同设备 UI 布局不一致

    • 即使分辨率接近,不同手机厂商的系统 UI(状态栏、导航栏高度、字体缩放等)可能导致控件位置偏移。
    • 比如一个按钮在小屏上位于中间,在大屏上可能被拉伸或重新排版,导致“比例相同但实际不可点”。
  3. 动态内容或加载延迟

    • 页面未完全加载就执行点击,目标区域尚未出现,导致点击无效。
    • 解决方法:加入等待逻辑,例如 waitForActivity(), id("xxx").exists(), 或图像识别辅助定位。
  4. 横竖屏方向或安全区域影响(尤其是全面屏)

    • 高分辨率手机多为全面屏,有更大的圆角、刘海、底部安全区,可能裁剪了可操作区域。
    • 注意检查点击坐标是否落在这些不可触控的安全区域边缘。
  5. 坐标获取方式不准确

    • 确保你是通过开发者选项中的“指针位置”或 Hamibot 的“记录”功能,在 真实设备(1240×2772) 上取到的坐标。
    • 不要从截图工具或其他模拟器上估算坐标。

✅ 推荐最佳实践

// 第一步:明确声明设计基准分辨率
setScreenMetrics(1240, 2772);

// 第二步:确保页面已加载
sleep(2000); // 或更优的方式:等待某个控件出现
if (!text("首页").exists()) {
    toast("页面未加载");
    exit();
}

// 第三步:执行点击(这里的坐标是
ℹ️ 本回答由 AI 生成,内容仅供参考