当前位置: 首页 > 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;}}
}

相关文章:

  • 基于linux 设置无线网卡Monitor模式 sniffer抓包
  • C++面向对象
  • PyTorch入门------卷积神经网络
  • 医院数据中心智能化数据上报与调数机制设计
  • 2025mathorcup妈妈杯数学建模挑战赛C题:汽车风阻预测,详细思路,模型,代码更新中
  • 汽车免拆诊断案例 | 2019款大众途观L车鼓风机偶尔不工作
  • 零基础上手Python数据分析 (17):[案例实战] 电商销售数据分析 - 从数据到洞察的全流程演练
  • 磁流变式汽车减振器创新设计与关键技术研究
  • 【C++指南】哈希驱动的封装:如何让unordered_map/set飞得更快更稳?【上】
  • FreeRTOS菜鸟入门(七)·创建任务·静态任务创建
  • 网页端调用本地应用打开本地文件(PDF、Word、excel、PPT)
  • 再读bert(Bidirectional Encoder Representations from Transformers)
  • 动手学深度学习:手语视频在NiN模型中的测试
  • 万物互联时代,AWS IoT Core如何构建企业级物联网中枢平台?
  • MCP系列之实践篇:搭建你的第一个MCP应用
  • DemoGen:用于数据高效视觉运动策略学习的合成演示生成
  • Python 文本和字节序列(支持字符串和字节序列的双模式API)
  • Webview+Python:用HTML打造跨平台桌面应用的创新方案
  • DHTMLX宣布推出支持 Redux、TypeScript 和 MUI 的 React Gantt甘特图控件
  • xml+html 概述
  • 微博:严厉打击对肖某董某事件蹭炒热点、编造故事博流量等行为
  • 十二届上海市委第六轮巡视全面进驻,巡视组联系方式公布
  • 美参议院通过新任美国驻华大使任命,外交部回应
  • 解放日报:上海深化改革开放,系统集成创新局
  • 年轻人的事业!6家上海人工智能企业畅想“模范生”新征程
  • 辽宁省委书记、省长连夜赶赴辽阳市白塔区火灾事故现场,指导善后处置工作