UI 事件绑定与值读写——button.click、checkbox.checked、input.text
访问 UI 组件
"ui";
ui.layout(
<vertical>
<button id="btn_ok" text="确定"/>
<input id="inp_name" hint="请输入"/>
<checkbox id="chk_agree" text="我已阅读"/>
</vertical>
);
// 访问方式:ui.组件ID
log(ui.btn_ok.getText());
log(ui.inp_name.getText());
log(ui.chk_agree.isChecked());
常用事件
click — 点击事件
ui.btn_ok.click(function() {
toast("按钮被点击了");
});
change — 状态变化
ui.chk_agree.change(function(checked) {
ui.btn_ok.enabled(checked);
});
textChanged — 输入框文字变化
ui.inp_name.on("textChanged", function(text) {
log("当前输入:" + text);
});
longClick — 长按
ui.btn_ok.longClick(function() {
toast("长按了");
return true; // 返回 true 表示已消费事件
});
读取与修改值
// 按钮文字
ui.btn_ok.text("新文字"); // 设置
var t = ui.btn_ok.text(); // 读取
// 输入框
ui.inp_name.text("默认值");
var val = ui.inp_name.text();
// 复选框
ui.chk_agree.checked(true);
var isOn = ui.chk_agree.checked();
// 开关
ui.sw_mode.checked();
// 文本标签
ui.txt_status.setText("运行中...");
ui.txt_status.setTextColor("#ff0000");
子线程更新 UI
UI 只能在主线程更新,脚本逻辑通常在子线程执行。跨线程更新 UI 用 ui.run():
threads.start(function() {
// 耗时操作
sleep(2000);
// 更新 UI(必须切回主线程)
ui.run(function() {
ui.txt_status.setText("任务完成");
ui.btn_run.enabled(true);
});
});
对话框
// 确认对话框
dialogs.confirm("确认执行?", "这将打开淘宝 APP").then(function(ok) {
if (ok) launchApp("淘宝");
});
// 输入对话框
dialogs.input("请输入 APP 名称").then(function(name) {
if (name) launchApp(name);
});
// 单选对话框
dialogs.singleChoice("选择模式", ["自动", "手动", "半自动"]).then(function(idx) {
toast("你选了第 " + idx + " 个");
});