HarmonyOS 鸿蒙Next软键盘弹出将界面挤出屏幕外解决办法
HarmonyOS 鸿蒙Next软键盘弹出将界面挤出屏幕外解决办法
我的界面是类似微信聊天房间,上面是页面title,中间是消息列表list,最下方是输入框
问题:
当软键盘弹出来的时候整个页面会被顶起来,title超出屏幕不可见,偏移量是软键盘的高度
找了很久,没找到相关设置的api
解决办法:
首先监听软键盘:
window.getLastWindow(this.context).then(window => {
window.on(‘keyboardHeightChange’, (data) => {
Logger.i(‘keyboardHeightChange:’ + data)
this.keyboardHeight = data
})
})
* 注意这个data的单位是px
对title动态设置margin Top值:
@State keyboardHeight: number = 0
PageTitle()
.margin({ top: ${<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.keyboardHeight}px
})
这样界面被顶起来的时候下方输入框会被直接顶起来,title设置的margin值为软键盘的高度,title会继续显示在原始位置
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
在Ability中设置
windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE);
KeyboardAvoidMode.RESIZE:虚拟键盘抬起时压缩页面大小为减去键盘的高度
KeyboardAvoidMode.OFFSET:虚拟键盘抬起时把页面上抬直到露出光标
list.reverse()将数据倒置,再通过scroller控制滚动到最底部,目前我是这么实现的,效果还可以,官方api中没有像Android Recyclerview那样数据翻转的属性设置
针对HarmonyOS 鸿蒙Next软键盘弹出将界面挤出屏幕外的问题,可以采取以下解决办法:
首先,监听软键盘的高度变化。通过window
模块的on('keyboardHeightChange')
方法,可以实时获取软键盘的高度。当软键盘弹出时,该方法会返回一个表示软键盘高度的数据,单位通常为px。
其次,根据软键盘的高度动态调整界面布局。例如,如果界面顶部有标题栏(title),当软键盘弹出时,可以动态设置标题栏的marginTop值,使其等于软键盘的高度,从而保持标题栏在原始位置不被挤出屏幕外。
此外,还可以考虑设置软键盘的避让模式。在HarmonyOS中,可以通过windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode()
方法设置软键盘的避让模式。其中,KeyboardAvoidMode.RESIZE
模式会在虚拟键盘抬起时压缩页面大小为减去键盘的高度,而KeyboardAvoidMode.OFFSET
模式则会把页面上抬直到露出光标。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。