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

鸿蒙NEXT开发键盘工具类(ArkTs)

export declare type KeyboardCallBack = (show: boolean, height: number) => void;
import { AppUtil } from './AppUtil';
import { LogUtil } from './LogUtil';
import { ArrayUtil } from './ArrayUtil';/*** 键盘工具类* @author 鸿蒙布道师* @since 2025/04/18*/
export class KeyboardUtil {private static callBacks: KeyboardCallBack[] = []; // 缓存的监听回调private static keyboardCallBack: ((height: number) => void) | undefined; // 全局键盘监听回调/*** 拉起键盘* @param key 输入框类组件的key或id* @param uiContext 页面的UIContext(子窗口需传入,主窗口可省略)*/static show(key: string, uiContext?: UIContext): void {(uiContext ?? AppUtil.getUIContext()).getFocusController().requestFocus(key);}/*** 关闭键盘* @param uiContext 页面的UIContext(子窗口需传入,主窗口可省略)*/static hide(uiContext?: UIContext): void {(uiContext ?? AppUtil.getUIContext()).getFocusController().clearFocus();}/*** 订阅输入法软键盘显示或隐藏事件* @param callback 回调函数:*         - show: boolean,true表示键盘显示,false表示键盘隐藏;*         - height: number,键盘高度。*/static onKeyboardListener(callback: KeyboardCallBack): void {if (ArrayUtil.contain(KeyboardUtil.callBacks, callback)) {LogUtil.error(`KeyboardUtil-onKeyboardListener: 监听事件已存在!`);return;}KeyboardUtil.callBacks.push(callback);if (!KeyboardUtil.keyboardCallBack) {KeyboardUtil.keyboardCallBack = (height: number) => {KeyboardUtil.callBacks.forEach(cb => cb?.(height > 0, height));};AppUtil.getMainWindow().on('keyboardHeightChange', KeyboardUtil.keyboardCallBack);}}/*** 取消订阅输入法软键盘显示或隐藏事件* @param callback 要移除的监听事件,若不传则移除所有监听事件*/static removeKeyboardListener(callback?: KeyboardCallBack): void {if (callback) {ArrayUtil.remove(KeyboardUtil.callBacks, callback);} else {KeyboardUtil.callBacks = [];}if (KeyboardUtil.keyboardCallBack && KeyboardUtil.callBacks.length === 0) {AppUtil.getMainWindow().off('keyboardHeightChange', KeyboardUtil.keyboardCallBack);KeyboardUtil.keyboardCallBack = undefined;}}
}代码如下:
export declare type KeyboardCallBack = (show: boolean, height: number) => void;
import { AppUtil } from './AppUtil';
import { LogUtil } from './LogUtil';
import { ArrayUtil } from './ArrayUtil';/*** 键盘工具类* @author 鸿蒙布道师* @since 2025/04/18*/
export class KeyboardUtil {private static callBacks: KeyboardCallBack[] = []; // 缓存的监听回调private static keyboardCallBack: ((height: number) => void) | undefined; // 全局键盘监听回调/*** 拉起键盘* @param key 输入框类组件的key或id* @param uiContext 页面的UIContext(子窗口需传入,主窗口可省略)*/static show(key: string, uiContext?: UIContext): void {(uiContext ?? AppUtil.getUIContext()).getFocusController().requestFocus(key);}/*** 关闭键盘* @param uiContext 页面的UIContext(子窗口需传入,主窗口可省略)*/static hide(uiContext?: UIContext): void {(uiContext ?? AppUtil.getUIContext()).getFocusController().clearFocus();}/*** 订阅输入法软键盘显示或隐藏事件* @param callback 回调函数:*         - show: boolean,true表示键盘显示,false表示键盘隐藏;*         - height: number,键盘高度。*/static onKeyboardListener(callback: KeyboardCallBack): void {if (ArrayUtil.contain(KeyboardUtil.callBacks, callback)) {LogUtil.error(`KeyboardUtil-onKeyboardListener: 监听事件已存在!`);return;}KeyboardUtil.callBacks.push(callback);if (!KeyboardUtil.keyboardCallBack) {KeyboardUtil.keyboardCallBack = (height: number) => {KeyboardUtil.callBacks.forEach(cb => cb?.(height > 0, height));};AppUtil.getMainWindow().on('keyboardHeightChange', KeyboardUtil.keyboardCallBack);}}/*** 取消订阅输入法软键盘显示或隐藏事件* @param callback 要移除的监听事件,若不传则移除所有监听事件*/static removeKeyboardListener(callback?: KeyboardCallBack): void {if (callback) {ArrayUtil.remove(KeyboardUtil.callBacks, callback);} else {KeyboardUtil.callBacks = [];}if (KeyboardUtil.keyboardCallBack && KeyboardUtil.callBacks.length === 0) {AppUtil.getMainWindow().off('keyboardHeightChange', KeyboardUtil.keyboardCallBack);KeyboardUtil.keyboardCallBack = undefined;}}
}


http://www.mrgr.cn/news/99322.html

相关文章:

  • Mac idea WordExcel等文件git modify 一直提示修改状态
  • 【MySQL数据库入门到精通-02 SQL分类以及DDL操作】
  • n8n 中文系列教程_05.如何在本机部署/安装 n8n(详细图文教程)
  • git比较不同分支的不同提交文件差异
  • Java--数组的应用
  • 深入理解设计模式之模板方法模式
  • 数仓面试内容
  • Spring AI MCP
  • 字符串拼接问题的最佳解决方案
  • MetaGPT智能体框架深度解析:记忆模块设计与应用实践
  • C语言高频面试题——常量指针与指针常量区别
  • 堆栈溢出 StackOverflowError 排查
  • 辛格迪客户案例 | 浙江高跖医药委托生产质量管理协同(OWL MAH)项目
  • vue3 + element-plus中el-dialog对话框滚动条回到顶部
  • 存储器综合:内存条
  • [SpringBoot]配置文件(1)
  • 查看matlab函数帮助文档的方法
  • 嵌入式工程师( C / C++ )笔试面试题汇总
  • Python常用的第三方模块之二【openpyxl库】读写Excel文件
  • 前端笔记-Vue3(上)