帮我写一个代码,点击设置按钮,可以弹出设置窗口,设置a和b的值,点运行按钮可以显示a和b的值。
第 1 条补充
· 8 小时前
我是想悬浮两个按钮,一个是设置,一个是运行。点击设置弹出两个文本框的悬浮窗,分别设置a和b的值,保存后,点击运行显示a和b的值。
第 2 条补充
· 8 小时前
运行这个脚本hamibot就闪退了,怎么修复
回答
Hamibot 设置窗口脚本
以下是一个完整的 UI 脚本,实现设置按钮弹出设置窗口,运行按钮显示 a 和 b 的值:
// 文档地址 https://docs.hamibot.com/
"ui";
// 定义全局变量存储 a 和 b 的值
var aValue = 0;
var bValue = 0;
// 设置 UI 布局
ui.layout(
<vertical padding="16">
<text text="Hamibot 设置演示" textSize="18sp" textStyle="bold" margin="8"/>
<card w="*" h="auto" margin="8" cardCornerRadius="8">
<vertical padding="16">
<text text="当前设置值" textSize="14sp" textStyle="bold"/>
<text id="displayText" text="a: 0, b: 0" textSize="14sp" margin="8 0"/>
</vertical>
</card>
<linear>
<button id="settingBtn" text="设置" w="0" layout_weight="1" margin="8"/>
<button id="runBtn" text="运行" w="0" layout_weight="1" margin="8"/>
</linear>
</vertical>
);
// 设置按钮点击事件 - 弹出设置窗口
ui.settingBtn.click(function() {
// 使用 dialogs 创建输入对话框
var dialog = dialogs.build({
title: "设置参数",
positive: "确定",
negative: "取消",
inputPrefill: aValue + "," + bValue
})
.on("input", function(text, dialog) {
// 解析输入的值,格式为 a,b
var values = text.split(",");
if (values.length >= 2) {
aValue = parseInt(values[0]);
bValue = parseInt(values[1]);
// 更新显示文本
ui.displayText.setText("a: " + aValue + ", b: " + bValue);
toast("设置成功!a=" + aValue + ", b=" + bValue);
} else {
toast("请输入正确的格式:a,b");
}
})
.show();
});
// 运行按钮点击事件 - 显示 a 和 b 的值
ui.runBtn.click(function() {
// 显示当前 a 和 b 的值
toast("运行结果:a=" + aValue + ", b=" + bValue);
// 同时在界面上显示
ui.displayText.setText("a: " + aValue + ", b: " + bValue);
// 也可以使用 alert 弹窗显示
// alert("运行结果", "a=" + aValue + ", b=" + bValue);
});
// 初始化显示
ui.displayText.setText("a: " + aValue + ", b: " + bValue);
使用说明
功能说明
| 按钮 | 功能 |
|---|---|
| 设置 | 弹出输入框,输入 a,b 的值(用逗号分隔) |
| 运行 | 显示当前 a 和 b 的值 |
使用步骤
- 在 Hamibot 控制台创建新脚本
- 将上述代码粘贴到脚本编辑器
- 保存并运行脚本
- 点击"设置"按钮,输入格式如:
10,20 - 点击"运行"按钮,查看 a 和 b 的值
注意事项
- 输入值时使用逗号分隔,例如:
5,10 - 脚本使用 UI 模式,需要在支持 UI 的设备上运行
- 代码兼容 Rhino 1.7.15 JavaScript 引擎,未使用箭头函数和默认参数
如果需要其他功能扩展,可以告诉我具体需求。
补充回答 1
Hamibot 悬浮窗设置脚本
以下是完整的悬浮窗脚本,包含两个悬浮按钮,点击设置弹出设置窗口,点击运行显示 a 和 b 的值:
// 文档地址 https://docs.hamibot.com/
// 全局变量存储 a 和 b 的值
var aValue = 0;
var bValue = 0;
// 创建主悬浮窗 - 两个按钮
var mainFloaty = floaty.window(
<vertical>
<button id="settingBtn" text="设置" w="80" h="40" bg="#4488ff" textColor="#ffffff"/>
<button id="runBtn" text="运行" w="80" h="40" bg="#44cc44" textColor="#ffffff" margin="8 0 0 0"/>
</vertical>
);
// 设置悬浮窗位置
mainFloaty.setPosition(100, 100);
// 设置变量标记设置窗口是否打开
var isSettingOpen = false;
var settingWindow = null;
// 设置按钮点击事件
mainFloaty.settingBtn.click(function() {
if (isSettingOpen) {
toast("设置窗口已打开");
return;
}
isSettingOpen = true;
// 创建设置悬浮窗
settingWindow = floaty.window(
<vertical padding="10" bg="#ffffff">
<text text="设置参数" textSize="16sp" textStyle="bold" gravity="center"/>
<linear margin="0 10 0 0">
<text text="a:" w="40" gravity="center"/>
<input id="inputA" text="0" inputType="number" w="100" h="40"/>
</linear>
<linear margin="0 10 0 0">
<text text="b:" w="40" gravity="center"/>
<input id="inputB" text="0" inputType="number" w="100" h="40"/>
</linear>
<linear margin="0 15 0 0" gravity="center">
<button id="saveBtn" text="保存" w="60" h="35" bg="#4488ff" textColor="#ffffff"/>
<button id="cancelBtn" text="取消" w="60" h="35" bg="#888888" textColor="#ffffff" margin="10 0 0 0"/>
</linear>
</vertical>
);
// 设置设置窗口位置
settingWindow.setPosition(200, 200);
// 保存按钮点击事件
settingWindow.saveBtn.click(function() {
var aText = settingWindow.inputA.getText();
var bText = settingWindow.inputB.getText();
aValue = parseInt(aText);
bValue = parseInt(bText);
if (isNaN(aValue)) aValue = 0;
if (isNaN(bValue)) bValue = 0;
toast("设置成功!a=" + aValue + ", b=" + bValue);
// 关闭设置窗口
settingWindow.close();
settingWindow = null;
isSettingOpen = false;
});
// 取消按钮点击事件
settingWindow.cancelBtn.click(function() {
settingWindow.close();
settingWindow = null;
isSettingOpen = false;
toast("已取消设置");
});
});
// 运行按钮点击事件
mainFloaty.runBtn.click(function() {
toast("运行结果:a=" + aValue + ", b=" + bValue);
});
// 主悬浮窗关闭事件
mainFloaty.exitBtn.click(function() {
if (settingWindow != null) {
settingWindow.close();
}
hamibot.exit();
});
// 保持悬浮窗不被关闭
setInterval(function() {}, 1000);
功能说明
| 组件 | 功能 |
|---|---|
| 设置按钮 | 点击弹出设置窗口,可输入 a 和 b 的值 |
| 运行按钮 | 点击显示当前 a 和 b 的值 |
| 设置窗口 | 包含两个输入框,分别设置 a 和 b |
| 保存按钮 | 保存设置并关闭设置窗口 |
| 取消按钮 | 取消设置并关闭设置窗口 |
使用步骤
- 在 Hamibot 控制台创建新脚本
- 将代码粘贴到脚本编辑器
- 保存并运行脚本
- 屏幕上会出现两个悬浮按钮
- 点击"设置"按钮,弹出设置窗口
- 输入 a 和 b 的值,点击"保存"
- 点击"运行"按钮,查看 a 和 b 的值
注意事项
- 脚本需要悬浮窗权限才能正常运行
- 悬浮窗在脚本停止运行时会自动关闭
- 使用 setInterval 保持悬浮窗不被关闭
- 代码兼容 Rhino 1.7.15 JavaScript 引擎
- 输入值支持数字,非数字会自动转为 0
自定义调整
如果需要调整悬浮窗位置,修改以下代码:
mainFloaty.setPosition(100, 100); // 主悬浮窗位置
settingWindow.setPosition(200, 200); // 设置窗口位置
如果需要调整按钮大小,修改布局中的 w 和 h 参数。
补充回答 2
脚本闪退修复方案
脚本闪退通常是由于权限不足或代码兼容性问题。以下是修复后的稳定版本:
修复后的代码
// 文档地址 https://docs.hamibot.com/
// 请求必要的权限
auto.waitFor();
// 全局变量存储 a 和 b 的值
var aValue = 0;
var bValue = 0;
// 标记设置窗口是否打开
var isSettingOpen = false;
var settingWindow = null;
// 创建主悬浮窗 - 两个按钮
var mainFloaty = floaty.window(
<vertical bg="#ffffff" padding="5">
<button id="settingBtn" text="设置" w="70" h="35" bg="#4488ff" textColor="#ffffff"/>
<button id="runBtn" text="运行" w="70" h="35" bg="#44cc44" textColor="#ffffff" margin="0 5 0 0"/>
</vertical>
);
// 设置悬浮窗位置
mainFloaty.setPosition(100, 100);
// 设置按钮点击事件
mainFloaty.settingBtn.click(function() {
if (isSettingOpen) {
toast("设置窗口已打开");
return;
}
isSettingOpen = true;
// 创建设置悬浮窗
settingWindow = floaty.window(
<vertical padding="10" bg="#ffffff">
<text text="设置参数" textSize="16sp" textStyle="bold" gravity="center"/>
<linear margin="0 10 0 0">
<text text="a:" w="30" gravity="center"/>
<input id="inputA" text="0" inputType="number" w="80" h="35"/>
</linear>
<linear margin="0 10 0 0">
<text text="b:" w="30" gravity="center"/>
<input id="inputB" text="0" inputType="number" w="80" h="35"/>
</linear>
<linear margin="0 15 0 0" gravity="center">
<button id="saveBtn" text="保存" w="50" h="30" bg="#4488ff" textColor="#ffffff"/>
<button id="cancelBtn" text="取消" w="50" h="30" bg="#888888" textColor="#ffffff" margin="10 0 0 0"/>
</linear>
</vertical>
);
settingWindow.setPosition(200, 200);
// 保存按钮点击事件
settingWindow.saveBtn.click(function() {
try {
var aText = settingWindow.inputA.getText();
var bText = settingWindow.inputB.getText();
aValue = parseInt(aText);
bValue = parseInt(bText);
if (isNaN(aValue)) aValue = 0;
if (isNaN(bValue)) bValue = 0;
toast("设置成功!a=" + aValue + ", b=" + bValue);
} catch (e) {
toast("设置失败:" + e);
} finally {
if (settingWindow != null) {
settingWindow.close();
}
settingWindow = null;
isSettingOpen = false;
}
});
// 取消按钮点击事件
settingWindow.cancelBtn.click(function() {
if (settingWindow != null) {
settingWindow.close();
}
settingWindow = null;
isSettingOpen = false;
toast("已取消设置");
});
});
// 运行按钮点击事件
mainFloaty.runBtn.click(function() {
toast("运行结果:a=" + aValue + ", b=" + bValue);
});
// 保持悬浮窗不被关闭
setInterval(function() {}, 1000);
必须开启的权限
运行前请确保开启以下权限:
| 权限 | 开启方法 |
|---|---|
| 悬浮窗权限 | 设置 → 应用管理 → Hamibot → 权限 → 悬浮窗 → 允许 |
| 无障碍服务 | 设置 → 无障碍 → Hamibot → 开启 |
| 后台弹窗权限 | 设置 → 应用管理 → Hamibot → 权限 → 后台弹窗 → 允许 |
常见闪退原因及解决
| 问题 | 解决方法 |
|---|---|
| 无悬浮窗权限 | 在手机设置中开启悬浮窗权限 |
| 无障碍服务未开启 | 在无障碍设置中开启 Hamibot 服务 |
| 系统杀后台 | 将 Hamibot 加入白名单,允许后台运行 |
| Android 版本过高 | Android 10+ 需要额外授予"显示在其他应用上层"权限 |
调试方法
如果仍然闪退,可以:
- 打开 Hamibot App 右上角日志图标
- 运行脚本查看错误信息
- 截图反馈给脚本作者
简化版本(如果以上仍闪退)
// 文档地址 https://docs.hamibot.com/
var aValue = 0;
var bValue = 0;
toast("脚本已启动,a=" + aValue + ", b=" + bValue);
// 简单对话框方式
var input = dialogs.rawInput("设置 a 和 b 的值", "0,0");
var values = input.split(",");
aValue = parseInt(values[0]) || 0;
bValue = parseInt(values[1]) || 0;
toast("设置完成:a=" + aValue + ", b=" + bValue);
toast("运行结果:a=" + aValue + ", b=" + bValue);
这个简化版本不使用悬浮窗,更稳定。如果需要悬浮窗功能,请先确保权限全部开启。
ℹ️ 本回答由 AI 生成,内容仅供参考