对话框封装实现指南
数据由AI生成。
一、对话框基础介绍
在鸿蒙ArkUI开发中,对话框(Dialog)是常用的交互组件,API12+提供了丰富的对话框类型:
基本对话框(AlertDialog):显示提示信息和操作按钮
输入对话框(TextInputDialog):包含输入框的对话框
全屏等待对话框(LoadingProgress):全屏显示的加载指示器
二、对话框封装类设计
DialogUtils封装类
// DialogUtils.ets
import { AlertDialog, TextInputDialog, LoadingProgress } from '@ohos.arkui.dialog';
import { promptAction } from '@ohos.arkui.promptAction';
export class DialogUtils {
/**
* 显示基本对话框
* @param title 标题
* @param message 消息内容
* @param buttons 按钮配置数组
* @param cancelable 是否可取消
*/
static showAlertDialog(
title: string,
message: string,
buttons: Array<{
text: string;
color?: string;
action: () => void;
}>,
cancelable: boolean = true
): void {
const dialogButtons = buttons.map(btn => ({
text: btn.text,
color: btn.color || '#000000',
action: () => {
btn.action();
promptAction.dismissDialog();
}
}));
const dialogParams: AlertDialog.DialogParams = {
title: title,
message: message,
buttons: dialogButtons,
cancelable: cancelable
};
promptAction.showDialog(dialogParams);
}
/**
* 显示输入对话框
* @param title 标题
* @param placeholder 输入框占位符
* @param defaultValue 默认值
* @param buttons 按钮配置数组
* @param cancelable 是否可取消
*/
static showInputDialog(
title: string,
placeholder: string = '',
defaultValue: string = '',
buttons: Array<{
text: string;
color?: string;
action: (value: string) => void;
}>,
cancelable: boolean = true
): void {
const dialogButtons = buttons.map(btn => ({
text: btn.text,
color: btn.color || '#000000',
action: (value: string) => {
btn.action(value);
promptAction.dismissDialog();
}
}));
const dialogParams: TextInputDialog.DialogParams = {
title: title,
placeholder: placeholder,
defaultValue: defaultValue,
buttons: dialogButtons,
cancelable: cancelable
};
promptAction.showDialog(dialogParams);
}
/**
* 显示全屏等待对话框
* @param message 加载提示信息
*/
static showLoadingDialog(message: string = '加载中...'): void {
const dialogParams: LoadingProgress.DialogParams = {
message: message
};
promptAction.showDialog(dialogParams);
}
/**
* 关闭当前显示的对话框
*/
static dismissDialog(): void {
promptAction.dismissDialog();
}
}
三、使用示例
1. 基本对话框使用
// 在任意页面中调用
import { DialogUtils } from '../utils/DialogUtils';
// 显示基本对话框
DialogUtils.showAlertDialog(
'提示',
'确定要删除此项吗?',
[
{
text: '取消',
color: '#999999',
action: () => {
console.log('用户点击了取消');
}
},
{
text: '确定',
color: '#FF0000',
action: () => {
console.log('用户点击了确定');
// 执行删除操作
}
}
],
true
);
2. 输入对话框使用
// 显示输入对话框
DialogUtils.showInputDialog(
'请输入姓名',
'例如:张三',
'',
[
{
text: '取消',
action: () => {
console.log('用户取消了输入');
}
},
{
text: '确定',
action: (value: string) => {
console.log('用户输入了:' + value);
// 处理输入值
}
}
]
);
3. 全屏等待对话框使用
// 显示加载对话框
DialogUtils.showLoadingDialog('数据加载中,请稍候...');
// 模拟异步操作
setTimeout(() => {
// 关闭加载对话框
DialogUtils.dismissDialog();
}, 2000);
四、封装优势说明
统一调用入口:所有对话框通过DialogUtils类统一管理
简化参数配置:封装了复杂的参数配置,提供简洁的API
类型安全:使用TypeScript确保参数类型正确
可扩展性:方便添加新的对话框类型或功能
跨页面调用:可在应用的任何页面中直接调用
五、注意事项
对话框是模态的,会阻止用户与其他UI元素交互
避免在同一时间显示多个对话框
全屏加载对话框应配合异步操作使用,完成后必须调用dismissDialog关闭
API12+对对话框样式和行为有细微调整,请确保测试不同场景
通过这种封装方式,可以极大简化鸿蒙应用中对话框的使用,提高开发效率和代码可维护性。