我想写一个功能,脚本运行后,桌面上会有3个窗口按钮,运行,配置,退出,点击配置后,会有一个参数配置界面弹出,输入选择完毕后点击确定,弹窗消失,记录该参数到脚本内
第 1 条补充
 · 4 个月前
参数配置窗口内包含 文本输入框 单选框 , 运行,配置,退出按钮是一直显示不会消失的,除非点击退出按钮,帮我优化下
第 2 条补充
 · 4 个月前
为什么运行后开始配置退出按钮只是显示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 生成,内容仅供参考