HarmonyOS 鸿蒙Next开发者技术支持-自定义表情键盘删除事件
HarmonyOS 鸿蒙Next开发者技术支持-自定义表情键盘删除事件
背景:司内小伙伴在开发自定义键盘时,发现下面表情符号4~9无法删除,需要点击多次。
在看到这个问题时,第一感官,不应该呀,调用系统的API即可。
(1)deleteText
(2)维护输入事件双向监听,判断表情符删除(夭折,需要判断的东西太多)
那只能从系统api 入手
尝试打印表情4~9长度:3,百度正则:
/[0-9]\u20E3\uFE0F/u
嗯,那岂不是判断下正则,如果是这几个的表情就解决问题了:
this.controller.deleteText({
start: inputValue.length - 3,
end: inputValue.length
})
哎,打脸来的就是这么的迅速…
在提供给司内小伙伴方案的时候发现,光标问题没有解决,并且长按选择删除也有问题…很快司内小伙伴也反馈了相同问题。
那岂不是还要判断光标,有没有其它坑?想想就麻烦,不如等着系统修复吧(系统自带的键盘也有该问题)…
经过一番抉择,不如尝试解决下?
其实目前需要兼容的只有4~9,那么是不是除了这几个表情符直接调用系统方法即可。
增加判断方法:
function isBadEmoji(s: string): boolean {
return /[0-9]\u20E3\uFE0F/u.test(s);
}
监听输入框选择事件:
.onTextSelectionChange((start, end) => {
this.selectStart = start
this.selectEnd = end
})
删除事件:
const caret = this.controller.getCaretOffset().index;
const hasBadEmoji = this.selectStart - this.selectEnd == 3 || this.selectStart - this.selectEnd == 0;
if (
hasBadEmoji && this.inputValue.length >= 3 &&
this.isBadEmoji(this.inputValue.slice(caret - 3, caret))
) {
this.controller.deleteText({
start: caret - 3,
end: caret
})
} else {
sendKeyEvent({
type: KeyType.Down,
keyCode: 2055,
keyText: '',
keySource: KeySource.Keyboard,
deviceId: 0,
metaKey: 0,
timestamp: 0,
stopPropagation: () => {
},
intentionCode: IntentionCode.INTENTION_DOWN
})
}
目前测试下来没得问题。如有小伙伴发现问题,欢迎指正。万分感谢~
问题解决方案到这里就结束了,同时附带一个内推,技术栈要求如下:(咨询入职后,惊喜多多,欢迎随时联系):
1、安卓+鸿蒙
2、RN+鸿蒙
3、Flutter鸿蒙
4、IOS+鸿蒙
5、鸿蒙APP测试(只要移动端经验,需要懂鸿蒙工具使用、会自动化)
更多关于HarmonyOS 鸿蒙Next开发者技术支持-自定义表情键盘删除事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS中处理自定义表情键盘删除事件,可通过监听InputMethodController的onKeyEvent回调实现。当检测到删除键事件(KeyCode.KEY_DEL)时,执行删除逻辑。使用TextInputClient的deleteBackward方法删除前一个字符。需在Ability或Page中注册InputMethodController,并在onKeyEvent中处理KeyEvent.ACTION_DOWN事件。示例代码片段:
let inputMethodController = new inputMethod.InputMethodController();
inputMethodController.onKeyEvent((keyEvent) => {
if (keyEvent.keyCode === inputMethod.KeyCode.KEY_DEL && keyEvent.action === inputMethod.KeyAction.DOWN) {
let textInputClient = inputMethodController.getTextInputClient();
textInputClient.deleteBackward(1);
}
});
更多关于HarmonyOS 鸿蒙Next开发者技术支持-自定义表情键盘删除事件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS Next自定义表情键盘删除问题,解决方案思路清晰有效。关键点在于:
-
识别特殊表情符号(4-9)的Unicode组合长度为3,使用正则表达式/[0-9]\u20E3\uFE0F/u进行匹配判断
-
通过监听TextSelectionChange事件获取光标位置和选择范围
-
删除逻辑处理:
- 当检测到是特殊表情时(hasBadEmoji为true且长度≥3),执行deleteText删除3个字符
- 其他情况发送KeyEvent.Down事件进行常规删除
这种方案确实能解决当前问题,且考虑了光标位置和选择范围的处理。对于HarmonyOS开发者来说,这种处理特殊Unicode字符的思路值得参考。
需要注意的是,这种方案是针对特定表情符号的临时解决方案,如果后续系统API修复了这个问题,建议及时切换到标准API实现。