AutoJs6 中文文档 下载 App

dialogs 对话框 — alert、confirm、prompt、build 详解

dialogs 模块总览

dialogs 模块提供了在脚本中弹出 Android 原生对话框的能力。与 E4X 界面不同,对话框是系统级弹窗,不需要脚本声明 "ui" 也能使用。

方法类型返回值说明
dialogs.alert()提示框void只有一个确定按钮
dialogs.confirm()确认框boolean确定/取消
dialogs.prompt()输入框string/null让用户输入内容
dialogs.select()单选列表number选中索引
dialogs.multiSelect()多选列表number[]选中索引数组
dialogs.build()自定义Dialog完全自定义
dialogs.showFilePicker()文件选择器string/null选文件路径

alert — 提示框

最简单的对话框,只有「确定」一个按钮:

dialogs.alert(
    "标题",           // 可选
    "这是一条提示信息",
    "我知道了"        // 按钮文字(默认"确定")
);

// 单参数版本 —— 只有信息和确定按钮
dialogs.alert("操作已完成");

confirm — 确认框

两个按钮,让用户选择确定或取消:

let result = dialogs.confirm(
    "确认删除",
    "确定要删除这条记录吗?此操作不可恢复。",
    "删除",    // 确定按钮文字
    "取消"     // 取消按钮文字
);

if (result) {
    console.log("用户点了确定");
} else {
    console.log("用户点了取消");
}

prompt — 输入框

弹出一个带输入框的对话框:

// 简单输入
let name = dialogs.prompt("请输入您的名字");
if (name !== null && name !== "") {
    console.log("名字: " + name);
}

// 带默认值
let email = dialogs.prompt(
    "邮箱",
    "请输入邮箱地址",
    "default@example.com"  // 默认值
);

// 密码输入(隐藏显示)
let pwd = dialogs.prompt(
    "密码",
    "请输入密码",
    "",
    null,
    "password"  // 输入类型
);

prompt 返回值

用户操作返回值
点确定输入框内容(可能为空字符串)
点取消null

select — 单选列表

让用户从多个选项中选一个:

let choices = ["微信登录", "QQ登录", "手机号登录", "游客模式"];

let result = dialogs.select(
    "选择登录方式",  // 标题
    choices         // 选项数组
);

if (result !== -1) {
    console.log("选择了: " + choices[result]);
} else {
    console.log("用户取消了");
}

multiSelect — 多选列表

let features = ["自动签到", "自动清理", "自动备份", "自动回复"];

let selected = dialogs.multiSelect(
    "选择功能",  // 标题
    features
);

// selected 是选中索引数组,如 [0, 2]
console.log("选中了: " + selected.map(i => features[i]).join(", "));

build — 自定义对话框

dialogs.build() 可以构建完全自定义的对话框:

let dialog = dialogs.build({
    title: "自定义对话框标题",
    content: "对话框正文内容",
    
    // 三个按钮
    positive: "确定",
    negative: "取消",
    neutral: "稍后再说",
    
    // 按钮文字是否全大写(v6.7 新增)
    positiveTextAllCaps: false,
    negativeTextAllCaps: false,
    neutralTextAllCaps: false,
    
    // 宽度
    customView: null,   // 可自定义 E4X 布局
    autoDismiss: true,  // 点击按钮后是否自动关闭
    cancelable: true,   // 是否可以按返回键关闭
    
    // 输入框模式
    inputHint: "提示",
    inputPrefill: "预填内容"
});

// 设置按钮点击回调
dialog.on("positive", () => {
    console.log("点击了确定");
});

dialog.on("negative", () => {
    console.log("点击了取消");
});

dialog.on("neutral", () => {
    console.log("点击了中立按钮");
});

// 输入框模式的输入变化
dialog.on("input", (text) => {
    console.log("当前输入: " + text);
});

// 显示对话框
dialog.show();

// 手动关闭
// dialog.dismiss();

build 的自定义视图

let dialog = dialogs.build({
    title: "自定义视图对话框",
    customView: (
        <vertical padding="16">
            <text text="这是自定义内容" textSize="16sp"/>
            <button id="innerBtn" text="内嵌按钮"/>
        </vertical>
    ),
    positive: "确定"
});

// 在 build 中获取内嵌控件引用
// 需要在 ui.layout 上下文中使用

异步调用

部分对话框支持异步调用(不阻塞后续代码):

// 异步 alert
dialogs.alert("提示").then(() => {
    console.log("对话框已关闭");
});

// 异步 confirm
dialogs.confirm("确认吗?").then(result => {
    if (result) {
        console.log("确定");
    }
});

// 异步 prompt
dialogs.prompt("名字").then(name => {
    console.log("用户输入: " + name);
});

异步对话框返回 Promise,可以用 .then() 或 await(需测试 Rhino 支持)。

文件选择器

// 打开系统文件选择器
let path = dialogs.showFilePicker({
    title: "选择脚本文件",
    type: "files",     // files / folders / all
    multiple: false    // 是否多选
});

if (path) {
    console.log("选择的文件: " + path);
}

实战:完整的设置向导

/**
 * 脚本首次运行时的设置向导
 */
function setupWizard() {
    // 第一步:确认使用
    if (!dialogs.confirm(
        "使用向导",
        "这个向导将帮助你完成基本设置。\n点击确定继续,取消稍后手动设置。",
        "开始", "跳过"
    )) {
        return;
    }
    
    // 第二步:选择运行频率
    let choices = ["每分钟", "每 5 分钟", "每 15 分钟", "每小时"];
    let freqIndex = dialogs.select("选择运行频率", choices);
    if (freqIndex === -1) return;
    
    // 第三步:选择功能(多选)
    let features = ["自动签到", "自动清理", "自动备份"];
    let selected = dialogs.multiSelect("选择要启用的功能", features);
    
    // 第四步:确认用户名
    let username = dialogs.prompt(
        "设置用户名",
        "请输入你的用户名",
        "默认用户"
    );
    if (username === null) return;
    
    // 保存设置
    storage.put("setup", {
        frequency: choices[freqIndex],
        features: selected.map(i => features[i]),
        username: username
    });
    
    dialogs.alert("设置完成", "配置已保存!");
}

setupWizard();

与 toast 的区别

特性toastdialogs
是否阻塞否(短暂显示后自动消失)是(等待用户交互)
用户交互无(纯提示)按钮、输入、选择
样式系统默认小气泡系统标准对话框
适用场景状态提示、短暂反馈确认操作、收集输入、重要提醒