监听键盘实时弹窗、收起状态 - 鸿蒙 HarmonyOS Next

监听键盘实时弹窗、收起状态,可以通过获取键盘高度的变化来判定,也可以通过监测当前窗口系统规避区域的变化,两种方式皆可;

监测键盘高度变化

  /**
   * 监听键盘显示或隐藏状态
   * state : 0 收起 & 1 弹出 & 2 变更
   * keyboardHeight : 键盘高度 number
   * V3.4.62
   * 20250306
   * */
  static listenKeyboardState() {
    console.info('[事件监听] - 键盘');
    /**
     * 通过 window 模块的 on('keyboardHeightChange')方法
     * 监听软键盘高度变化,实时获取软键盘高度,默认初始隐藏状态为 0
     * */
    let keyboardHeight: number = 0; // 软键盘高度
    window.getLastWindow(getContext(_this)).then(currentWindow => {
      currentWindow.on('keyboardHeightChange', (data: number) => {
        keyboardHeight = px2vp(data);
        console.info(`[事件监听] - 键盘 - 高度: ${keyboardHeight}`);
        if (0 == keyboardHeight) {
          console.info('[事件监听] - 键盘 - 收起');
          // 通知对应模块业务当前状态
         EmitterCenter.shareInstance().post(EmitterKey.Emitter_KeyboardChangeState, new Object({
            state: '0',
            keyboardHeight: keyboardHeight,
          }));
        } else {
          console.info('[事件监听] - 键盘 - 弹出');
          // 通知对应模块业务当前状态
         EmitterCenter.shareInstance().post(EmitterKey.Emitter_KeyboardChangeState, new Object({
            state: '1',
            keyboardHeight: keyboardHeight,
          }));
        }
      });
    });
  }

监测窗口系统规避去变化

  /**
   * 监听键盘显示或隐藏状态
   * state : 0 收起 & 1 弹出 & 2 变更
   * keyboardHeight : 键盘高度 number
   * V3.4.62
   * 20250306
   * */
  static listenKeyboardState() {
    console.info('[事件监听] - 键盘');
    /**
     * 通过 window 模块的 on('avoidAreaChange')方式
     * 开启当前窗口系统规避区变化的监听,获取内容可视区域大小;
     * 以此来监听软键盘弹出与收起状态.
     * */
    let screenHeight: number = 0; // 安全区域高度
    let isKeyBoardHidden: boolean = false; // 软键盘是否隐藏
    window.getLastWindow(getContext(_this)).then(currentWindow => {
      let property = currentWindow.getWindowProperties();
      let avoidArea = currentWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_KEYBOARD);
      // 初始化显示区域高度
      screenHeight = px2vp(property.windowRect.height - avoidArea.topRect.height - avoidArea.bottomRect.height);
      // 开启当前窗口系统规避区变化的监听
      currentWindow.on('avoidAreaChange', data => {
        if (data.type !== window.AvoidAreaType.TYPE_KEYBOARD) {
          return;
        }

        if (0 >= data.area.bottomRect.height) {
          isKeyBoardHidden = true;
          console.info('[事件监听] - 键盘 - 隐藏');
        } else {
          isKeyBoardHidden = false;
          console.info('[事件监听] - 键盘 - 显示');
        }

        screenHeight = px2vp(property.windowRect.height - data.area.topRect.height - data.area.bottomRect.height);
        console.info(`[事件监听] - Screen height: ${screenHeight}`);
      });
    });
  }

以上便是此次分享的全部内容,希望能对大家有所帮助!

猜你喜欢

转载自blog.csdn.net/survivorsfyh/article/details/146069544
今日推荐