HarmonyOS 鸿蒙Next customDialog 如何禁用掉侧滑返回手势

发布于 1周前 作者 vueper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next customDialog 如何禁用掉侧滑返回手势

隐私政策弹窗,只有点击 拒绝 或 同意 时候,Dialog才可以关闭,侧滑返回手势,不想让Dialog关闭掉。onWillDissmiss可以拿到 DissmissReason,但是无法阻止Dialog关闭吧?

4 回复

可以参考一下demo:

import { process } from '[@kit](/user/kit).ArkTS';

[@Entry](/user/Entry)

[@Component](/user/Component)

struct MyComponent {

  // 只有被[@Entry](/user/Entry)装饰的组件才可以调用页面的生命周期

  onBackPress() {

    console.info('Index onBackPres这是返回来了吗');

    AlertDialog.show(

      {

        title: '确定退出', // 标题

        message: '是否要退出?', // 内容

        autoCancel: false, // 点击遮障层时,是否关闭弹窗。

        alignment: DialogAlignment.Bottom, // 弹窗在竖直方向的对齐方式

        offset: { dx: 0, dy: -20 }, // 弹窗相对alignment位置的偏移量

        primaryButton: {

          value: '取消',

          action: () => {

            console.info('Callback when the first button is clicked');

            // ApplicationAbility.getInstance()?.quitApp();

          }

        },

        secondaryButton: {

          value: '确定',

          fontColor: '#D94838',

          action: () => {

            console.info('Callback when the second button is clicked这是哈哈啊');

            let pro = new process.ProcessManager();

            pro.exit(0)

            // app.terminate()

          }

        },

        cancel: () => { // 点击遮障层关闭dialog时的回调

          console.info('Closed callbacks');

        }

      }

    )

    return true // 返回true表示页面自己处理返回逻辑,不进行页面路由;返回false表示使用默认的路由返回逻辑,不设置返回值按照false处理

  }

  // 组件生命周期

  aboutToAppear() {

    console.info('MyComponent aboutToAppear');

  }

  // 组件生命周期

  aboutToDisappear() {

    console.info('MyComponent aboutToDisappear');

  }

  build() {

    Column() {

      Button('delete Child')

        .margin(20)

        .onClick(() => {

          // this.showChild = false;

        })

    }

  }

}
交互会有处理的地方,这个在 onBackPress 进行干预拦截

侧滑返回手势, 会触发 onBackPress, 在里面可以拦截系统默认操作.


具体参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-29-V5

在HarmonyOS(鸿蒙)系统中,自定义对话框(customDialog)默认可能会继承系统的一些手势行为,包括侧滑返回。为了禁用掉这个侧滑返回手势,你需要对对话框的窗口属性进行设置。

具体操作可以通过以下步骤进行:

  1. 获取对话框窗口:在对话框显示后,通过getWindow()方法获取对话框的Window对象。

  2. 设置窗口属性:使用setWindowAnimations(0)setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)来尝试改变对话框的默认行为。重要的是,要重新设置FLAG_DIM_BEHIND等需要的标志,以确保对话框的显示不受影响。

  3. 禁用侧滑返回:通过setWindowFeatures(WindowManager.LayoutParams.FEATURE_NO_TITLE)移除标题栏,并尝试使用setCancelable(false)setCanceledOnTouchOutside(false)来禁止通过触摸外部取消对话框,这有时也能间接影响侧滑返回行为。

  4. 自定义动画:如果上述方法无效,可以尝试为对话框设置自定义的进入和退出动画,确保动画中不包含侧滑效果。

请注意,这些步骤可能需要根据你的具体需求进行调整。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部