回答
在 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);
});
关键注意事项
- 必须使用
ui.run()修改控件:脚本运行在非 UI 线程,直接修改悬浮窗或 UI 控件会静默失败或报错。所有setText()、setSize()等涉及界面变更的操作都必须包裹在ui.run(function () { ... })中。 - 悬浮窗对象方法:
floaty.window()返回的是FloatyWindow对象,支持setSize(w, h)、setPosition(x, y)、close()、setTouchable(boolean)等方法。 - Rhino 引擎兼容性:Hamibot 使用 Rhino 1.7.15,代码中不要使用箭头函数
()=>{},也不要使用默认参数、解构赋值等 ES6+ 语法,否则会在部分设备上执行异常。 - 权限要求:首次运行悬浮窗需要授予“悬浮窗权限”和“无障碍服务”,确保在 Hamibot 设置中已开启。
如果你需要悬浮窗在运行期间完全不可点击(避免误触),可以在创建后调用:
runWin.setTouchable(false);
需要恢复交互时再设为 true。
按照上述结构替换你的启动逻辑,即可实现“点击开始后界面缩小/切换为轻量控制面板”的效果。如有具体报错或布局需求,可提供你的原始代码片段,我会帮你定位调整。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实