HarmonyOS 鸿蒙Next @ohos.window窗口监听到键盘弹出时为什么会重新走一遍aboutToAppear()
HarmonyOS 鸿蒙Next @ohos.window窗口监听到键盘弹出时为什么会重新走一遍aboutToAppear() 点击TextInput()组件, 弹出键盘时, screenHeight的值被刷新了, 但是监听键盘弹出的方法写在了aboutToAppear()中, 为什么键盘弹出的时候,会重新走到aboutToAppear中。
还有一个问题: 这个 try catch 写在什么场景下,作用是什么? 是因为返回的是Promise, 所以使用try catch吗 使用async await 可以吗 ,但是如下代码的.getLastWindow和.on返回的是void是空呀
import window from '[@ohos](/user/ohos).window';
@Entry
@Component
struct entry {
@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)
}
}
更多关于HarmonyOS 鸿蒙Next @ohos.window窗口监听到键盘弹出时为什么会重新走一遍aboutToAppear()的实战教程也可以访问 https://www.itying.com/category-93-b0.html
正常获取!
回答你的问题:
1、为什么键盘弹出的时候,会重新走到aboutToAppear中
因为你aboutToAppear是监听keyboardHeightChange的事件,只要高度变化了 就会触发。刚进入页面 键盘高度为0 点击之后有了高度 就会触发这个事件,就会重新赋值。
2、try catch 写在什么场景下,作用是什么?
用来捕获异常错误
3、使用async await 可以吗
可以
更多关于HarmonyOS 鸿蒙Next @ohos.window窗口监听到键盘弹出时为什么会重新走一遍aboutToAppear()的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
但是还是有一个疑问就是aboutToAppear
的生命周期,不是在执行build
函数之前就执行过了吗,为什么还会监听到keyboardHeightChange
事件, aboutToAppear
中的内容不是只执行一次的嘛,
还有一个问题! 哥,再打扰你一下, 你这个log为什么只输出一遍呀, 我在评论区放个图片,你看一下,我的log,
关于监听操作的一些说明:
aboutToAppear
开始执行监听操作,但这个监听操作只会执行一次。- 监听键盘高度改变的行为会一直存在。
能理解吗?
你们是next版本的吗
DevEco Studio目前最后的一个版本,在组件内用不了,只能在组件外使用,有没有大佬帮忙看下的
你们的DevEco Studio的版本是多少啊
为什么,我使用window引入以后,在
@Component 创建的组件里面用不了
只能在
@Component 组件外部使用
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
有时候是两次 有时候是一次 我也没搞懂是为啥
交给玄学吧~,
为什么每次打开键盘和关闭键盘的时候,这个log会输出两次
在HarmonyOS(鸿蒙)中,aboutToAppear()
是 Ability 或 Page 的生命周期回调方法之一,通常用于在页面即将显示时进行初始化操作。当键盘弹出时,系统可能会触发页面布局的重新调整,导致页面重新走一遍生命周期回调,包括 aboutToAppear()
。
具体原因如下:
-
布局变化:键盘弹出会导致页面布局发生变化,系统需要重新计算和调整页面内容的位置。这种布局变化可能会触发页面的重新渲染,从而导致
aboutToAppear()
被再次调用。 -
生命周期管理:HarmonyOS 在页面布局发生重大变化时,为了确保页面状态的一致性,可能会重新触发页面的生命周期回调。
aboutToAppear()
作为页面即将显示时的回调方法,会被重新调用以进行必要的初始化操作。 -
系统优化:在某些情况下,系统可能会认为键盘弹出后页面的显示状态发生了变化,因此会重新调用
aboutToAppear()
以确保页面的正确显示和功能。
这种行为是系统设计的一部分,旨在确保在布局变化时页面的状态和显示内容保持一致。开发者需要在 aboutToAppear()
中处理好初始化的逻辑,避免因多次调用导致的不必要操作或资源浪费。