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
回调中获取光标前的文字。