当前位置: 首页 > news >正文

【HarmonyOS NEXT】解决:软键盘弹起导致页面整体上移、标题栏丢失的问题

一、背景

在开发鸿蒙 APP 登录页时,会遇到这样的体验问题,当用户点击输入框弹出软键盘时,整个页面会被默认的上推模式带起,导致顶部的标题栏被推出可视区域,严重影响用户体验。

备注:以下解决方法为(API 11+),低版本不适配哦!

二、具体问题

页面分为三个部分,顶部固定标题,中间是logo图标,底部是输入框。用户点击底部输入框时,页面弹出软键盘,顶部固定标题没有固定住,整体往上移动。

问题效果预览:图1是没弹出软键盘的场景,图2是弹出软键盘的场景。

问题代码示例如下:

@Extend(TextInput) function commonInputStyle(maxLength: number) { .placeholderColor('#999999') .borderRadius(8) .contentType(ContentType.PHONE_NUMBER) .caretStyle({ color: '#b35336', width: 2 }) .height(48) .maxLength(maxLength) .maxLines(1) .type(InputType.Number) .fontColor('#333333') .width("100%") .backgroundColor(Color.White) .padding({ left: 16, right: 16 }) .shadow({ radius: 4, color: '#00000008', offsetY: 2 }) } @Entry @Component export struct Index { @State phoneNumber: string = "" @State codeNumber: string = "" build() { Column() { Stack({ alignContent: Alignment.Top }) { Column() .width('100%') .height('100%') .backgroundColor('#F8F9FA') // 标题栏 Column() { Text('密码登录') .fontColor('#333333') .fontSize(20) .fontWeight(500) .margin({ top: 10 }) // logo模块 Image($r("app.media.startIcon")) .width(120) .objectFit(ImageFit.Contain) .margin({ top: 110, bottom: 60 }) .borderRadius(16) .shadow({ radius: 8, color: '#00000010', offsetY: 4 }) // 输入模块 Column() { TextInput({ text: this.phoneNumber, placeholder: "请输入手机号" }) .commonInputStyle(11) .onChange((value: string) => { this.phoneNumber = value }) TextInput({ text: this.codeNumber, placeholder: "请输入短信验证码" }) .commonInputStyle(6) .margin({ top: 20 }) .onChange((value: string) => { this.codeNumber = value }) } .width('100%') .padding({ top: 200, left: 32, right: 32 }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Start) } } .width('100%') .height('100%') } }

三、问题定位

3.1、确定问题

标题栏无固定布局,依赖页面整体排版,键盘弹起时随页面上移丢失

首先默认场景下UI是没有啥问题的,主要是在键盘弹起后UI整体上移了,那问题就出现键盘弹起的过程上,是没有正确配置键盘避让模式

3.2、键盘背景知识:

官网文档指引👉:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-e#keyboardavoidmode11

KeyboardAvoidMode配置键盘避让页面的避让模式,其中KeyboardAvoidMode.RESIZE表示压缩模式

四、解决问题

核心方案:配置setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)(API 11+)

解决软键盘弹出后顶部控件无法固定的问题,可以通过setKeyboardAvoidMode来配置虚拟键盘弹出时,页面的避让模式为压缩模式。

在aboutToAppear生命周期里面配置键盘避让模式为压缩模式👇

http://www.jsqmd.com/news/258123/

相关文章:

  • 我用AI分析测试日志,自动聚类相似失败模式
  • 学长亲荐!自考必备TOP10一键生成论文工具深度测评
  • 用AI生成“测试风险热力图”:一眼看出哪里最危险
  • 【HarmonyOS NEXT】如何监听软键盘的弹出和收起事件
  • 深聊安阳同昌新材料,它在行业的口碑排名及靠谱性解读 - 工业品牌热点
  • 完整教程:我用 Pygame + DeepSeek 做了一个中文 AI RPG 游戏!
  • 我让AI读了1000个GitHub测试项目,总结出“最佳实践”
  • 如何看待“AI写作导致人类语言退化”?
  • 第三心脏
  • CentOS服务器上yum/rpm搭建GitLab CE
  • 2026年行业内比较好的石笼网供应商口碑推荐,抗冲击抗腐蚀石笼网/双隔板石笼网/镀锌低碳钢丝石笼网,石笼网供应商找哪家 - 品牌推荐师
  • ‌AI驱动的测试环境配置检查清单:全面指南
  • 实用指南:CAPL学习-SOME/IP交互层-值处理类函数1
  • Maven教程(Maven简介之依赖管理工具)
  • 基于8086的步进电机系统数码管显示转速数值含报告(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • SAP ALV 显示 百分比 符号前置转换历程
  • 为什么AI生成的测试用例比人工更“刁钻”?
  • 固定翼无人机俯仰姿态模糊PID控制(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • ‌用AI模拟“多用户并发冲突”:不是线程,是业务逻辑冲突
  • 我用AI分析测试覆盖率报告,自动推荐“未覆盖路径”
  • 四旋翼无人机轨迹跟踪控制仿真(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 杭州拼多多代运营公司哪家性价比高?2026年实测对比参考 - 前沿公社
  • ‌AI自动生成测试用例优先级评分:基于历史缺陷密度的全面研究
  • 1.Blender官网安装
  • 我的AI测试模型,现在能预测“哪个模块最可能被回滚”
  • 天津多口味元宵馅料老牌厂家有哪些,费用多少? - 工业品牌热点
  • 聊聊中恒通达项目管理的创新服务有哪些,为工程建设添活力 - 工业品牌热点
  • [CF603E] Pastoral Oddities 题解
  • 2026 年 1 月全景榜单:覆盖多行业多场景的十大优质 geo 优化服务商 - 速递信息
  • 2026 年 1 月全景榜单:覆盖多行业多场景的十大优质 geo 优化服务商 - 速递信息