请问一下在鸿蒙开发中,我想进行键盘收起的事件能监听,能做到么?

请问一下在鸿蒙开发中,我想进行键盘收起的事件能监听,能做到么?

阅读 461
2 个回答
  1. 引入模块:在鸿蒙开发中,引入 @ohos.multimodalInput 模块,该模块提供了与输入相关的功能,包括监听键盘事件,通过 import multimodalInput from '@ohos.multimodalInput'; 语句实现。
  2. 创建订阅者:使用 multimodalInput.createSubscriber() 创建一个输入事件订阅者。这个订阅者用于监听各种输入事件,包括键盘收起事件。例如 const subscriber = multimodalInput.createSubscriber();
  3. 监听键盘收起事件:调用订阅者的 on 方法,监听 multimodalInput.EventType.KEYBOARD_HIDE 事件。当键盘收起时,该事件会被触发,在回调函数中编写相应的处理逻辑。示例代码为 subscriber.on('keyboardHide', () => { console.log('键盘已收起'); });
  4. 取消订阅(可选):如果在某个阶段不再需要监听键盘收起事件,可以调用订阅者的 off 方法取消订阅,以避免不必要的资源占用。例如 subscriber.off('keyboardHide'); 取消对键盘收起事件的监听。

当前非输入法应用不提供直接监听软键盘显隐的方式,可通过监听键盘高度变化、监听窗口的系统规避区域变化或通过使用输入框的焦点事件等方式来间接监听软键盘的弹出和收起。

输入法应用可通过on('keyboardShow'|'keyboardHide')接口订阅输入法软键盘显示或隐藏事件。

监听键盘高度变化:通过window.on('keyboardHeightChange')事件可以监听键盘的高度变化。当键盘弹出时,返回的高度值为非零值;当键盘收起时,返回的高度值为0。

currentWindow.on('keyboardHeightChange', (data) => {
  if (data > 0) {
    console.info('键盘高度大于0,键盘已弹出');
  } else {
    console.info('键盘高度为0,键盘已收起');
  }
});

使用输入框的焦点事件:通过TextInput组件的onFocus和onBlur事件可以间接判断键盘的弹出和收起。当输入框获得焦点时,通常会触发键盘弹出;当输入框失去焦点时,键盘会收起。

TextInput({ placeholder: '请输入' })
  .width(350)
  .onFocus(() => {
    console.info('输入框获焦,键盘已弹出');
  })
  .onBlur(() => {
    console.info('输入框失焦,键盘已收起');
  });

监听窗口的系统规避区域变化:通过监听窗口的avoidAreaChange事件,可以获取键盘高度的变化。当键盘弹出时,系统规避区域的高度会变化。

currentWindow.on('avoidAreaChange', data => {
  if (data.type === window.AvoidAreaType.TYPE_KEYBOARD) {
    if (data.area.bottomRect.height > 0) {
      console.info('底部规避区高度大于0,键盘已弹出');
    } else {
      console.info('底部规避区高度为0,键盘已收起');
    }
  }
});

使用on('keyboardShow'|'keyboardHide')接口订阅输入法软键盘显示或隐藏事件(仅支持输入法应用调用),用法可参考官方示例