欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 鸿蒙NEXT开发键盘工具类(ArkTs)

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

2025/4/21 10:48:38 来源:https://blog.csdn.net/weixin_48639457/article/details/147321773  浏览:    关键词:鸿蒙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;}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词