写点什么

【HarmonyOS 6】在 UI 控件上滑动也会触发 onClick 点击事件?

作者:GeorgeGcs
  • 2025-11-24
    四川
  • 本文字数:1129 字

    阅读完需:约 4 分钟

【HarmonyOS 6】在UI控件上滑动也会触发onClick点击事件?

【HarmonyOS 6】在 UI 控件上滑动也会触发 onClick 点击事件?

一、问题背景

最近忙了几个月的 HarmonyOS 6 AI 项目已提测。测试老铁们和领导们疯狂的使用,提出了很多奇奇怪怪的问题。


如题所述,项目中有个全屏提示遮罩,背景设置了点击事件。点击后隐藏遮罩。



测试代码如下:



/** * 点击测试页面 */@Entry@Componentstruct ClickTestPage {
build() { Column() { Text("提示文本123456") .fontSize($r('app.float.page_text_font_size')) .fontWeight(FontWeight.Bold) } .height('100%') .width('100%') .justifyContent(FlexAlign.Center) .onClick(() => { // 触发点击 this.getUIContext().getPromptAction().showToast({ message: "点击了!" }) }) .backgroundColor(Color.Red) }}
复制代码


领导们体验时发现,在 UI 控件上滑动也会触发 onClick 点击事件,关闭提示遮罩。


按照我的定位思路,因为只有 onclick 触发了隐藏操作,所以加了日志去复现,发现果然如此。就把 bug 划分到非问题栏里了。


后来项目内技术大佬发现,该问题可解,由此产生本文解答。


自我检讨,对于问题的敏感性和探索性有所降低,需要警惕!

二、解决方案:

因为 onClick 点击事件是组件被点击时触发的事件,因此滑动后抬起手指也会触发 onClick 事件。


不过从 API12,新增 distanceThreshold 参数,设置点击手势移动阈值。手指移动超出阈值时,点击手势识别失败。



比起传统 onclick 事件,多了一个参数,可以设置移动阈值 distanceThreshold。


当点击事件,设置了移动阈值 distanceThreshold。当设置的值小于等于 0 时,会被转化为默认值。默认值:2^31-1,单位:vp。


当手指的移动距离超出开发者预设的移动阈值时,点击识别失败。如果初始化为默认阈值时,手指移动超过组件热区范围,点击识别失败。


话说 API12 版本还是太权威了,去年居然没有注意到这些细节!!!


所以该问题如下修改测试代码即可:



/** * 点击测试页面 */@Entry@Componentstruct ClickTestPage {
build() { Column() { Text("提示文本123456") .fontSize($r('app.float.page_text_font_size')) .fontWeight(FontWeight.Bold) } .height('100%') .width('100%') .justifyContent(FlexAlign.Center) .onClick(() => { // 触发点击 this.getUIContext().getPromptAction().showToast({ message: "点击了!" }) // 设置移动阈值distanceThreshol为1 },1) .backgroundColor(Color.Red) }}
复制代码


onClick 事件中增加 distanceThreshold 参数,将阈值设置为一个极小值 1,当手指的移动距离超出预设的移动阈值时,点击识别失败,即不触发点击事件。

发布于: 刚刚阅读数: 2
用户头像

GeorgeGcs

关注

路漫漫其修远兮,吾将上下而求索。 2024-12-24 加入

鸿蒙创作先锋,华为HDE专家,鸿蒙讲师,作者。 目前任职鸿蒙应用架构师。历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 OpenHarmony,HarmonyOS,Flutter,H5,Android,IOS。

评论

发布
暂无评论
【HarmonyOS 6】在UI控件上滑动也会触发onClick点击事件?_GeorgeGcs_InfoQ写作社区