0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS应用自定义键盘解决方案

HarmonyOS开发者 来源:HarmonyOS开发者技术 2025-06-05 14:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

自定义键盘是一种替换系统默认键盘的解决方案,可实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以增强用户输入的安全性,避免敏感信息被截取或者泄露。本文介绍了自定义键盘的实现,并结合自定义键盘和系统键盘的切换、自定义键盘的布局避让等场景,介绍了自定义键盘的实际使用方式。

自定义键盘的实现

自定义键盘的实现包括以下5个步骤:

自定义键盘布局实现

输入控件绑定自定义键盘布局

自定义键盘输入控制

自定义键盘光标控制

自定义键盘弹出与收起

自定义键盘布局实现

自定义键盘的布局以自定义组件的方式呈现,根据具体业务场景由开发者实现。自定义键盘的高度通过自定义组件根节点的height属性设置,宽度不可设置,默认铺满屏幕。

@Component
exportstructCustomKeyboard{
build() {
 Column() {
  }
 // 修改自定义组件根节点的height属性
  .height($r('app.float.keyboard_total_height'))
 }
}

输入控件绑定自定义键盘布局

输入控件(TextArea、TextInput、RichEditor、Search)支持通过customKeyboard属性绑定自定义键盘布局。绑定自定义键盘后,输入控件获取焦点时,不会拉起系统键盘,而是加载指定的自定义键盘。本文后续以TextInput控件为例进行介绍。

代码示例如下:

build() {
Column() {
 TextInput({
  placeholder:'绑定自定义键盘',
  text:this.inputText,
  controller:this.textInputController
  })
  // 绑定自定义键盘布局
   .customKeyboard(this.customKeyboard())
 }
}
@Builder
customKeyboard() {
CustomKeyboard()
}

自定义键盘输入控制

自定义键盘可以拦截手势事件,通过对状态变量的修改,实现文本的输入。

以英文键盘为例,监听EnglishButton的onClick事件,修改状态变量。

@Component
struct EnglishButton {
@ConsumeinputText: string;
 build() {
  Button(this.getEnglishText(this.item), { type: ButtonType.Normal })
   .onClick(() => {
   // 拦截自定义键盘按钮的点击事件,根据业务场景修改状态变量
   this.inputText =this.keyBoardController.onInput(this.getEnglishText(this.item));
   })
 }
}

通过对状态变量inputText的修改,实现文本输入。

@Component
exportstructTextInputComponent{
@ProvideinputText:string='';
build() {
 Column() {
  TextInput({
   placeholder:'绑定自定义键盘',
   text:this.inputText,
   controller:this.textInputController
   })
  }
 }
}

自定义键盘光标控制

通过监听TextInput的onTextSelectionChange生命周期,获取初始光标位置、文本输入后,调用TextInputController的caretPosition方法,设置最终光标位置。

获取光标位置:

TextInput({
placeholder:'绑定自定义键盘',
text:this.inputText,
controller:this.textInputController
})
// 监听光标位置变化
 .onTextSelectionChange((start:number, end:number) =>{
 this.keyBoardController.setCaretPosition(start, end);
 })

设置光标位置:

onChange(value: string) {
this.text = value;
if(this.keyBoardType !== Constants.SYSTEM_KEYBOARD) {
 // 设置光标位置
 this.textInputController?.caretPosition(this.targetCaretPos);
 }
}

自定义键盘弹出与收起

通过对焦点进行控制,可以实现键盘的弹出和收起。开发者也可以通过TextInputController的stopEditing方法控制键盘关闭,下面的自定义键盘示例中,点击确认按键关闭自定义键盘。

onInput(value:string):string{
switch(value) {
 case'确定':
  this.textInputController?.stopEditing();
  break;
 }
returnthis.text;
}

自定义键盘和系统键盘的切换

当需要实现同一个输入框内可以切换自定义键盘和系统键盘时,可以通过如下方式实现:

Tab栏点击“123”、“ABC”按钮,this.isCustomKeyboardAttach为true,TextInput绑定自定义键盘;点击“中文”按钮,this.isCustomKeyboardAttach为false,切换系统键盘。

TextInput({
 placeholder:'绑定自定义键盘',
 text:this.inputText,
 controller:this.textInputController
})
 .customKeyboard(this.isCustomKeyboardAttach ?this.customKeyboard() :null)

自定义键盘的布局避让

使用系统提供的自定义键盘避让功能

为了确保输入框不被自定义键盘挡住,系统默认提供了输入框避让自定义键盘的能力。在TextInput组件的customKeyboard属性设置supportAvoidance为true,开启系统提供的自定义键盘避让功能。

TextInput({
 placeholder:'绑定自定义键盘',
 text:this.inputText,
 controller:this.textInputController
})
 .customKeyboard(this.customKeyboard(), { supportAvoidance:true})

系统默认的自定义键盘避让功能只能保证输入框不被遮挡,输入框下方的组件可能会被自定义键盘挡住,如上图中所示,输入框下方的tab栏被自定义键盘挡住。为解决这一问题,需要开发者自己实现自定义键盘的避让功能。

开发者自己实现自定义键盘的避让功能

开发者需要监听自定义键盘根节点的onAreaChange生命周期,获取自定义键盘的高度,根据实际场景设置布局的避让。

总结

自定义键盘作为可定制化输入解决方案,通过模块化架构实现系统键盘的功能替代,其核心价值在于支持按键布局的重构与界面功能的自定义配置,同时集成场景化功能扩展模块,显著提升键盘输入效率与操作舒适度,构建输入数据链路防护体系,有效规避敏感信息泄露风险。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 键盘
    +关注

    关注

    4

    文章

    868

    浏览量

    41552
  • 开发者
    +关注

    关注

    1

    文章

    733

    浏览量

    17925
  • HarmonyOS
    +关注

    关注

    80

    文章

    2147

    浏览量

    35593

原文标题:HarmonyOS应用自定义键盘解决方案

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    HarmonyOS开发实例:【自定义Emitter】

    使用[Emitter]实现事件的订阅和发布,使用[自定义弹窗]设置广告信息。
    的头像 发表于 04-14 11:37 1621次阅读
    <b class='flag-5'>HarmonyOS</b>开发实例:【<b class='flag-5'>自定义</b>Emitter】

    HarmonyOS开发案例:【 自定义弹窗】

    基于ArkTS的声明式开发范式实现了三种不同的弹窗,第一种直接使用公共组件,后两种使用CustomDialogController实现自定义弹窗
    的头像 发表于 05-16 18:18 2301次阅读
    <b class='flag-5'>HarmonyOS</b>开发案例:【 <b class='flag-5'>自定义</b>弹窗】

    讲解一下HarmonyOS中的几个自定义组件用到的知识

    HarmonyOS 的 Component 组件对外提供了一个 DrawTask 接口,通过 addDrawTask 方法为组件添加一个 DrawTask,让开发者可以进行自定义绘制逻辑。首先我们
    发表于 03-16 16:05

    551做自定义键盘方案,电脑配置工具改键值,求程序代码?

    551做自定义键盘方案,电脑配置工具改键值,求程序代码。
    发表于 06-08 06:20

    1602自定义字符

    1602液晶能够显示自定义字符,能够根据读者的具体情况显示自定义字符。
    发表于 01-20 15:43 1次下载

    工程技术笔记-弹出自定义键盘应用

    随着我们使用不同美工图片,串口屏内置的系统键盘将无法完美匹配用户美工,或者内置键盘太小,不合适当前工程应用;自定义系统键盘,方便用户自行根据自身美工图片来调整对应的系统
    发表于 06-15 14:22 18次下载

    大彩串口屏弹出自定义键盘的应用详细资料免费下载

    本文档的主要内容详细介绍的是大彩串口屏弹出自定义键盘的应用详细资料免费下载。随着用户使用不同美工图片,我们内置的系统键盘将无法完美匹配用户美工,或者内置键盘太小,不合适当前工程应用;我
    发表于 05-15 08:00 2次下载
    大彩串口屏弹出<b class='flag-5'>自定义</b><b class='flag-5'>键盘</b>的应用详细资料免费下载

    HarmonyOS 中的几个自定义控件介绍

    HarmonyOS 开发自定义组件目前还不是很丰富,在开发过程中常常会有一些特殊效果的组件,这就需要我们额外花一些时间实现。
    的头像 发表于 01-04 13:49 3034次阅读

    自定义视图组件教程案例

    自定义组件 1.自定义组件-particles(粒子效果) 2.自定义组件- pulse(脉冲button效果) 3.自定义组件-progress(progress效果) 4.
    发表于 04-08 10:48 15次下载

    ArkUI如何自定义弹窗(eTS)

    自定义弹窗其实也是比较简单的,通过CustomDialogController类就可以显示自定义弹窗。
    的头像 发表于 08-31 08:24 3402次阅读

    使用基于云自定义IP的解决方案服务设计多媒体解决方案

    对于基于云的多媒体解决方案,有基于云的自定义转码器 IP,支持自动视频点播 (VOD) 管道。云服务提供的解决方案可提取源视频,使用云媒体转换器处理视频以在各种设备上播放,并存储转码后的媒体文件以按需交付给最终用户。
    的头像 发表于 10-26 11:17 1378次阅读
    使用基于云<b class='flag-5'>自定义</b>IP的<b class='flag-5'>解决方案</b>服务设计多媒体<b class='flag-5'>解决方案</b>

    使用基于IP的云自定义解决方案服务设计多媒体解决方案

      对于基于云的多媒体解决方案,有基于云的自定义转码器 IP,支持自动视频点播 (VOD) 管道。云服务提供的解决方案可以引入源视频,使用云媒体转换器处理视频以在各种设备上播放,并存储转码后的媒体文件以按需交付给最终用户。
    的头像 发表于 11-18 15:25 1163次阅读

    labview自定义控件

    labview自定义精美控件
    发表于 05-15 16:46 22次下载

    自定义算子开发

    一个完整的自定义算子应用过程包括注册算子、算子实现、含自定义算子模型转换和运行含自定义op模型四个阶段。在大多数情况下,您的模型应该可以通过使用hb_mapper工具完成转换并顺利部署到地平线芯片上……
    的头像 发表于 04-07 16:11 4841次阅读
    <b class='flag-5'>自定义</b>算子开发

    labview超快自定义控件制作和普通自定义控件制作

    labview超快自定义控件制作和普通自定义控件制作
    发表于 08-21 10:32 14次下载