鸿蒙开发 - 键盘避让

最近几天优化了项目关于输入框的优化,崩溃至极,差点哭了,原因是各个页面都没有配置键盘避让模式,又加上页面功能优化,导致各个页面都出现键盘乱蹦。

整理一下键盘避让的实现方法

页面配置:

TypeScript 复制代码
aboutToAppear(): void {
// 上抬模式,页面会整体上抬,使输入框漏出
 this.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.OFFSET);

// 压缩模式,使页面中间部分设置百分比的布局进行压缩, 使输入框漏出
this.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE);

}

根据自己情况选择合适的方式

布局配置

KeyboardAvoidMode.RESIZE 模式下:

压缩Page的大小,Page下设置百分比(一定要有layoutWeight(1)的组件)宽高的组件会跟随Page压缩,直接设置宽高的组件会按设置的固定大小布局。设置KeyboardAvoidMode.RESIZE时,expandSafeArea(SafeAreaType.KEYBOARD,SafeAreaEdge.BOTTOM)不生效。

假如 List 组件上部有其他组件A那么一定会被顶到标题栏,可以考虑将组件A移动到List组件中

设置不避让

当然了我们开发中也会存在一些场景,不想让组件随键盘移动而避让,那么可以为单个组件设置:

.expandSafeArea(SafeAreaType.KEYBOARD)

还差最后一步

选好了避让模式,调整好了页面布局,一点输入框,键盘抬起了,输入框也不遮盖了, 还差一步,list的内容得滚动到最后一条啊,不然要被产品说的。

TypeScript 复制代码
//监听软键盘抬起落下,比安卓方便那么一点点
aboutToAppear(): void {
    window.getLastWindow(getContext(this)).then(currentWindow => {
      let property = currentWindow.getWindowProperties();
      let avoidArea = currentWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
      // 初始化显示区域高度
      this.screenHeight = px2vp(property.windowRect.height - avoidArea.topRect.height - avoidArea.bottomRect.height);
      // 监视软键盘的弹出和收起
      currentWindow.on('avoidAreaChange', async data => {
        if (data.type !== window.AvoidAreaType.TYPE_KEYBOARD) {
          return;
        }
        if (data.area.bottomRect.height <= 0) {
          this.isKeyBoardHidden = true;
        } else {
          this.isKeyBoardHidden = false;
        }
        this.screenHeight = px2vp(property.windowRect.height - avoidArea.topRect.height - data.area.bottomRect.height);
      })
    })
  }

哦了, 大部分软件应用场景就这些吧,参考一下,我一边写才发现了官方文档

官方指导:文档中心

相关推荐
M-Robots echo11 小时前
M-CLAW,面向具身智能的机器人任务编排开发框架
机器人·ros·鸿蒙·开源社区·m-robots
M-Robots echo13 小时前
王成录:机器人产业下一个十年,拼的是 “系统级智能化” 而非单点算法堆叠
机器人·ros·鸿蒙·开源社区·m-robots·王成录
阿图灵14 小时前
Agentic AI 架构入门(九):Agent 通信协议全景——ACP/A2A/AG-UI/MCP
人工智能·ui·架构·ai agent·智能体·mcp·agentic ai
梦想不只是梦与想14 小时前
鸿蒙 测试工具:DevEco Testing(一)
测试工具·harmonyos·testing
大锅盖117 小时前
Web 工单要调用相机,第一步不是打开取景框,而是建立能力门禁
前端·数码相机·harmonyos
AI分享猿19 小时前
UI设计Prompt系列(十二):设计系统入门——把视觉语言沉淀为可复用规范
ui·prompt
M-Robots echo19 小时前
M-Robots ROS 兼容适配方案,实现存量机器人项目低成本迁移
机器人·ros·鸿蒙·开源社区·m-robots
l1m0_19 小时前
告别反复修改Prompt:AI生成React应用并落地开发的实战复盘
前端·react.js·ui·ai·设计
大千UI工场21 小时前
时序数据库对数字孪生的作用
数据库·ui·时序数据库·前端开发·b端管理系统
贾伟康21 小时前
【华夏二十四节气|07】HarmonyOS 6.0.2(22) ArkTS 节气搜索实战:多字段匹配与四态闭环
移动开发·harmonyos·arkts·arkui·本地搜索