HarmonyOS 鸿蒙Next.promptAction.openCustomDialog打开的弹窗有没有优先级

HarmonyOS 鸿蒙Next.promptAction.openCustomDialog打开的弹窗有没有优先级 使用 promptAction.openCustomDialog 打开了多个弹窗,想把其中的一个弹窗显示到最上面,有设置优先级的方法吗

2 回复
你好,系统没有提供优先级的接口。

需要自己封装优先级队列,来管控显示顺序。请参考:

// 定义对话框队列项的接口
interface DialogQueueItem {
  priority: number; // 优先级,数字越小优先级越高
  dialogOptions: {
    // 这里可以根据 openCustomDialog 的参数进行调整
    title?: string;
    message?: string;
    confirmButton?: {
      text: string;
      onClick: () => void;
    };
    cancelButton?: {
      text: string;
      onClick: () => void;
    };
  };
}

// 对话框队列
const dialogQueue: DialogQueueItem[] = [];
// 当前是否有对话框正在显示
let isDialogShowing = false;

// 显示下一个对话框
function showNextDialog() {
  if (dialogQueue.length === 0 || isDialogShowing) {
    return;
  }

  // 按优先级排序
  dialogQueue.sort((a, b) => a.priority - b.priority);
  const nextDialog = dialogQueue.shift();

  if (nextDialog) {
    isDialogShowing = true;
    const { dialogOptions } = nextDialog;
    openCustomDialog({
      title: dialogOptions.title,
      message: dialogOptions.message,
      confirmButton: {
        text: dialogOptions.confirmButton?.text || '确定',
        onClick: () => {
          dialogOptions.confirmButton?.onClick();
          isDialogShowing = false;
          showNextDialog();
        }
      },
      cancelButton: {
        text: dialogOptions.cancelButton?.text || '取消',
        onClick: () => {
          dialogOptions.cancelButton?.onClick();
          isDialogShowing = false;
          showNextDialog();
        }
      }
    });
  }
}

// 封装的添加对话框到队列的函数
function addDialogToQueue(priority: number, dialogOptions: DialogQueueItem['dialogOptions']) {
  dialogQueue.push({ priority, dialogOptions });
  showNextDialog();
}

// 示例使用
@Component
struct Index {
  build() {
    Column({ space: 50 }) {
      Button('添加低优先级对话框')
        .onClick(() => {
          addDialogToQueue(2, {
            title: '低优先级对话框',
            message: '这是一个低优先级的对话框',
            confirmButton: {
              text: '确认',
              onClick: () => {
                console.log('低优先级对话框确认');
              }
            },
            cancelButton: {
              text: '取消',
              onClick: () => {
                console.log('低优先级对话框取消');
              }
            }
          });
        })
      Button('添加高优先级对话框')
        .onClick(() => {
          addDialogToQueue(1, {
            title: '高优先级对话框',
            message: '这是一个高优先级的对话框',
            confirmButton: {
              text: '确认',
              onClick: () => {
                console.log('高优先级对话框确认');
              }
            },
            cancelButton: {
              text: '取消',
              onClick: () => {
                console.log('高优先级对话框取消');
              }
            }
          });
        })
    }
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next.promptAction.openCustomDialog打开的弹窗有没有优先级的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,promptAction.openCustomDialog方法用于打开自定义弹窗。关于弹窗的优先级,HarmonyOS系统默认会根据弹窗的类型和调用顺序进行管理。系统弹窗通常具有较高的优先级,而自定义弹窗的优先级相对较低。如果同时有多个弹窗需要显示,系统会根据弹窗的优先级决定显示顺序。promptAction.openCustomDialog打开的弹窗没有显式的优先级设置,默认会按照调用顺序依次显示。如果需要控制弹窗的显示顺序,可以通过逻辑控制来确保弹窗按预期顺序弹出。

回到顶部