floaty.window 如何唤醒配置窗口
floaty.window() 如何唤醒 hamibot脚本中的配置
自动化脚本 如何显示配置模式层
回答
在 Hamibot 中,floaty.window()
创建的悬浮窗本身不直接支持“唤醒配置窗口”的功能,但可以通过自定义布局和交互逻辑实现类似效果。以下是实现方式:
1. 定义悬浮窗布局
在 XML 布局中添加一个按钮或其他触发元素,用于唤醒配置窗口:
<frame gravity="center" bg="#FF0000">
<text id="text">悬浮文字</text>
<button id="configBtn" text="打开配置" />
</frame>
2. 通过事件触发配置逻辑
使用 ui.run
在 UI 线程中操作控件,例如点击按钮后显示配置内容:
var w = floaty.window(
<frame gravity="center" bg="#FF0000">
<text id="text">悬浮文字</text>
<button id="configBtn" text="打开配置" />
</frame>
);
// 点击按钮触发配置逻辑
w.configBtn.onClick(function() {
ui.run(function() {
// 示例:修改文本内容为配置界面
w.text.setText("配置窗口已唤醒");
// 可在此添加更多配置交互逻辑
});
});
3. 完全自定义配置窗口(推荐 floaty.rawWindow
)
如果需要更灵活的配置界面,使用 floaty.rawWindow()
创建原始悬浮窗,自行设计布局和交互:
var configWindow = floaty.rawWindow(
<frame gravity="center" bg="#77ff0000">
<vertical>
<text id="configTitle" text="配置设置" />
<edittext id="input" hint="输入内容" />
<button id="saveBtn" text="保存" />
</vertical>
</frame>
);
// 显示配置窗口
configWindow.show();
// 保存按钮逻辑
configWindow.saveBtn.onClick(function() {
var inputText = configWindow.input.getText();
// 处理保存逻辑
});
4. 保持悬浮窗持续显示
脚本结束时悬浮窗会自动关闭,若需长期运行,使用 setInterval
阻塞线程:
setInterval(() => {}, 1000);
关键点
- 所有 UI 操作需通过
ui.run
在主线程执行。 floaty.window()
提供基础控件(如关闭/调整大小),而floaty.rawWindow()
更适合自定义复杂配置界面。- 若需唤醒配置窗口,需通过按钮点击事件动态更新界面或显示新窗口。
补充回答 1
在 Hamibot 中,floaty.window()
创建的悬浮窗本身不直接支持“唤醒配置窗口”,但可以通过以下方式实现配置交互逻辑:
1. 在悬浮窗中添加配置控件
通过 XML 布局定义配置相关的控件(如输入框、按钮),并绑定事件处理函数:
var configWindow = floaty.window(
<frame gravity="center" bg="#FF0000">
<vertical padding="16">
<text id="configTitle" text="配置设置" />
<edittext id="configInput" hint="输入配置值" />
<button id="saveBtn" text="保存配置" />
</vertical>
</frame>
);
// 保存按钮事件
configWindow.saveBtn.click(function () {
var configValue = configWindow.configInput.getText();
// 将配置值写入 hamibot.env
hamibot.env.configKey = configValue;
toast("配置已保存: " + configValue);
});
2. 通过按钮唤醒配置界面
在主悬浮窗中添加一个按钮,点击后显示配置界面:
var mainWin = floaty.window(
<frame gravity="center" bg="#00FF00">
<vertical padding="16">
<text id="mainText" text="主界面" />
<button id="configBtn" text="打开配置" />
</vertical>
</frame>
);
// 配置按钮事件
mainWin.configBtn.click(function () {
// 显示配置界面
configWindow.show();
});
3. 读取并初始化配置值
从 hamibot.env
读取配置值,并动态更新悬浮窗内容:
// 初始化配置值
var savedConfig = hamibot.env.configKey || "默认值";
mainWin.mainText.setText("当前配置: " + savedConfig);
4. 保持悬浮窗持续显示
脚本执行结束后悬浮窗会自动关闭,需使用 setInterval
阻塞线程:
setInterval(() => {}, 1000);
关键点
- 配置数据存储:通过
hamibot.env
存储和读取配置值(如hamibot.env.configKey
)。 - UI 操作限制:所有 UI 操作(如修改文本、显示窗口)需通过
ui.run()
在主线程执行。 - 原始悬浮窗:若需更复杂的配置界面,可使用
floaty.rawWindow()
替代floaty.window()
。
补充回答 2
要在自动化脚本中显示配置模式层,需通过以下步骤实现:
-
打开在线编辑器
在脚本编辑界面点击「配置」按钮,进入配置模式。 -
定义配置表单
使用 JSON 格式构建表单结构,例如:{ "name": "TELEMETRY", "type": "checkbox", "label": "发送使用数据和错误报告", "help": "帮助开发者改进脚本" }
-
在代码中读取配置
通过hamibot.env
访问用户配置值:const { msg } = hamibot.env; toastLog(msg);
-
动态显示配置内容
根据配置项逻辑控制脚本行为,例如:if (hamibot.env.TELEMETRY) { hamibot.postMessage('数据上报已开启'); }
配置模式层的 UI 由平台自动渲染,你只需在脚本配置中定义字段规则即可。若需更复杂的交互,可结合 postMessage
实现动态反馈。