HarmonyOS鸿蒙Next中获取光标前的文字错误如何解决
HarmonyOS鸿蒙Next中获取光标前的文字错误如何解决
【问题现象】
新增操作:上屏一个字母:a,随后获取光标前的文字,获取到的值为空,预期为a。再上屏一个a,此时输入框中为aa,获取光标前文字为a,预期为aa。
删除操作:此时输入框中为aaa,点击删除,获取光标前文字为aaa,预期为aa。

【定位思路】
根据文字描述,方法没有及时获取或刷新光标前的文字,并且问题要求的是上屏之后立即获取文字。
如上图调用,因为调用时机不对,当前光标仍然处于编辑状态,getForwardSync()获取的是上一次光标状态的结果,才会导致输入和删除获取的都是上一次操作的结果。
【解决方案】
on回调是某些特定事件发生时触发,比如获得焦点或者输入法启动,onclick同理,所以在光标还在编辑状态时采用onClick或者on回调显然是不可行的,应该采用输入法kit的off('selectionChange')来实现监听回调,获取光标的值。off回调在输入法停止或失去焦点时候触发,而off('selectionChange')监听的是取消订阅文本选择范围变化事件。
同理off('textChange')允许在取消订阅文本变化事件时触发自定义的回调事件。两者都是文本变化相关,而textChange和selectionChange的区别在于,textChange回调函数获取的是字符串内容,selectionChange获取的是选择时原先字符串及当前字符串开始和结束的字符的位置。
cursorContextChange则是光标变化事件,监听的参数是x,y,height。需要注意是的,y为光标上端的y坐标值,而-x才是光标上端的坐标值,height为光标的高度值。
try {
inputMethodEngine.getKeyboardDelegate()
.off('selectionChange', (oldBegin: number, oldEnd: number, newBegin: number, newEnd: number) => {
console.log('delete selectionChange notification.');
// 此处实现getForwardSync()方法
});
} catch (err) {
console.error(`Failed to selectionChange: ${JSON.stringify(err)}`);
}
更多关于HarmonyOS鸿蒙Next中获取光标前的文字错误如何解决的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中获取光标前的文字错误如何解决的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
使用off('selectionChange')监听光标选择范围变化事件,确保在输入法停止或失去焦点时获取光标前的文字。避免使用on或onClick回调,因为它们在光标编辑状态下无法及时获取最新内容。通过getForwardSync()方法在selectionChange回调中获取光标前的文字。

