当前位置: 首页 > news >正文

【每日学点HarmonyOS Next知识】防止重复点击、对话框收拾拦截、自定义键盘焦点、页面层级、自定义对话框创建

1、HarmonyOS onClick点击事件,如何实现重复点击同一个按钮或toggle,两次间隔时间过短则失效,来防止重复点击?

onClick点击事件,如何实现重复点击同一个按钮或toggle,两次间隔时间过短则失效,来防止重复点击

参考demo:

//定义一个节流函数throttle
function throttle(func: Function, interval: number) {
  let lastTime = 0;
  return () => {
    const nowTime = Date.now();
    const remainTime = interval - (nowTime - lastTime);
    if (remainTime <= 0) {
      lastTime = nowTime;
      func();
    }
  };
}
//示例
Button("防止重复点击").onClick(throttle(()=>{

},5000))
2、HarmonyOS CustomDialog弹窗,返回手势时会消失,在哪里可以拦截这个事件?

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-methods-custom-dialog-box-V5#ZH-CN_TOPIC_0000001884757950__customdialogcontrolleroptions%E5%AF%B9%E8%B1%A1%E8%AF%B4%E6%98%8E

说明:

  1. 当用户执行点击遮障层关闭、左滑/右滑、三键back、键盘ESC关闭交互操作时,如果注册该回调函数,则不会立刻关闭弹窗。在回调函数中可以通过reason得到阻拦关闭弹窗的操作类型,从而根据原因选择是否能关闭弹窗。当前组件返回的reason中,暂不支持CLOSE_BUTTON的枚举值。
  2. 在onWillDismiss回调中,不能再做onWillDismiss拦截。
3、HarmonyOS 如何控制自定义键盘获取焦点和失去焦点?

如何控制自定义键盘获取焦点和失去焦点

参考demo:

@Entry
@Component
struct TextInputExample {
  controller: TextInputController = new TextInputController()
  @State inputValue: string = ""

  // 自定义键盘组件
  @Builder CustomKeyboardBuilder() {
    Column() {
      Grid() {
        ForEach([1, 2, 3, 4, 5, 6, 7, 8, 9, '*', 0, '#'], (item:number|string) => {
          GridItem() {
            Button(item + "")
              .width(110).onClick(() => {
              this.inputValue += item
            })
          }
        })
      }.maxCount(3).columnsGap(10).rowsGap(10).padding(5)
    }.backgroundColor(Color.Gray)
  }

  build() {
    Column() {
      Button('拉起键盘').onClick(() => {
        focusControl.requestFocus('txt1')
      })
        .id('btn1')
      Button('收起键盘').onClick(() => {
        focusControl.requestFocus('btn1')
      })
      TextInput({ controller: this.controller, text: this.inputValue })// 绑定自定义键盘
        .customKeyboard(this.CustomKeyboardBuilder())
        .margin(10)
        .border({ width: 1 })
        .height('48vp')
        .id('txt1')
      TextInput({ placeholder: '没有关联自定义键盘' })
    }
  }
}
4、HarmonyOS har默认router所在的层级是主窗口还是跟随所在的HSP router层?

主窗口A,子窗口B,其中主窗口A存在HSP活检模块(隐私中间页面-》人脸har活检页面),子窗口B点击跳转HSP活检模块隐私中间页面(getUIContext().getRouter),活检模块隐私中间页面点击再跳转人脸har,人脸har内部是否不需要getRouter方法进行跳转,人脸har默认router所在的层级是主窗口还是跟随所在的HSP router层?

根据UIContext说明,WindowStage/Window可以通过loadContent接口加载页面并创建UI的实例,所以UI实例和窗口是一一关联的,也就是说想要通过UIContext获取UI实例的话,必须在当前调用界面能追溯到一个UI窗口。如果UI上下文不明确则无法调用。

HSP页面路由跳转可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/in-app-hsp-V5

HSP(Harmony Shared Package)是动态共享包,可以包含代码、C++库、资源和配置文件,通过HSP可以实现代码和资源的共享。HSP不支持独立发布,而是跟随其宿主应用的APP包一起发布,与宿主应用同进程,具有相同的包名和生命周期。

HAR页面路由跳转可参考(命名路由):https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-routing-V5
页面路由指在应用程序中实现不同页面之间的跳转和数据传递。Router模块通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。本文将从页面跳转、页面返回、页面返回前增加一个询问框和命名路由这几个方面,介绍如何通过Router模块实现页面路由。

5、HarmonyOS CustomDialogController的创建方式问题?
showCaptch(){
  let alertDialog: CustomDialogController = new CustomDialogController({
    builder: DialogSliderCaptch()
  })
  alertDialog.open()
}
//放在一个page中,可以正常调用,但公开成如下那样的一个函数,就会报错,很容易复现

function showCaptch(){
  let alertDialog: CustomDialogController = new CustomDialogController({
    builder: DialogSliderCaptch()
  })
  alertDialog.open()
}

在ArkUI中,CustomDialogController是一个页面级别的组件,其生命周期是与页面绑定的。当 将CustomDialogController公开成一个函数时,实际上是将其从页面上下文中剥离出来,导致其无法正常使用。具体来说,CustomDialogController在页面中的使用是通过页面的生命周期管理的,例如在页面加载完成后初始化,并在页面退出时销毁。如果将其公开成一个函数,则无法保证其在正确的生命周期阶段被初始化和销毁,从而导致不可预期的行为。此外,CustomDialogController的一些属性和方法是与页面的生命周期相关的,例如build方法用于在页面中构建UI组件,而在函数中无法复用这个生命周期相关的逻辑。因此,将CustomDialogController公开成一个函数会导致其无法正常工作,因为它失去了与页面的绑定关系。

相关文章:

  • mysql-8.0.41-winx64 手动安装详细教程(2025版)
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Tomcat 的工作原理:从启动到请求处理的流程
  • c#面试题12
  • MySQL中有哪些索引
  • 存储优化(protobuf与mmkv)
  • RPC服务调用深度解析:从原理到Java实践
  • 面试之《TypeScript泛型》
  • JavaScript 模块 vs C# 类:封装逻辑的两种哲学
  • C# WPF 串口通信
  • STM32——GPIO介绍
  • 深度评测阿里云操作系统控制台:功能全面,体验卓越!
  • 生活小妙招之UE ViewPortUV-SceneTextureUV
  • 配置Open-R1,评测DeepSeek第三方蒸馏模型的推理性能4——QwQ 32B测试
  • 【H2O2 | 软件开发】事件循环机制
  • Python并发编程实战:突破GIL限制的工程化解决方案
  • PostgreSQL学习笔记:PostgreSQL vs MySQL
  • 【网络协议安全】任务10:三层交换机配置
  • 用Python和Ansible打造高效自动化服务器配置管理
  • 如何保存解析后的商品详情数据?
  • 华为OD机试 - 平均像素值-贪心算法(Java 2024 E卷 100分)
  • 长沙seo行者seo09/免费seo网站自动推广
  • 只做水果的网站/百度关键词排名推广工具
  • 太原做网站公司5大建站服务/快速排名优化
  • 郑州网站制作哪家好/seo推广是做什么
  • 公司网站备案网站名称有什么用/上海seo推广公司
  • 婚纱影楼网站模板/百度开户怎么开