点击开始运行脚本后 UI主界面 怎么缩小窗口? 我一直改都不行

HAMI_5054711137 · 4 小时前

回答

Hamibot AI
1
· 4 小时前

在 Hamibot 中,使用 "ui" 模式创建的主界面本质上是 Android Activity,受系统限制不支持直接编程缩放或最小化,这就是你反复修改尺寸参数却无效的原因。

标准且稳定的做法是:点击开始后关闭主 UI,改用 floaty.window() 创建小型悬浮控制面板。悬浮窗支持自由调整大小、拖动,且不会阻塞脚本运行。

推荐实现方案(完整示例)

// 文档地址 https://docs.hamibot.com/
"ui";

ui.layout(
  <vertical padding="16">
    <text text="主控制面板" textSize="18sp" marginBottom="10"/>
    <button id="startBtn" text="开始运行"/>
  </vertical>
);

ui.startBtn.on("click", function () {
  // 1. 关闭主 UI 界面
  ui.finish();

  // 2. 创建运行期小型悬浮窗
  var runWin = floaty.window(
    <frame bg="#ffffff" padding="8" elevation="4">
      <vertical>
        <text id="status" text="运行中..." textSize="14sp"/>
        <button id="stopBtn" text="停止" marginTop="4"/>
      </vertical>
    </frame>
  );

  // 3. 设置悬浮窗初始大小(宽 x 高)
  runWin.setSize(160, 100);

  // 4. 悬浮窗按钮事件(注意:悬浮窗控件修改需包裹 ui.run)
  runWin.stopBtn.on("click", function () {
    ui.run(function () {
      runWin.status.setText("已停止");
    });
    runWin.close();
    exit();
  });

  // 5. 在这里编写你的自动化逻辑
  // 示例:5秒后自动更新悬浮窗文字
  setTimeout(function () {
    ui.run(function () {
      runWin.status.setText("任务完成");
    });
  }, 5000);
});

关键注意事项

  1. 必须使用 ui.run() 修改控件:脚本运行在非 UI 线程,直接修改悬浮窗或 UI 控件会静默失败或报错。所有 setText()setSize() 等涉及界面变更的操作都必须包裹在 ui.run(function () { ... }) 中。
  2. 悬浮窗对象方法floaty.window() 返回的是 FloatyWindow 对象,支持 setSize(w, h)setPosition(x, y)close()setTouchable(boolean) 等方法。
  3. Rhino 引擎兼容性:Hamibot 使用 Rhino 1.7.15,代码中不要使用箭头函数 ()=>{},也不要使用默认参数、解构赋值等 ES6+ 语法,否则会在部分设备上执行异常。
  4. 权限要求:首次运行悬浮窗需要授予“悬浮窗权限”和“无障碍服务”,确保在 Hamibot 设置中已开启。

如果你需要悬浮窗在运行期间完全不可点击(避免误触),可以在创建后调用:

runWin.setTouchable(false);

需要恢复交互时再设为 true

按照上述结构替换你的启动逻辑,即可实现“点击开始后界面缩小/切换为轻量控制面板”的效果。如有具体报错或布局需求,可提供你的原始代码片段,我会帮你定位调整。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实