# 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%') } } ```