1# ArkUI子系统变更说明 2 3## cl.arkui.1 Menu组件宽度设置效果变更,避让规则变更 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11UX一致性需求变更 12 131、为开发者提供配置小于最小宽度后的视觉变化。 14 152、跟随点击位置菜单的交互效果变更。 16 173、为开发者提供左键菜单跨应用显示的属性,在不配置此属性时菜单会根据设备类型决定是否跨越应用显示。 18 19**变更影响** 20 21变更为兼容性变更 22 231、增加左键菜单可跨越应用显示的能力。 24 252、影响跟随点击位置菜单弹出的避让逻辑。 26 27**API Level** 28 2911 30 31**变更发生版本** 32 33从OpenHarmony SDK 4.1.3.5版本开始。 34 35**变更的接口/组件** 36 37涉及到菜单组件: 38 39- 变更前: 40 41 a) 用户定义菜单实际宽度小于64vp时,则设定为64vp。 42 43 b) 跟随点击位置弹出类型的菜单,如下方空间不足,向上翻转显示。 44 45 c) 跟随点击位置弹出类型的菜单,如果绑定子菜单,会贴近边缘显示。一级菜单带有边距margin,左右方向为12vp,上下方向为24vp。 46 47 d) 左键菜单能力为窗口内显示。 48 49- 变更后: 50 51 a) 用户定义菜单实际宽度小于64vp时,菜单宽度恢复为默认值2个columns。 52 53 b) 跟随点击位置弹出类型的菜单,如下方空间不足,则垂直方向向上平移,直到将菜单完整显示(菜单底部与边界按要求保留最小边距限制)。 54 55 c) 如果配置菜单在应用内弹出,左右方向的margin为16vp,上下侧默认规避状态栏与导航条,不额外增加避让距离;如果配置菜单在应用窗口外弹出,左右方向的margin为8vp,上下侧默认规避状态栏与Dock区域,不额外增加避让距离。如果绑定子菜单,margin与一级菜单一致。 56 57 <img src="figures/SubMenu.jpg" alt="isSubWindow" style="zoom:50%;" /> 58 59 d) 左键菜单可通过showInSubWindow设定klv设置是否显示在窗口外。如果未进行设置,则按照设备类型自适应显示,klv设备为应用外显示,非klc设备为应用内显示。如果进行设置,klv设备设置为true时,菜单为应用外显示,设置为false时,菜单为应用内显示。 60 61 <img src="figures/SubWindow.png" alt="SubWindow" /> 62 63**适配指导** 64 65``` 66/*左键菜单子窗口显示接口示例 67*(showInSubWindow?: boolean;) 68*条件: klv设备 69*参数:true 支持应用外子窗口显示 70*参数:false 支持应用内显示 71*/ 72@Entry 73@Component 74struct Index { 75 @State select: boolean = true 76 private iconStr: ResourceStr = $r("app.media.view_list_filled") 77 private iconStr2: ResourceStr = $r("app.media.view_list_filled") 78 79 @Builder 80 SubMenu() { 81 Menu() { 82 MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) 83 MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) 84 } 85 } 86 87 @Builder 88 MyMenu(){ 89 Menu() { 90 MenuItem({ startIcon: $r("app.media.icon"), content: "菜单选项" }) 91 MenuItem({ startIcon: $r("app.media.icon"), content: "菜单选项" }) 92 .enabled(false) 93 MenuItem({ 94 startIcon: this.iconStr, 95 content: "菜单选项", 96 endIcon: $r("app.media.arrow_right_filled"), 97 builder: ():void=>this.SubMenu() 98 }) 99 MenuItemGroup({ header: '小标题' }) { 100 MenuItem({ content: "菜单选项" }) 101 .selectIcon(true) 102 .selected(this.select) 103 .onChange((selected) => { 104 console.info("menuItem select" + selected); 105 this.iconStr2 = $r("app.media.icon"); 106 }) 107 MenuItem({ 108 startIcon: $r("app.media.view_list_filled"), 109 content: "菜单选项", 110 endIcon: $r("app.media.arrow_right_filled"), 111 builder: ():void=>this.SubMenu() 112 }) 113 } 114 MenuItem({ 115 startIcon: this.iconStr2, 116 content: "菜单选项", 117 endIcon: $r("app.media.arrow_right_filled") 118 }) 119 } 120 } 121 122 build() { 123 Row() { 124 Column() { 125 Text('click to show menu') 126 .fontSize(50) 127 .fontWeight(FontWeight.Bold) 128 } 129 .bindMenu(this.MyMenu,{showInSubWindow:true}) 130 .width('100%') 131 } 132 .height('100%') 133 } 134} 135 136```