HarmonyOS 鸿蒙Next 2in1标题栏上的关闭按钮,怎么实现点击关闭按钮时,打开弹窗阻止退出应用,通过用户弹窗确认是否退出应用?【跪求】

HarmonyOS 鸿蒙Next 2in1标题栏上的关闭按钮,怎么实现点击关闭按钮时,打开弹窗阻止退出应用,通过用户弹窗确认是否退出应用?【跪求】 应该在哪个生命周期函数进行阻止应用窗口关闭的操作啊?

ps:关闭按钮就是图中这个关闭按钮

cke_2776.png


更多关于HarmonyOS 鸿蒙Next 2in1标题栏上的关闭按钮,怎么实现点击关闭按钮时,打开弹窗阻止退出应用,通过用户弹窗确认是否退出应用?【跪求】的实战教程也可以访问 https://www.itying.com/category-93-b0.html

14 回复

要在应用关闭之前需要加确认关闭防呆吗,

你可以参考这个文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-app-ability-uiability-V5#uiabilityonpreparetoterminate10

配置权限,

'requestPermissions': [{
'name': 'ohos.permission.PREPARE_APP_TERMINATE'
}],
onPrepareToTerminate(): boolean {
  console.info('onBackPress:');
  promptAction.showDialog({
    title: "提示",
    message: "确认退出?",
    buttons: [
      {
        text: "取消",
        color: "#000000"
      },
      {
        text: "退出",
        color: "#555555"
      }
    ]
  }).then((data: ShowDialogSuccessResponse) => {
    console.info('showDialog success, click button: ' + data.index);
    if (data.index == 1) {
      this.context.terminateSelf()
    }
  })
  return true;
}

更多关于HarmonyOS 鸿蒙Next 2in1标题栏上的关闭按钮,怎么实现点击关闭按钮时,打开弹窗阻止退出应用,通过用户弹窗确认是否退出应用?【跪求】的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


是不是这种效果,

打开弹窗

提示 确定要关闭吗?

  • 取消
  • 确认

点击确认后无操作。

点击取消后弹出新窗口

新弹窗 这是点击取消后弹出的新窗口

  • 确定

是的!!!谢谢大佬 就是这个,

不客气~

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

import promptAction from '@ohos.promptAction';

@Entry
@Component
struct Index {
  build() {
    Column() {
      Button('打开弹窗')
        .onClick(() => {
          promptAction.showDialog({
            title: '提示',
            message: '确定要关闭吗?',
            buttons: [
              { text: '取消', color: '#000000' }, 
              { text: '确认', color: '#0000FF' }  
            ]
          }).then((data) => {
            if (data.index === 0) { 
              promptAction.showDialog({
                title: '新弹窗',
                message: '这是点击取消后弹出的新窗口',
                buttons: [{ text: '确定', color: '#0000FF' }]
              });
            } else if (data.index === 1) {
              
            }
          })
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

楼主可以用时钟周期事件,比如说有三个按钮,一个按钮确定(退出),一个按钮取消,另一个按钮时钟周期定时跳转

时钟周期事件怎么结合这个关闭按钮用呀?

自定义弹窗 (CustomDialog):[1]

设定一个定时器。按照指定的周期(以毫秒计)来执行注册的回调函数:[2]

我好像没表达清楚 我的疑惑是点击这个关闭按钮怎么打开一个弹窗 而不是直接关闭当前应用。因为这个关闭按钮是系统自带的。

楼主好,你可以用自定义弹窗 (CustomDialog)

但是是在哪个生命周期函数中去触发弹窗打开才能阻止关闭当前窗口/应用?

楼主可以用时钟周期事件,比如说有三个按钮,一个按钮确定(退出),一个按钮取消,另一个按钮时钟周期定时跳转,

在HarmonyOS中,可以通过使用 AbilityonBackPressed 方法来拦截点击关闭按钮的操作,并弹出确认对话框。具体步骤如下:

  1. 重写 onBackPressed 方法:在你的 Ability 子类中,重写 onBackPressed 方法,以拦截返回或关闭按钮的点击事件。

  2. 显示确认弹窗:在 onBackPressed 方法中,使用 CommonDialogPromptDialog 显示一个确认弹窗,询问用户是否确定退出应用。

  3. 处理用户选择:根据用户的确认结果,决定是否继续退出应用。如果用户确认退出,调用 terminateAbility() 方法关闭应用;如果用户取消,则不执行任何操作。

示例代码片段如下:

import common from '@ohos.app.ability.common';
import prompt from '@ohos.prompt';

export default class MainAbility extends common.Ability {
    onBackPressed() {
        prompt.showDialog({
            message: '确认退出应用吗?',
            buttons: [
                { text: '取消', color: '#000000' },
                { text: '确认', color: '#FF0000' }
            ]
        }).then((data) => {
            if (data.index === 1) { // 用户点击了确认按钮
                this.terminateAbility();
            }
        }).catch((err) => {
            console.error(`Failed to show dialog, code is ${err.code}, message is ${err.message}`);
        });
    }
}

这样,当用户点击关闭按钮时,会先弹出确认弹窗,用户确认后才退出应用。

回到顶部