HarmonyOS 鸿蒙Next 在监听软键盘高度变化时,每次打开或者关闭软键盘的时候,回调函数为什么会走两遍
HarmonyOS 鸿蒙Next 在监听软键盘高度变化时,每次打开或者关闭软键盘的时候,回调函数为什么会走两遍
代码如下,运行后,执行两个操作,第一步点击TextInput()弹出键盘,第二步关闭键盘
import window from '@ohos.window';
@Entry
@Component
struct BarView_4 {
@State screenHeight: number = 0;
aboutToAppear() {
try {
window.getLastWindow(getContext(), (err, data) => {
if (err.code) {
console.info('tip', '获取顶部窗口错误' + JSON.stringify(err));
return;
}
let property = data.getWindowProperties(); // 获取当前窗口属性
this.screenHeight = px2vp(property.windowRect.height); // 初始化高度
try {
data.on('keyboardHeightChange', (data) => {
console.info('tip', '成功监听到键盘高度变化. Data: ' + px2vp(data)); // 303.66 单位vp
this.screenHeight = px2vp(property.windowRect.height - data); // 可视化区域高度减去键盘高度
});
} catch (exception) {
console.info('tip', '监听键盘高度变化失败. Cause: ' + JSON.stringify(exception));
}
});
} catch (exception) {
console.info('tip', '获取顶部窗口错误' + JSON.stringify(exception));
}
}
build() {
Column() {
TextInput({ placeholder: '显示键盘的时候,我在上面的可视区域,我也是居中的' })
}.width('100%').height(this.screenHeight).justifyContent(FlexAlign.Center)
}
}
输入的日志如下,问题: 每次打开或者关闭键盘的时候,这个日志都会输出两次,请问这是什么原因导致的
![cke_26407.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAABkF4yFAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deXBUZd3H8Z+/z737u27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t27d9737t2
更多关于HarmonyOS 鸿蒙Next 在监听软键盘高度变化时,每次打开或者关闭软键盘的时候,回调函数为什么会走两遍的实战教程也可以访问 https://www.itying.com/category-93-b0.html
版本问题吧,我这边版本是好的
更多关于HarmonyOS 鸿蒙Next 在监听软键盘高度变化时,每次打开或者关闭软键盘的时候,回调函数为什么会走两遍的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,监听软键盘高度变化时,回调函数可能会被触发两次的原因通常与系统的事件分发机制有关。当软键盘打开或关闭时,系统可能会发送两次事件:第一次是键盘高度即将变化的通知,第二次是键盘高度变化完成的通知。这种设计是为了让应用在处理键盘高度变化时有更多的灵活性,能够在变化前和变化后分别执行相应的逻辑。
此外,某些情况下,系统可能会因为不同的输入法或设备配置,导致键盘状态变化的信号被多次触发。例如,不同的输入法在打开或关闭时可能会有不同的行为,导致系统发送多个事件。
为了确保应用在处理键盘高度变化时的准确性,建议在回调函数中对事件进行去重处理,或者通过状态标志来判断是否需要执行相关逻辑。这样可以避免因为多次回调导致的重复操作。