HarmonyOS鸿蒙Next中如何解决软键盘弹出后,键盘与输入框之间的距离

HarmonyOS鸿蒙Next中如何解决软键盘弹出后,键盘与输入框之间的距离

在使用textinput、textarea组件时,触摸焦点弹起软键盘后,组件和软键盘之间有一个间距,查看dom结构,发现是root跟节点自带的一个间距(44px)

有的情况不需要使用怎么结决那?

  1. 设置页面避让模式(不设置虚拟键盘的避让模式时,默认是OFFSET模式,也就是上抬模式,就会出现间距的问题,我们可以改为压缩模式RESIZE。)

    this.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)
    
  2. 动态设置位置(就是根据软键盘的高度,动态设置组件的位置,也就是需要获取软键盘的高度,当软键盘弹起时,让组件距离底部的距离正好是软键盘的高度)

    import { window } from '[@kit](/user/kit).ArkUI'
    
    [@Entry](/user/Entry)
    [@Component](/user/Component)
    struct Index {
      @State marginBottom: number = 0
    
      aboutToAppear(): void {
        window.getLastWindow(getContext(), (_, win) => {
          let type = window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR
          let avoidArea = win.getWindowAvoidArea(type)
          // 获取到导航条区域的高度
          let bottomRectHeight = px2vp(avoidArea.bottomRect.height)
          // 监听软键盘的隐藏和显示
          win.on('keyboardHeightChange', (height) => {
            this.marginBottom = height > 0 ? px2vp(height) - bottomRectHeight : 0
          })
        })
      }
    
      build() {
        Column() {
          TextInput()
            .margin({ bottom: this.marginBottom })
        }
        .width("100%")
        .height("100%")
        .justifyContent(FlexAlign.End)
        .expandSafeArea([SafeAreaType.KEYBOARD])
      }
    }
    

更多关于HarmonyOS鸿蒙Next中如何解决软键盘弹出后,键盘与输入框之间的距离的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

感谢,很实用

更多关于HarmonyOS鸿蒙Next中如何解决软键盘弹出后,键盘与输入框之间的距离的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中调整软键盘与输入框间距,可通过修改窗口布局参数实现。使用WindowManager的setWindowLayoutInDisplayCutoutMode()方法设置窗口模式为LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES,同时搭配adjustPan或adjustResize的windowSoftInputMode属性。在UI布局中为输入框底部预留安全区域,通过监听键盘弹出事件动态调整paddingBottom值。具体数值需根据设备屏幕尺寸和键盘高度计算,建议使用系统提供的getWindowInsets()获取键盘实际高度进行精确适配。

在HarmonyOS Next中处理软键盘与输入框间距问题,您已经给出了两种有效的解决方案。这里补充说明几点:

  1. 关于RESIZE模式:
  • 这是最推荐的解决方案,通过setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)将布局模式改为压缩模式
  • 这种方式会直接调整窗口尺寸,不会产生额外的偏移间距
  • 适用于大多数常规场景,实现简单且效果稳定
  1. 动态调整方案注意事项:
  • 获取键盘高度时需要处理单位转换(px2vp)
  • 要考虑导航栏等系统避让区域的影响
  • 需要监听keyboardHeightChange事件实时更新布局
  • 这种方式更灵活但实现稍复杂

建议优先采用RESIZE模式,若遇到特殊布局需求再考虑动态调整方案。两种方式都能有效解决默认OFFSET模式产生的间距问题。

回到顶部