ui 创建个弹出层。里边有一组多选框
第 1 条补充
· 2 个月前
分别用安装原生组件和ui各写一个层,包含复选框,及复选框事件,用变量show来控制这个层的呈现,需要一个完整demo
第 2 条补充
· 2 个月前
如何才能在ui模式下运行
回答
要使用 ui
创建一个包含一组多选框的弹出层,你可以结合 dialogs.build()
方法来自定义对话框内容。以下是实现示例:
// 文档地址 https://docs.hamibot.com/
var dialog = dialogs.build({
title: "请选择选项",
positive: "确定",
negative: "取消"
});
// 使用垂直布局添加多个复选框
dialog.layout(
<vertical padding="10dp">
<checkbox id="option1" text="选项 A" />
<checkbox id="option2" text="选项 B" />
<checkbox id="option3" text="选项 C" />
</vertical>
);
// 显示对话框并处理点击事件
dialog.on("positive", function() {
if (dialog.option1.checked) {
toast("你选择了选项 A");
}
if (dialog.option2.checked) {
toast("你选择了选项 B");
}
if (dialog.option3.checked) {
toast("你选择了选项 C");
}
});
dialog.show();
说明:
dialogs.build(properties)
:用于创建一个可自定义的对话框。dialog.layout(xml)
:为对话框设置布局,这里使用了垂直布局<vertical>
和三个<checkbox>
控件。dialog.on("positive", function() {...})
:监听“确定”按钮的点击事件,并检查每个复选框的状态。
你可以根据需要调整复选框的数量和文本内容。
补充回答 1
以下是两个完整的示例,分别使用 原生 Android 组件 和 ui 模块 创建一个包含复选框的层,并通过变量 show
控制该层是否显示。
✅ 示例 1:使用原生 Android 组件创建复选框层
// 文档地址 https://docs.hamibot.com/
var show = true; // 控制是否显示层
// 创建一个垂直布局
var layout = ui.inflate(
<vertical padding="16dp">
<checkbox id="cb1" text="选项 A" />
<checkbox id="cb2" text="选项 B" />
<checkbox id="cb3" text="选项 C" />
</vertical>
);
if (show) {
// 添加到当前界面
ui.layout(layout);
// 设置复选框点击事件
layout.cb1.on("check", function(checked) {
if (checked) toast("你勾选了 选项 A");
else toast("取消勾选 选项 A");
});
layout.cb2.on("check", function(checked) {
if (checked) toast("你勾选了 选项 B");
else toast("取消勾选 选项 B");
});
layout.cb3.on("check", function(checked) {
if (checked) toast("你勾选了 选项 C");
else toast("取消勾选 选项 C");
});
}
✅ 示例 2:使用 ui
模块创建复选框层(XML 布局)
// 文档地址 https://docs.hamibot.com/
var show = true; // 控制是否显示层
if (show) {
// 使用 XML 定义布局结构
ui.layout(
<vertical padding="16dp">
<checkbox id="cb1" text="选项 A" />
<checkbox id="cb2" text="选项 B" />
<checkbox id="cb3" text="选项 C" />
</vertical>
);
// 设置复选框点击事件
ui.cb1.on("check", function(checked) {
if (checked) toast("你勾选了 选项 A");
else toast("取消勾选 选项 A");
});
ui.cb2.on("check", function(checked) {
if (checked) toast("你勾选了 选项 B");
else toast("取消勾选 选项 B");
});
ui.cb3.on("check", function(checked) {
if (checked) toast("你勾选了 选项 C");
else toast("取消勾选 选项 C");
});
}
📌 说明:
show
变量用于控制层是否显示。- 在第一个示例中,使用了
ui.inflate()
动态加载 XML 布局并添加到界面中。 - 第二个示例更简洁,直接使用
ui.layout()
设置整个界面为指定的 XML 布局。 - 每个复选框都绑定了
check
事件,当用户勾选或取消勾选时会弹出提示信息。
你可以根据实际需要选择使用哪种方式来实现你的需求。
补充回答 2
要在 ui 模式 下运行脚本,需要满足以下条件,并按照规范编写代码:
✅ 1. 在脚本最开始添加 'ui';
声明
这是告诉 Hamibot 引擎该脚本使用 UI 模式运行。注意:
- 必须放在脚本的第一行;
- 前面不能有任何字符(包括空格和注释);
// 文档地址 https://docs.hamibot.com/
'ui';
ui.layout(
<vertical padding="16dp">
<text text="这是一个UI模式的界面" />
<button text="点击我" onClick={clickHandler} />
</vertical>
);
function clickHandler() {
toast("按钮被点击了");
}
✅ 2. 使用 ui.layout()
构建界面布局
你可以传入一个 XML 格式的布局结构,例如:
ui.layout(
<vertical>
<checkbox id="cb1" text="选项 A" />
<checkbox id="cb2" text="选项 B" />
</vertical>
);
✅ 3. 使用事件绑定方式响应用户操作
由于 ui 模式基于异步机制,不支持传统的同步阻塞写法。你需要用回调函数或 Promise 来处理交互。
示例:为按钮绑定点击事件
'ui';
ui.layout(
<vertical>
<button id="btn" text="点我" />
</vertical>
);
ui.btn.onClick = function () {
toast("按钮被点击");
};
✅ 4. 使用 dialogs 的 Promise 或回调方式与用户交互
在 ui 模式下,alert()
、confirm()
等函数不能像普通 JavaScript 那样同步返回结果,应使用 Promise 或回调函数:
'ui';
confirm("是否继续?").then(function (result) {
if (result) {
toast("你选择了确定");
} else {
toast("你选择了取消");
}
});
📌 注意事项
项目 | 要求 |
---|---|
第一行声明 | 必须有 'ui'; |
事件绑定 | 必须使用 .on() 或 onClick 这样的方式 |
对话框使用 | 不要依赖返回值,使用 Promise 或回调函数 |
不支持 | auto.waitFor() 应改用 auto(); |
✅ 完整示例
// 文档地址 https://docs.hamibot.com/
'ui';
auto();
ui.layout(
<vertical padding="16dp">
<text text="欢迎使用UI模式" />
<button id="btnConfirm" text="确认操作" />
</vertical>
);
ui.btnConfirm.onClick = function () {
confirm("确定要执行此操作吗?").then(function (res) {
if (res) {
toast("已确认");
} else {
toast("已取消");
}
});
};
只要遵循以上规则,你就可以在 Hamibot 中顺利使用 ui 模式 编写图形化界面脚本。
ℹ️ 本回答由 AI 生成,内容仅供参考