harmony 鸿蒙ArkUI子系统变更说明

  • 2025-06-16
  • 浏览 (14)

ArkUI子系统变更说明

cl.arkui.1 Menu组件宽度设置效果变更,避让规则变更

访问级别

公开接口

变更原因

UX一致性需求变更

1、为开发者提供配置小于最小宽度后的视觉变化。

2、跟随点击位置菜单的交互效果变更。

3、为开发者提供左键菜单跨应用显示的属性,在不配置此属性时菜单会根据设备类型决定是否跨越应用显示。

变更影响

变更为兼容性变更

1、增加左键菜单可跨越应用显示的能力。

2、影响跟随点击位置菜单弹出的避让逻辑。

API Level

11

变更发生版本

从OpenHarmony SDK 4.1.3.5版本开始。

变更的接口/组件

涉及到菜单组件:

  • 变更前:

a) 用户定义菜单实际宽度小于64vp时,则设定为64vp。

b) 跟随点击位置弹出类型的菜单,如下方空间不足,向上翻转显示。

c) 跟随点击位置弹出类型的菜单,如果绑定子菜单,会贴近边缘显示。一级菜单带有边距margin,左右方向为12vp,上下方向为24vp。

d) 左键菜单能力为窗口内显示。

  • 变更后:

a) 用户定义菜单实际宽度小于64vp时,菜单宽度恢复为默认值2个columns。

b) 跟随点击位置弹出类型的菜单,如下方空间不足,则垂直方向向上平移,直到将菜单完整显示(菜单底部与边界按要求保留最小边距限制)。

c) 如果配置菜单在应用内弹出,左右方向的margin为16vp,上下侧默认规避状态栏与导航条,不额外增加避让距离;如果配置菜单在应用窗口外弹出,左右方向的margin为8vp,上下侧默认规避状态栏与Dock区域,不额外增加避让距离。如果绑定子菜单,margin与一级菜单一致。

isSubWindow

d) 左键菜单可通过showInSubWindow设定klv设置是否显示在窗口外。如果未进行设置,则按照设备类型自适应显示,klv设备为应用外显示,非klc设备为应用内显示。如果进行设置,klv设备设置为true时,菜单为应用外显示,设置为false时,菜单为应用内显示。

SubWindow

适配指导

/*左键菜单子窗口显示接口示例
*(showInSubWindow?: boolean;)
*条件: klv设备 
*参数:true 支持应用外子窗口显示  
*参数:false 支持应用内显示 
*/
@Entry
@Component
struct Index {
  @State select: boolean = true
  private iconStr: ResourceStr = $r("app.media.view_list_filled")
  private iconStr2: ResourceStr = $r("app.media.view_list_filled")

  @Builder
  SubMenu() {
    Menu() {
      MenuItem({ content: "复制", labelInfo: "Ctrl+C" })
      MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" })
    }
  }

  @Builder
  MyMenu(){
    Menu() {
      MenuItem({ startIcon: $r("app.media.icon"), content: "菜单选项" })
      MenuItem({ startIcon: $r("app.media.icon"), content: "菜单选项" })
        .enabled(false)
      MenuItem({
        startIcon: this.iconStr,
        content: "菜单选项",
        endIcon: $r("app.media.arrow_right_filled"),
        builder: ():void=>this.SubMenu()
      })
      MenuItemGroup({ header: '小标题' }) {
        MenuItem({ content: "菜单选项" })
          .selectIcon(true)
          .selected(this.select)
          .onChange((selected) => {
            console.info("menuItem select" + selected);
            this.iconStr2 = $r("app.media.icon");
          })
        MenuItem({
          startIcon: $r("app.media.view_list_filled"),
          content: "菜单选项",
          endIcon: $r("app.media.arrow_right_filled"),
          builder: ():void=>this.SubMenu()
        })
      }
      MenuItem({
        startIcon: this.iconStr2,
        content: "菜单选项",
        endIcon: $r("app.media.arrow_right_filled")
      })
    }
  }

  build() {
    Row() {
      Column() {
        Text('click to show menu')
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .bindMenu(this.MyMenu,{showInSubWindow:true})
      .width('100%')
    }
    .height('100%')
  }
}

你可能感兴趣的鸿蒙文章

harmony 鸿蒙帐号子系统系统账号模块ChangeLog

harmony 鸿蒙ArkUI子系统ChangeLog

harmony 鸿蒙包管理子系统变更说明

harmony 鸿蒙cert子系统ChangeLog

harmony 鸿蒙multimedia子系统变更说明

harmony 鸿蒙Web子系统ChangeLog

0  赞