HarmonyOS 鸿蒙Next中获取键盘高度的API获取不到键盘高度?

HarmonyOS 鸿蒙Next中获取键盘高度的API获取不到键盘高度?

代码如下,写在一个新项目中就可以获取到键盘高度!所以为啥在公司项目中获取不到键盘高度呢?

await window.getLastWindow(getContext(this)).then(currentWindow => {
  currentWindow.on('keyboardHeightChange', (data) => {
    this.keyboardHeight = px2vp(data);
  })
})
3 回复

因为   getLastWindow 是获取当前应用内最上层显示的子窗口,如果没有子窗口或者子窗口没有展示出来,才会返回应用主窗口

可以改用下面的方式获取主窗口,就好使了,代码如下:

import { WindowManager } from '@kit.SpeechKit'

await WindowManager.getWindowStage().getMainWindow().then(currentWindow => {
  currentWindow.on('keyboardHeightChange', (data) => {
    this.keyboardHeight = px2vp(data);
  })
})

更多关于HarmonyOS 鸿蒙Next中获取键盘高度的API获取不到键盘高度?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,获取键盘高度应使用Window类的onKeyboardHeightChange回调。示例代码:

import window from '@ohos.window';

let windowClass = await window.getLastWindow(this.context);
windowClass.on('keyboardHeightChange', (height) => {
  console.log(\`Keyboard height: \${height}\`);
});

注意事项:

  1. 需API 9+支持
  2. 确保订阅事件时键盘已弹出
  3. 高度单位为px
  4. 键盘收起时height返回0,

在HarmonyOS Next中获取键盘高度失败可能有以下几个原因:

  1. 上下文环境问题:公司项目可能使用了不同的Context对象,导致window.getLastWindow()获取到的窗口实例不正确。建议检查getContext(this)返回的上下文是否正确。

  2. 生命周期问题:确保这段代码是在组件加载完成后执行的。如果在onPageShow之前调用,可能无法正确监听键盘事件。

  3. 权限问题:检查项目配置文件中是否声明了必要的权限:

"abilities": [
  {
    "name": "MainAbility",
    "type": "page",
    "configChanges": ["keyboard"]
  }
]
  1. 项目配置差异:公司项目可能有自定义的主题或窗口样式设置,影响了键盘事件的触发。可以检查res/base/profile下的配置。

  2. 多窗口场景:如果项目是多窗口应用,需要确认当前获取的是正确的活动窗口。

建议先通过日志确认currentWindow是否成功获取,以及事件监听是否被正确注册。如果问题仍然存在,可以尝试在onWindowStageCreate生命周期中注册监听器。

回到顶部