我想写一个功能,脚本运行后,桌面上会有3个窗口按钮,运行,配置,退出,点击配置后,会有一个参数配置界面弹出,输入选择完毕后点击确定,弹窗消失,记录该参数到脚本内
第 1 条补充
· 2 个月前
参数配置窗口内包含 文本输入框 单选框 , 运行,配置,退出按钮是一直显示不会消失的,除非点击退出按钮,帮我优化下
第 2 条补充
· 2 个月前
为什么运行后开始配置退出按钮只是显示1秒就消失了
回答
你可以使用 floaty.window
来创建悬浮窗界面,并监听按钮点击事件。以下是实现这个功能的代码示例:
// 文档地址 https://docs.hamibot.com/
var configValue = ""; // 存储配置参数
// 主悬浮窗
var mainWindow = floaty.window(
<vertical>
<button id="runBtn" text="运行"/>
<button id="configBtn" text="配置"/>
<button id="exitBtn" text="退出"/>
</vertical>
);
// 配置窗口 - 初始隐藏
var configWindow = floaty.window(
<vertical>
<input id="configInput" hint="请输入配置"/>
<button id="confirmBtn" text="确定"/>
</vertical>
);
configWindow.setVisibility("gone");
// 主窗口按钮事件
mainWindow.runBtn.click(function() {
toast("运行脚本");
// 执行你的运行逻辑
});
mainWindow.configBtn.click(function() {
configWindow.setVisibility("visible");
});
mainWindow.exitBtn.click(function() {
hamibot.exit();
});
// 配置窗口按钮事件
configWindow.confirmBtn.click(function() {
configValue = configWindow.configInput.getText();
toast("配置已保存: " + configValue);
configWindow.setVisibility("gone");
});
// 保持悬浮窗不被关闭
setInterval(function() {}, 1000);
这个脚本会创建两个悬浮窗:
- 主窗口有3个按钮:运行、配置、退出
- 配置窗口初始隐藏,点击"配置"按钮后才会显示
- 在配置窗口输入内容后点击"确定",配置参数会保存到
configValue
变量中,然后窗口隐藏
注意:
setVisibility("gone")
用于隐藏窗口- 配置参数保存在
configValue
变量中,后续可以在脚本中使用 setInterval
用于保持脚本运行
如果你的配置需要更复杂的选择控件,可以在配置窗口中使用<spinner>
等组件替代<input>
。
补充回答 1
// 文档地址 https://docs.hamibot.com/
var configValue = {
text: "",
option: 0
};
// 主悬浮窗 - 一直显示
var mainWindow = floaty.window(
<vertical>
<button id="runBtn" text="运行"/>
<button id="configBtn" text="配置"/>
<button id="exitBtn" text="退出"/>
</vertical>
);
// 参数配置窗口
var configWindow = floaty.window(
<vertical padding="16">
<text text="参数配置" textSize="18sp" marginBottom="8"/>
<input id="textInput" hint="输入文本参数"/>
<radio-group id="optionGroup">
<radio text="选项1" value="0" checked="true"/>
<radio text="选项2" value="1"/>
<radio text="选项3" value="2"/>
</radio-group>
<button id="saveBtn" text="保存配置" bg="#4CAF50"/>
</vertical>
);
configWindow.setVisibility("gone"); // 初始隐藏
// 主窗口事件处理
mainWindow.runBtn.click(function() {
toast("开始运行,当前配置:\n文本:" + configValue.text + "\n选项:" + configValue.option);
// 这里执行你的运行逻辑
});
mainWindow.configBtn.click(function() {
// 显示已保存的配置
configWindow.textInput.setText(configValue.text);
configWindow.optionGroup.check(configValue.option);
configWindow.setVisibility("visible");
});
mainWindow.exitBtn.click(function() {
mainWindow.close();
configWindow.close();
hamibot.exit();
});
// 配置窗口事件处理
configWindow.saveBtn.click(function() {
// 保存配置
configValue.text = configWindow.textInput.getText();
configValue.option = parseInt(configWindow.optionGroup.getCheckedRadioButton().getValue());
toast("配置已保存");
configWindow.setVisibility("gone");
});
// 保持脚本运行
setInterval(function(){}, 1000);
优化后的脚本特点:
-
配置窗口改进:
- 包含文本输入框(
<input>
)和单选按钮组(<radio-group>
) - 添加了标题和适当间距
- 包含文本输入框(
-
参数存储优化:
- 使用对象
configValue
存储两种类型的配置 - 文本参数在
text
属性 - 单选选项在
option
属性
- 使用对象
-
窗口管理:
- 主窗口始终显示
- 配置窗口打开时会显示上次保存的配置
- 只有点击退出才会完全关闭所有窗口
-
运行时可以访问保存的配置:
- 点击运行按钮时会toast显示当前配置
- 配置保存在全局变量中,随时可用
-
UI优化:
- 为保存按钮添加了绿色背景
- 添加了适当的间距布局
要修改配置选项内容或添加更多配置项,只需修改configWindow的布局部分即可。
补充回答 2
这个问题通常是由于脚本线程没有保持运行导致的。在Hamibot中,悬浮窗需要脚本保持运行才能持续显示。以下是改进后的代码,解决了按钮显示一秒消失的问题:
// 文档地址 https://docs.hamibot.com/
var configValue = {
text: "",
option: 0
};
// 主悬浮窗 - 使用rawWindow确保持久显示
var mainWindow = floaty.rawWindow(
<vertical bg="#FFFFFF" padding="8">
<button id="runBtn" text="运行" w="120" h="60"/>
<button id="configBtn" text="配置" w="120" h="60"/>
<button id="exitBtn" text="退出" w="120" h="60"/>
</vertical>
);
// 使窗口可以被拖动
mainWindow.setTouchable(true);
mainWindow.setPosition(100, 100);
// 配置窗口
var configWindow = floaty.rawWindow(
<vertical bg="#FFFFFF" padding="16" visibility="gone">
<text text="参数配置" textSize="18sp" marginBottom="16"/>
<input id="textInput" hint="输入文本参数" marginBottom="16"/>
<radio-group id="optionGroup" marginBottom="16">
<radio text="选项1" value="0" checked="true"/>
<radio text="选项2" value="1"/>
<radio text="选项3" value="2"/>
</radio-group>
<button id="saveBtn" text="保存配置" bg="#4CAF50" w="160" h="60"/>
</vertical>
);
configWindow.setPosition(200, 200);
// 主窗口事件处理
mainWindow.runBtn.click(function() {
ui.run(function(){
toast("运行中\n文本:" + configValue.text + "\n选项:" + configValue.option);
});
// 这里添加你的运行逻辑
});
mainWindow.configBtn.click(function() {
ui.run(function(){
configWindow.textInput.setText(configValue.text);
configWindow.optionGroup.check(configValue.option);
configWindow.setVisibility("visible");
});
});
mainWindow.exitBtn.click(function() {
ui.run(function(){
mainWindow.close();
configWindow.close();
});
hamibot.exit();
});
// 配置窗口事件处理
configWindow.saveBtn.click(function() {
ui.run(function(){
configValue.text = configWindow.textInput.getText();
configValue.option = parseInt(configWindow.optionGroup.getCheckedRadioButton().getValue());
toast("配置已保存");
configWindow.setVisibility("gone");
});
});
// 关键改动:使用setInterval保持脚本运行
var keepAlive = setInterval(function(){}, 1000);
改进点说明:
- 改用
floaty.rawWindow
代替floaty.window
,因为rawWindow更稳定 - 为所有UI操作添加了
ui.run
包裹,确保在UI线程执行 - 添加了
setInterval
保持脚本持续运行 - 设置窗口初始位置和大小,确保可见性
- 为按钮添加了固定尺寸,使布局更美观
- 窗口设置为可触摸和可拖动
如果仍然出现问题,请检查:
- 是否已授予Hamibot悬浮窗权限
- 设备是否有其他应用限制悬浮窗显示
- 尝试重启Hamibot服务或设备
ℹ️ 本回答由 AI 生成,内容仅供参考