HarmonyOS Web组件软件盘弹出时,页面不跟随键盘上移 (API12+)
鸿蒙ArkUI探索 2026-01-14 17:47:23 在h5页面中有输入框,点击输入框弹起软件盘,发现页面并没有跟随上移,也没有扩大滚动区域,导致输入框被软键盘遮挡,看不见输入的内容。
您需要先 登录 才能评论/回答
全部评论(1)
【背景知识】
keyboardAvoidMode:Web组件的属性,用于设置软键盘避让模式。
【解决方案】
可尝试设置Web组件的keyboardAvoidMode属性,以避免键盘遮挡输入区域。
参考以下Demo:
import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';
import { window } from '@kit.ArkUI';
@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController();
@State toolOff: number = 0;
aboutToAppear(): void {
try {
webview.WebviewController.setWebDebuggingAccess(true);
} catch (error) {
console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
}
}
//监听键盘高度
private listenKeyboard() {
window.getLastWindow(getContext(this)).then(currentWindow => {
//监听键盘高度,处理工具条偏移量
currentWindow.on('keyboardHeightChange', (data) => {
let keyboardHeight = Math.floor(px2vp(data));
if (keyboardHeight > 0) {
//键盘编辑态,偏移量 = 键盘高度
this.toolOff = keyboardHeight
} else {
//无键盘编辑态,安全区高度
this.toolOff = 0
}
})
})
}
build() {
Stack() {
Column() {
Web({ src: 'www.***.com', controller: this.controller })
.javaScriptAccess(true)
.fileAccess(true)
.domStorageAccess(true)
.geolocationAccess(true)
.cacheMode(CacheMode.Default)
.zoomAccess(false)
.mixedMode(MixedMode.All)
.multiWindowAccess(true)
.darkMode(WebDarkMode.Auto)
.allowWindowOpenMethod(true)
.onControllerAttached(() => {
})
.blurOnKeyboardHideMode(BlurOnKeyboardHideMode.BLUR)
.keyboardAvoidMode(WebKeyboardAvoidMode.RESIZE_VISUAL)
.onFirstContentfulPaint(() => {
this.listenKeyboard();
})
//编辑态避让区
Blank()
.opacity(0.5)
.width('100%')
.height(this.toolOff)
}
}
}
}
更多软键盘避让功能开发指南参考:Web组件对接软键盘。
2026-01-14 17:47:23