输入框拉起键盘时,如何将底部布局弹起到键盘顶部?

输入框拉起键盘时,如何将底部布局弹起到键盘顶部

阅读 701
1 个回答

原因分析:
软件盘弹出的时候默认是顶起输入框,对于输入框以下的显示组件将被遮挡。

解决措施:
获取窗口内容规避的区域,规避区域的类型是软键盘区域 TYPE_KEYBOARD,当软键盘弹出,获取规避区域的高度,通过 margin-bottom 来设置,顶起组件。

参考代码如下:

import { window } from '@kit.ArkUI'; 
 
@Entry 
@Component 
struct ScrollExample { 
  scroller: Scroller = new Scroller(); 
  private arr: number[] = [0, 1, 2, 3, 4, 5]; 
  @State scrollHeight: number = 0; 
  @State isRebuild: boolean = false; 
  @State keyHeight: number = 0; 
  @State text: string = ''; 
 
  aboutToAppear() { 
    window.getLastWindow(getContext(this)).then(currentWindow => { 
      let property = currentWindow.getWindowProperties(); 
      // 初始化窗口高度 
      let avoidArea = currentWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_KEYBOARD); 
      this.scrollHeight = px2vp(property.windowRect.height - avoidArea.bottomRect.height); 
 
      // 监听软键盘的隐藏和显示 
      currentWindow.on('avoidAreaChange', async data => { 
        if (data.type !== window.AvoidAreaType.TYPE_KEYBOARD) { 
          this.keyHeight = avoidArea.bottomRect.height; 
          return; 
        } 
        this.scrollHeight = px2vp(property.windowRect.height - data.area.bottomRect.height); 
      }) 
    }) 
  } 
 
  build() { 
    Stack({ alignContent: Alignment.TopStart }) { 
      Column() { 
        Scroll(this.scroller) { 
          Column() { 
            TextInput({ text: this.text, placeholder: 'input your word...' }) 
              .placeholderFont({ size: 14, weight: 400 }) 
              .width(320) 
              .height(40) 
              .margin(200) 
              .fontSize(14) 
              .fontColor(Color.Black) 
              .backgroundColor(Color.White) 
            ForEach(this.arr, (item: number) => { 
              Text(item.toString()) 
                .width('90%') 
                .height(150) 
                .backgroundColor(0xFFFFFF) 
                .borderRadius(15) 
                .fontSize(16) 
                .textAlign(TextAlign.Center) 
                .margin({ top: 10 }) 
            }) 
          }.width('100%') 
        } 
        .width('100%').height(this.scrollHeight).layoutWeight(1) 
 
        Text('这是一个测试文本') 
          .width('100%') 
          .height(50) 
          .backgroundColor(Color.Red) 
          .margin({ bottom: this.scrollHeight }) 
      }.width('100%').height('100%').justifyContent(FlexAlign.Start) 
 
    }.width('100%').height('100%').backgroundColor(0xDCDCDC) 
  } 
}

参考链接:

内容规避区

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进