鸿蒙综合讨论/键盘避让与焦点治理

键盘避让与焦点治理

键盘弹出是移动端与桌面端窗口模型差异最直观的场景:键盘要占据半个屏幕,应用的窗口、焦点、滚动都要跟着调整。这篇讲避让与焦点治理的工程要点。

▍避让的基本逻辑
键盘弹出时,系统给应用两个信息:键盘高度与避让模式(应用自己调或系统压缩窗口)。桌面移植的普遍选择是应用侧主动避让:根据键盘高度调整可视区域,保证焦点输入框可见。要点:避让的是内容不是窗口装饰——输入框要在键盘上方,标题栏可以滚出视口。避让动画要与键盘弹出动画同步,先跳后弹或先弹后跳都很难看。

▍焦点治理的三层
第一层,焦点唯一性:任何时刻只有一个控件持有输入焦点,焦点切换时旧控件要先收尾(提交或取消组合输入)。第二层,焦点与键盘联动:焦点进输入框弹键盘,焦点出输入框收键盘——但联动别太机械,用户滚动浏览时焦点还在输入框,键盘不该一直占着屏幕(视野策略:焦点在但不在视口内时收起)。第三层,跨层焦点:原生壳的菜单、对话框与框架内容的焦点要能互转,弹对话框时输入框失焦收键盘,关闭后归还。

▍真实坑位一族
收起后点输入框不重弹:焦点状态与键盘状态失同步,收键盘时焦点被意外清除。工具栏误弹:点击非输入控件(如拖动滑块)焦点误落输入框。滚动与键盘打架:键盘弹出触发滚动,滚动又触发焦点变化,来回震荡——联动要做成单向依赖加防抖。这些都在真实工程里修过,共性教训是:键盘状态机要一处统一管理,别让各组件各自为政。

▍验收清单
弹出后焦点可见;旋转与折叠态下重新避让;对话框场景键盘正确收起归还;外接键盘时不弹软键盘(有实体键盘场景要检测);应用切后台键盘收起。

▍建议
把键盘高度、焦点变化、避让动作三者的事件流做成日志,联动问题都是时序问题,看事件流一目了然。

有疑问欢迎在本板块直接发帖,我们会逐条回复。
楼主 7 天前
想参与讨论?登录 或 30 秒注册。