HarmonyOS 鸿蒙Next键盘弹出时如何只让指定UI上移而非整体UI

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next键盘弹出时如何只让指定UI上移而非整体UI 问题描述:

在某些页面的输入框在底部,顶部还有一些内容需要显示,在键盘出来的时候,我们发现整个页面都被自动上移了。这种情况下就无法看到顶部的内容。我们希望只有底部的输入面板跟随键盘上移。开发过程中,某些命令触发后,屏幕分为三部分,从上到下依次为:提示,图纸内容,输入面板。希望提示和图纸内容不跟随键盘上移。

4 回复

解决方案:

方案一:可以通过组件的安全区域属性控制。

方案二:

import window from '@ohos.window';

@Entry
@Component
struct Index {
  @State screenHeight: number = 0;
  @State text: string = '';
  @State list: number[] = [];
  controller: TextInputController = new TextInputController()

  aboutToAppear() {
    for (let index = 0; index < 20; index++) {
      this.list.push(index)
    }
    window.getLastWindow(getContext(this)).then(currentWindow => {
      let property = currentWindow.getWindowProperties();
      let avoidArea = currentWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_KEYBOARD);
      // 初始化显示区域高度
      this.screenHeight = px2vp(property.windowRect.height - avoidArea.bottomRect.height);
      // 监视软键盘的弹出和收起
      currentWindow.on('avoidAreaChange', async data => {
        if (data.type !== window.AvoidAreaType.TYPE_KEYBOARD) {
          return;
        }
        this.screenHeight = px2vp(property.windowRect.height - data.area.bottomRect.height);
      })
    })
  }

  @Builder
  TabHeader(text = '') {
    Text(text).fontSize(30).fontColor(Color.Red).expandSafeArea([SafeAreaType.KEYBOARD])
  }

  build() {
    Row() {
      Column() {
        Row() {
          TextInput({ text: this.text, placeholder: '顶部搜索框', controller: this.controller })
        }
        .width('100%')
        .height(50)
        .backgroundColor(Color.Pink)
        .padding({ left: 20, right: 20 })

        Tabs() {
          TabContent() {
            List({ space: 20 }) {
              ForEach(this.list, (item: number) => {
                ListItem() {
                  Row() {
                    Text('我要正常滚动__测试数据' + item).fontSize(20)
                  }
                }
              }, (i: string) => i)
            }.width('100%')
          }.tabBar(this.TabHeader('消息'))

          TabContent() {
            Column() {

            }
          }.tabBar(this.TabHeader('云空间'))
        }
        .width('100%')
        .backgroundColor("#f1f2f6")
      }
      .width('100%')
    }
    .width('100%').height(this.screenHeight)
  }
}

文档链接: 安全区域

更多关于HarmonyOS 鸿蒙Next键盘弹出时如何只让指定UI上移而非整体UI的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


楼主牛。。。。币

在HarmonyOS(鸿蒙)系统中,当键盘弹出时,如果你希望仅让指定的UI元素(如文本框所在的视图)上移,而非整个UI界面上移,可以通过以下方式实现:

  1. 布局调整:首先,确保你的布局设计支持局部移动。通常,你可以使用相对布局(Relative Layout)或约束布局(Constraint Layout),并为需要移动的视图设置合适的约束条件。

  2. 监听键盘事件:通过监听键盘的显示和隐藏事件,你可以动态地调整指定视图的位置或边距。鸿蒙系统提供了窗口焦点变化、软键盘状态变化等事件监听机制,你可以利用这些机制来检测键盘的弹出和收起。

  3. 动态调整视图:在键盘事件监听器中,根据键盘的高度动态调整指定视图的位置或边距。这通常涉及到修改视图的layout_marginTop或其他相关的布局参数。

  4. 确保布局兼容性:在调整布局时,要注意不同屏幕尺寸和分辨率下的兼容性,确保在各种设备上都能获得良好的用户体验。

如果以上方法无法完全满足你的需求,或者实现过程中遇到问题,可能是布局设计或事件监听的具体实现有误。此时,你可以检查相关代码和布局文件,或者参考鸿蒙系统的官方文档以获取更多信息。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部