HarmonyOS鸿蒙Next中想问一下,键盘避让只能让所有页面进行避让吗,是否能设置有的页面避让,有的页面不避让。

HarmonyOS鸿蒙Next中想问一下,键盘避让只能让所有页面进行避让吗,是否能设置有的页面避让,有的页面不避让。 【问题描述】:

想问一下,键盘避让只能让所以页面进行避让吗,是否能设置有的页面避让,有的页面不避让。

场景:想实现有的页面避让,有的页面不避让;

这个api:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-expand-safe-area#setkeyboardavoidmode11

键盘弹出不避让的话会压缩页面的尺寸:如图

cke_1600.png

【问题现象】:咨询问题

【版本信息】:ide 6.0 ;api:20

【复现代码】:无

【尝试解决方案】:未解决,


更多关于HarmonyOS鸿蒙Next中想问一下,键盘避让只能让所有页面进行避让吗,是否能设置有的页面避让,有的页面不避让。的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

【修改建议】

当不需要被顶起的组件被键盘顶起时,可通过expandSafeArea使该组件不避让键盘。需要注意,在KeyboardAvoidMode.RESIZE模式下,expandSafeArea属性不生效。 expandSafeArea意为扩大安全区域,KEYBOARD事件下,扩展TOP、BOTTOM区域,即该组件可以渲染到键盘的上下区域,此时该组件不避让键盘。

【背景知识】

  • 软键盘布局适配场景介绍,键盘避让机制。参考链接:键盘布局适配
  • expandSafeArea:控制组件扩展其安全区域。参考链接:expandSafeArea

更多关于HarmonyOS鸿蒙Next中想问一下,键盘避让只能让所有页面进行避让吗,是否能设置有的页面避让,有的页面不避让。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以设置部分页面避让。在HarmonyOS Next中,通过设置UIAbility的windowSoftInputMode属性实现。例如,在module.json5配置文件中,为特定UIAbility设置adjustPan或adjustResize模式控制键盘避让行为。不同UIAbility可配置不同模式。

在HarmonyOS Next中,键盘避让行为是可以通过setKeyboardAvoidMode API进行页面级控制的,并非只能全局统一设置。

根据你提供的API文档链接,setKeyboardAvoidMode方法允许为当前窗口设置不同的键盘避让模式。主要模式包括:

  1. OFF:键盘弹出时不避让,会压缩页面尺寸(你图中所示的情况)
  2. RESIZE:键盘弹出时调整窗口大小进行避让
  3. PAN:键盘弹出时平移窗口内容进行避让

实现方式: 你可以在需要控制键盘避让行为的页面中,通过window对象调用此API。例如,在某个页面的aboutToAppear生命周期中设置不避让:

import { window } from '@kit.ArkUI';

// 设置当前页面键盘弹出时不避让
window.getLastWindow(this.context).then(win => {
  win.setKeyboardAvoidMode(window.KeyboardAvoidMode.OFF);
});

在另一个页面中,你可以设置为其他避让模式:

// 设置当前页面使用调整窗口大小的避让方式
win.setKeyboardAvoidMode(window.KeyboardAvoidMode.RESIZE);

注意事项:

  • 此设置仅对当前窗口/页面生效,不会影响其他页面
  • 需要在页面生命周期合适的时机调用(如aboutToAppear
  • 不同页面的设置是独立的,可以实现"有的页面避让,有的页面不避让"的需求

这样你就可以根据具体场景,为不同页面配置不同的键盘避让行为了。

回到顶部