HarmonyOS鸿蒙Next中如何解决切换输入框导致输入法重复拉起问题

HarmonyOS鸿蒙Next中如何解决切换输入框导致输入法重复拉起问题

【问题现象】

在面对多组输入框场景时如(用户名、密码、验证码),点击输入法键盘上的下一步跳转至下一个输入框,输入法会先隐藏再弹起,影响使用体验。如图:

点击放大

【背景知识】

TextInput中,按下输入法回车键会触发onsubmit()回调。onsubmit()是API 11的回调函数。onsubmit()回调函数一共有两个入参,EnterKeyTypeSubmitEvent,其中EnterKeyType决定回车键的类型如nextdone等,SubmitEvent则是用户提交事件,只有keepEditableState()方法。

【定位思路】

输入法隐藏再弹起是因为执行focusControl.requestFocus方法时焦点转移其他组件产生暂时失焦,通过给TextInput的onsubmit()方法里添加可选入参SubmitEvent,并在onsubmit()中添加SubmitEvent.keepEditableState()方法,可以阻止输入法在失焦情况下关闭,实现输入法键盘在切换编辑栏时保持状态不关闭。

但是遇到最后一个输入框时使用keepEditableState()方法会导致输入法键盘无法通过回车键关闭。所以可在该方法外面嵌套一层对于EnterKeyType判断,若EnterKeyTypenext则执行keepEditableState()方法,若EnterKeyTypedone则不执行。

【解决方案】

代码示例如下:

.onSubmit((enterKey: EnterKeyType, event: SubmitEvent) => {
  let nextKeyNo: number = this.keyNo + 1;
  let nextKeyStr: string = 'code' + nextKeyNo;
  focusControl.requestFocus(nextKeyStr);//focusControl.requestFocus()调用此接口可以主动让焦点转移至指定id的组件
  if(enterKey == EnterKeyType.Next) {
    event.keepEditableState();//如果回车键类型为Next则保持输入框不隐藏
  }
})

更多关于HarmonyOS鸿蒙Next中如何解决切换输入框导致输入法重复拉起问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中如何解决切换输入框导致输入法重复拉起问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,切换输入框导致输入法重复拉起的问题可以通过以下方式解决:

  1. TextInputonsubmit()方法中添加SubmitEvent参数。
  2. onsubmit()中调用SubmitEvent.keepEditableState()方法,阻止输入法在失焦情况下关闭。
  3. onsubmit()方法外嵌套一层对EnterKeyType的判断,若EnterKeyTypenext则执行keepEditableState()方法,若为done则不执行。

示例代码如下:

.onSubmit((enterKey: EnterKeyType, event: SubmitEvent) => {
  let nextKeyNo: number = this.keyNo + 1;
  let nextKeyStr: string = 'code' + nextKeyNo;
  focusControl.requestFocus(nextKeyStr);
  if(enterKey == EnterKeyType.Next) {
    event.keepEditableState();
  }
})

通过以上方法,可以在切换输入框时保持输入法键盘不关闭,提升用户体验。

回到顶部