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;}}
}