如何创建一个悬浮框按钮,执行开始脚本和结束脚本,并且如何发送Toast显示出来。
如何让创建的的悬浮框可以拖动呢
创建悬浮框按钮点击事件运行auto函数直接闪退了
回答
文档地址 https://docs.hamibot.com/
你可以通过 floaty.window
创建一个带有按钮的悬浮框,并使用 .click()
方法为按钮绑定点击事件。点击按钮后可以执行脚本任务并用 toast()
显示状态。
以下是一个完整示例代码:
// 定义任务控制变量
var handlers = {
running: false,
start: function () {
if (this.running) return;
this.running = true;
toast('开始执行脚本');
// 在这里添加你要执行的任务代码
},
stop: function () {
if (!this.running) return;
this.running = false;
toast('结束执行脚本');
// 在这里添加停止任务的逻辑
}
};
// 创建悬浮窗
var floatyWin = floaty.window(
<vertical padding="16">
<button id="startBtn" text="开始脚本" bg="#4CAF50"/>
<button id="stopBtn" text="结束脚本" bg="#F44336" enabled="false"/>
</vertical>
);
// 开始按钮点击事件
floatyWin.startBtn.click(function () {
handlers.start();
ui.run(function () {
floatyWin.startBtn.enabled = false;
floatyWin.stopBtn.enabled = true;
});
});
// 结束按钮点击事件
floatyWin.stopBtn.click(function () {
handlers.stop();
ui.run(function () {
floatyWin.startBtn.enabled = true;
floatyWin.stopBtn.enabled = false;
});
});
// 保持悬浮窗不关闭
setInterval(function () {}, 1000);
功能说明:
- 点击 “开始脚本” 按钮,会调用
handlers.start()
并显示toast("开始执行脚本")
。 - 点击 “结束脚本” 按钮,会调用
handlers.stop()
并显示toast("结束执行脚本")
。 - “开始”按钮按下后禁用自身,“结束”按钮启用;反之亦然。
你可以在注释标记的位置添加具体的脚本任务逻辑和停止逻辑。
补充回答 1
文档地址 https://docs.hamibot.com/
在 Hamibot 中,使用 floaty.window()
创建的悬浮窗默认已经支持拖动功能,不需要额外设置。如果你使用的是 floaty.rawWindow()
创建的悬浮窗,则不会自带拖动功能。
如果你想创建一个可以拖动的悬浮框,请使用 floaty.window()
并传入你的布局:
var window = floaty.window(
<vertical gravity="center" bg="#FFFFFF" padding="16">
<text id="label" text="可拖动的悬浮框" textColor="#000000"/>
<button id="btnClose" text="关闭" layout_gravity="center"/>
</vertical>
);
// 点击关闭按钮时关闭悬浮框
window.btnClose.click(function () {
window.close();
});
这段代码会创建一个可以拖动的垂直布局悬浮框,你可以直接拖动整个窗口。
如果还需要自定义调整大小或拖动行为,请参考 floaty.window
或 floaty.rawWindow
的更多选项。
补充回答 2
文档地址 https://docs.hamibot.com/
如果你在悬浮框按钮的点击事件中调用 auto()
函数后脚本立即闪退,可能是因为 auto()
被调用时没有正确启动无障碍服务,或者当前脚本环境不支持自动开启无障碍。
解决方案
✅ 1. 确保手动开启了无障碍服务
不要依赖运行时自动开启,建议你先在 Hamibot 应用中手动开启无障碍服务:
- 打开 Hamibot App
- 进入【我的】>【无障碍设置】
- 启用对应脚本或全局无障碍服务
✅ 2. 使用前检查是否已启用
你可以在点击按钮执行其他逻辑前,判断是否已经启用无障碍服务:
floatyWin.startBtn.click(function () {
if (!auto.service) {
toast("请先开启无障碍服务");
return;
}
// 正常执行脚本逻辑
// ...
});
这样可以避免因为未开启无障碍导致的崩溃。
✅ 3. 避免在 UI 回调中直接调用 auto()
有些版本中,在按钮回调中直接调用 auto();
可能会导致异常。建议使用如下方式:
floatyWin.startBtn.click(function () {
if (!auto.service) {
auto();
// 如果 auto() 成功返回 true,说明用户允许了无障碍
if (auto.service) {
toast("无障碍已启动");
} else {
toast("请手动开启无障碍");
}
} else {
toast("无障碍已经开启");
// 开始你的自动化任务
}
});
✅ 4. 检查 Hamibot 版本
确保你使用的 Hamibot 版本是 最新稳定版,旧版本可能存在兼容性问题。
总结处理步骤:
- 尽量不要依赖点击按钮时调用
auto()
自动打开无障碍,而是提前手动开启 - 在执行自动化操作前检查
auto.service
- 不要假设
auto()
调用一定会成功,要添加失败提示逻辑 - 更新 Hamibot 到最新版本
如果仍然闪退,请查看 Hamibot 的日志(可在 Hamibot App 内查看)定位具体错误信息。