在HarmonyOS NEXT中 点击系统键盘的隐藏按钮,不自动失焦,需要手工触发下别的位置才可以触发失焦的解决方法?

在HarmonyOS NEXT中 点击系统键盘的隐藏按钮,不自动失焦,需要手工触发下别的位置才可以触发失焦的解决方法?

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

阅读 666
avatarAI BotBETA
### 解决方法

在HarmonyOS NEXT中,当点击系统键盘的隐藏按钮时,如果希望自动触发输入框的失焦,可以通过监听键盘隐藏事件并在事件回调中手动设置输入框的焦点状态来解决。具体步骤如下:

1. **监听键盘隐藏事件**:
   使用系统提供的API监听键盘的隐藏事件。

2. **手动设置输入框失焦**:
   在键盘隐藏事件的回调中,通过编程方式设置输入框的焦点为`false`,从而触发失焦。

示例代码(假设使用的是Java或Kotlin):

// 监听键盘隐藏事件
// 注意:这里的监听方式可能因具体API版本和框架有所不同,以下为示意代码
someViewOrActivity.setOnKeyboardHiddenListener(new OnKeyboardHiddenListener() {

@Override
public void onKeyboardHidden(int keyCode, KeyEvent event) {
    // 手动设置输入框失焦
    editText.clearFocus(); // 或者使用 editText.requestFocus(View.FOCUS_CLEAR);
}

});


注意:
- `someViewOrActivity`代表你需要监听键盘事件的视图或活动。
- `editText`是你的输入框控件。
- 具体的监听方法可能会根据HarmonyOS NEXT的SDK版本有所不同,请参考官方文档进行相应调整。

通过这种方式,可以在点击系统键盘隐藏按钮时自动触发输入框的失焦,而无需用户手动点击其他位置。
1 个回答

用H5的一个输入框拉起原生键盘,在完成输入之后,点击键盘上的收起/隐藏键,键盘隐藏,不会自动触发失焦。是正常的。如果想要失焦的效果需要开发者自行完善逻辑。
监听键盘出现和隐藏通过window.on(‘keyboardHeightChange’)事件,返回高度为0表示键盘隐藏,不为0表示弹出键盘,每次弹出或隐藏键盘均只触发一次
h5中点击系统键盘的完成按钮,不自动收起键盘,这是当前的规格,并不属于bug
参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-refere...
参考demo:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 
import { hilog } from '@kit.PerformanceAnalysisKit'; 
import { window } from '@kit.ArkUI'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
 
export default class EntryAbility extends UIAbility { 
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 
  } 
 
  onDestroy(): void { 
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); 
  } 
 
  onWindowStageCreate(windowStage: window.WindowStage): void { 
    // Main window is created, set main page for this ability 
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 
 
    windowStage.loadContent('pages/Index', (err) => { 
      if (err.code) { 
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 
        return; 
      } 
 
      // 获取应用主窗口。 
      let windowClass: window.Window | undefined = undefined; 
 
      windowStage.getMainWindow((err: BusinessError, data) => { 
        let errCode: number = err.code; 
        if (errCode) { 
          console.error(`Failed to obtain the main window. Cause code: ${err.code}, message: ${err.message}`); 
          return; 
        } 
        windowClass = data; 
        console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data)); 
 
        try { 
          //开启固定态输入法窗口软键盘高度变化的监听。 
          windowClass.on('keyboardHeightChange', (data) => { 
            console.info('Succeeded in enabling the listener for keyboard height changes. Data: ' + JSON.stringify(data)); 
          }); 
        } catch (exception) { 
          console.error(`Failed to enable the listener for keyboard height changes. Cause code: ${exception.code}, message: ${exception.message}`); 
        } 
      }) 
 
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); 
    }); 
  } 
 
  onWindowStageDestroy(): void { 
    // Main window is destroyed, release UI related resources 
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); 
  } 
 
  onForeground(): void { 
    // Ability has brought to foreground 
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); 
  } 
 
  onBackground(): void { 
    // Ability has back to background 
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); 
  } 
}

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进