如何解决Web页面输入框拉起键盘后,页面头部被截断的问题

  1. 通过子窗口的方式实现弹窗,弹窗中嵌入了web页面。
  2. web页面中有TextInput输入框,点击输入框,拉起键盘。
  3. 子窗口整体上移,但是web页面头部被截断了。
HarmonyOS
2024-01-21 12:51:05
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
afirebird

可以通过监听软键盘弹出和收起来解决此问题:当软键盘弹出时,子窗口高度设置为屏幕高度-软键盘高度;当软键盘收起时,弹出子窗口高度为屏幕高度。

代码示例

// 子窗口页面布局 
import { webview } from '@kit.ArkWeb'; 
import { window } from '@kit.ArkUI'; 
 
@Entry 
@Component 
export struct SubWindowPage { 
  @State webViewVisibility: Visibility = Visibility.Visible; 
  private pageWidth = 320; 
  private pageHeight = 500; 
  private controller: webview.WebviewController = new webview.WebviewController(); 
  @State flexAlign: FlexAlign = FlexAlign.Center; 
  @State screenHeight: number | string = '100%'; 
 
  aboutToAppear() { 
    window.getLastWindow(getContext(this)).then(currentWindow => { 
      // 监视软键盘的弹出和收起 
      currentWindow.on('avoidAreaChange', async data => { 
        let property = currentWindow.getWindowProperties(); 
        let avoidArea = currentWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_KEYBOARD); 
        this.screenHeight = px2vp(property.windowRect.height - avoidArea.bottomRect.height); 
      }); 
    }) 
  } 
 
  build() { 
    Stack() { 
      Column() { 
        Web({ src: $rawfile('index.html'), controller: this.controller }) 
          .javaScriptAccess(true) 
          .fileAccess(false) 
          .zoomAccess(false) 
          .domStorageAccess(true) 
          .onlineImageAccess(true) 
          .horizontalScrollBarAccess(false) 
          .verticalScrollBarAccess(false) 
          .cacheMode(CacheMode.Online) 
          .width(this.pageWidth) 
          .height(this.pageHeight) 
          .border({ radius: 6 }) 
          .visibility(this.webViewVisibility) 
          .backgroundColor(Color.Pink) 
      } 
      .justifyContent(this.flexAlign) 
      .alignItems(HorizontalAlign.Center) 
      .width('100%') 
      .height('100%') 
    } 
    .width('100%') 
    .height(this.screenHeight) 
    .backgroundColor('#999955') 
    .alignContent(Alignment.Center) 
  } 
}

已于2024-1-30 18:34:33修改
分享
微博
QQ
微信
回复
2024-01-22 15:16:30
相关问题
js如何清空一个input 输入框内容
5785浏览 • 1回复 待解决
如何拉起设置蓝牙页面
352浏览 • 2回复 待解决
鸿蒙软键盘弹出页面底部按钮
2276浏览 • 0回复 待解决
this传递问题,该如何解决
344浏览 • 1回复 待解决
创建单例换了页面不生效问题
217浏览 • 1回复 待解决
如何控制软键盘弹出对页面的遮挡?
898浏览 • 1回复 待解决