鸿蒙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;}}
}
相关文章:
鸿蒙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…...
动态规划算法的欢乐密码(一):斐波那契数模型
专栏:算法的魔法世界 个人主页:手握风云 目录 一、动态规划 二、例题讲解 2.1. 第 N 个泰波那契数 2.2. 三步问题 2.3. 使用最小花费爬楼梯 2.4. 解码方法 一、动态规划 动态规划是一种将复杂问题分解为更小的子问题,并利用子问题的解来…...
Echarts柱状图斜线环纹(图形的贴花图案)
单独设置 <!--此示例下载自 https://echarts.apache.org/examples/zh/editor.html?cbar-stack&codePYBwLglsB2AEC8sDeAoWszGAG0iAXMmuhgE4QDmFApqYQOQCGAHhAM70A0x6L7ACsAjQwtQqhIkwATxDUGbABaMAJsADu9HrAC-xHd3TZqNaCvEHiFcuaKTjAMzAMAzAFIu28hUXPY9ABYPQxIAI2AwTABbV…...
2025.04.19【Spider】| 蜘蛛图绘制技巧精解
Basic multi-group radar chart Start with a basic version, learn how to format your input dataset Radar chart with ggradar A Spider chart made using the ggradar package and a lot of customization.A work by Tuo Wang 文章目录 Basic multi-group radar chartRa…...
机器学习误差图绘
机器学习误差图绘制 绘图类 # Define the ModelComparisonPlot class class ModelComparisonPlot:def __init__(self, model_name):self.model_name model_namedef plot_comparison(self, y_val, y_pred, mse, mae, r2):# Create a figure with two subplotsfig, axes plt.…...
llama-factory微调报错:
报错信息 [INFO] [utils.py:789:see_memory_usage] CPU Virtual Memory: used 81.51 GB, percent 64.9% W0419 10:14:27.573000 108354 site-packages/torch/distributed/elastic/multiprocessing/api.py:897] Sending process 108373 closing signal SIGTERM W0419 10:14:27…...
【Linux】深入理解Linux文件系统:从C接口到内核设计哲学
文章目录 前言一、C语言中的文件接口1. 文件指针(句柄)FILE*以写方式打开文件,若文件不存在会新建一个文件W写入方式,在打开文件之前都会将文件内容全部清空追加写方式,其用法与写方法一致,不同在于a方法可…...
基于尚硅谷FreeRTOS视频笔记——15—系统配制文件说明与数据规范
目录 配置函数 INCLUDE函数 config函数 数据类型 命名规范 函数与宏 配置函数 官网上可以查找 最核心的就是 config和INCLUDE INCLUDE函数 这些就是裁剪的函数 它们使用一个ifndef。如果定义了,就如果定义了这个宏定义,那么代码就生效。 通过ifn…...
Linux网络编程 深入解析TFTP协议:基于UDP的文件传输实战
知识点1【TFTP的概述】 学习通信的基本:通信协议(具体发送上面样的报文)、通信流程(按照什么步骤发送) 1、TFTP的概述 tftp:简单文件传输协议,**基于UDP,**不进行用户有效性验证 …...
c# MES生产进度看板,报警看板 热流道行业可用实时看生产进度
MES生产进度看板,报警看板 热流道行业可用实时看生产进度 背景 本软件是给宁波热流道行业客户开发的生产电子看板软件系统 功能 1.录入工艺流程图(途程图)由多个站别组成。可以手动设置每个工艺站点完成百分比。 2.可以看生成到哪个工…...
Qt unknown module(s) in qt:serialport解决方法
在Ubuntu和CentOS系统中,若使用Qt时遇到Unknown module(s) in QT: serialport错误,通常是由于未正确安装Qt的串口模块(QSerialPort)或项目配置不当导致。以下是针对两种系统的解决方案: 一、安装Qt串口模块 1. Ubuntu/Debian系列 安装开发包: 执行以下命令安装Qt5串口模…...
AtCoder ABC402 A~D 题解
A - CBC 题目大意 给点字符串 S S S,输出其中所有大写字母。 思路 根据题意模拟即可。 代码 #include <cstdio> #include <iostream> #include <algorithm> using namespace std;int main() {string s;cin >> s;for (int i 0; i &l…...
2025.04.19-阿里淘天春招算法岗笔试-第二题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 秒杀顺子查找 问题描述 K小姐是一名热爱扑克牌的玩家。她定义一个数列是"顺子",当且仅当将该数列排序后,每个元素恰好比前一个元素大 1 1...
初识Redis · C++客户端string
目录 前言: string的API使用 set get: expire: NX XX: mset,mget: getrange setrange: incr decr 前言: 在前文,我们已经学习了Redis的定制化客户端怎么来的,以及如何配置好Redis定制化客户端&…...
华硕原厂系统枪神9/9p超竟版-WIN11原装开箱出厂系统安装
华硕原厂系统枪神9/9p超竟版-WIN11-24H2-专业工作站版本安装可带F12-ASUSRecovery恢复功能 适用机型: G635LX、G635LW、G835LX、G835LW、G615LW、G615LP、G615LM、G615LH G815LW、G815LP、G815LM、G815LH、G635LR、G835LR、G615LR、G815LR 远程恢复安装ÿ…...
CF1016赛后总结
文章目录 前言T1:Ideal GeneratorT2:Expensive NumberT3:Simple RepetitionT4:Skibidi TableT5:Min Max MEXT6:Hackers and Neural NetworksT7:Shorten the Array 前言 由于最近在半期考试,更新稍微晚了一点,还望大家见谅 &#…...
QT聊天项目DAY06
1.从git上同步项目 编译测试,编译通过 Post请求测试 测试成功 2. email is 打印有问题,检查 解析结果是存储在jsonResult中的,修改 3. 客户端实现Post验证码请求 3.1 同步Qt客户端项目 检查QT版本,由于我在公司用的还是QT5.12.9…...
GNU,GDB,GCC,G++是什么?与其他编译器又有什么关系?
文章目录 前言1. GNU和他的工具1.1 gcc与g1.2 gdb 2.Windows的Mingw/MSVC3.LLVM的clang/clang4.Make/CMake 前言 在开始之前我们先放一段Hello World:hello.c #include <stdio.h>int main() {printf("Hello World");return 0; }然后就是一段老生常…...
【AI提示词】IT专家顾问
提示说明 IT 专家顾问是一位专注于IT行业的专家,拥有深厚的技术背景和广泛的知识储备。他们能够为企业、政府机构或其他组织提供技术支持、解决方案设计和战略规划。 提示词 # Role: IT 专家顾问## Profile - **语言**: 中文 - **描述**: IT 专家顾问是一位专注于…...
笔记整理五
STP生成树 stp生成树是用于解决二层环路问题的协议。 二层环路为有以下三种: 1.广播风暴 2.MAC地址的偏移(每一次循环,都会导致交换机来回刷新MAC地址表记录) 3.多帧复制 stp生成树:需要将原本的环型拓扑结构转换…...
Java中“this”关键字梳理详解
在Java中,this 是一个非常重要的关键字,它表示当前对象的引用。也就是说,当你在某个类的实例方法或构造器中时,this 指向调用该方法或创建的当前对象实例。以下将结合代码示例和具体场景,详细讲解 this 的用法及其作用…...
mybatis plus打印sql日志到指定目录
1、mybatis plus打印sql日志 参考文档:mybatis plus打印sql日志_mybatisplus日志打印-CSDN博客 2、修改 修改InfoLevelLogger Override public void debug(String s) {// 修改这里logger.info(s);log.debug(s); } 增加:log.debug(s); 修改logback.x…...
奥比中光tof相机开发学习笔记
针对奥比中光 tof相机,官方提供的资料如下ProcessOn Mindmap|思维导图 Orbbec SDK Python Wrapper基于Orbbec SDK进行设计封装,主要实现数据流接收,设备指令控制。下面就其开发适配进行如下总结: (1)系统配…...
Oracle游标和触发器
--1.游标 --什么是游标 --游标是数据库在内存中开辟的数据缓冲区 --作用:用于遍历查询返回之后的结果集(多条数据结果) --游标分类:隐式游标,显示游标,REF游标(动态游标) --游标的状…...
【面试向】点积与注意力机制,逐步编码理解自注意力机制
点积(dot product)两个向量点积的数学公式点积(dot product)与 Attention 注意力机制(Attention)注意力机制的核心思想注意力机制中的缩放点积自注意力机制中,谁注意谁? 逐步编码理解…...
00.IDEA 插件推荐清单(2025)
IDEA 插件推荐清单 精选高效开发必备插件,提升 Java 开发体验与效率。 参考来源:十六款好用的 IDEA 插件,强烈推荐!!!不容错过 代码开发助手类 插件名称功能简介推荐指数CodeGeeX智能代码补全、代码生成、…...
一个 CTO 的深度思考
今天和一些同事聊了一会,以下是我的观点 我的观点,成年人只能筛选,不能培养在组织中,应该永远向有结果的人看齐。不能当他站出来讲话的时候,大家还要讨论讨论,他虽然拿到结果了,但是他就是有一…...
MVC/MVVM 高级应用的深度解析
状态共享与同步 跨组件状态管理策略 状态变更的传播机制优化 状态快照与时间旅行调试 状态持久化 本地存储策略 状态序列化与反序列化 与服务端状态同步 数据绑定进阶 双向绑定优化 脏检查机制优化 基于Proxy/Object.defineProperty的实现差异 批量更新策略 自定义…...
SQL通用语法和注释,SQL语句分类(DDL,DML,DQL,DCL)及案例
目录 SQL通用语法和注释 SQL语句分类(DDL,DML,DQL,DCL,TPL,CCL) DDL(数据定义语言) 数据库操作 查询(SHOW、SELECT) 创建(CREAT…...
当算力遇上马拉松:一场科技与肉身的极限碰撞
目录 一、从"肉身苦修"到"科技修仙" 二、马拉松的"新大陆战争" 三、肉身会被算法"优化"吗? 马拉松的下一站是"人机共生"时代 当AI能预测你的马拉松成绩,算法能规划最佳补给方案,智能装备让训练效率翻倍——你还会用传…...
