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')允许在取消订阅文本变化事件时触发自定义的回调事件。两者都是文本变化相关,而textChangeselectionChange的区别在于,textChange回调函数获取的是字符串内容,selectionChange获取的是选择时原先字符串及当前字符串开始和结束的字符的位置。

cursorContextChange则是光标变化事件,监听的参数是xyheight。需要注意是的,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

1 回复

更多关于HarmonyOS鸿蒙Next中获取光标前的文字错误如何解决的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


使用off('selectionChange')监听光标选择范围变化事件,确保在输入法停止或失去焦点时获取光标前的文字。避免使用ononClick回调,因为它们在光标编辑状态下无法及时获取最新内容。通过getForwardSync()方法在selectionChange回调中获取光标前的文字。

回到顶部