1e41f4b71Sopenharmony_ci# Menu 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci以垂直列表形式显示的菜单。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci> **说明:** 6e41f4b71Sopenharmony_ci> 7e41f4b71Sopenharmony_ci> - 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8e41f4b71Sopenharmony_ci> 9e41f4b71Sopenharmony_ci> - Menu组件需和[bindMenu](ts-universal-attributes-menu.md#bindmenu)或[bindContextMenu](ts-universal-attributes-menu.md#bindcontextmenu8)方法配合使用,不支持作为普通组件单独使用。 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci## 子组件 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci包含[MenuItem](ts-basic-components-menuitem.md)、[MenuItemGroup](ts-basic-components-menuitemgroup.md)子组件。 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci## 接口 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ciMenu() 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci作为菜单的固定容器,无参数。 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci> **说明:** 22e41f4b71Sopenharmony_ci> 菜单和菜单项宽度计算规则: 23e41f4b71Sopenharmony_ci> 24e41f4b71Sopenharmony_ci> 布局过程中,期望每个菜单项的宽度一致。若子组件设置了宽度,则以[尺寸计算规则](ts-universal-attributes-size.md#constraintsize)为准。 25e41f4b71Sopenharmony_ci> 26e41f4b71Sopenharmony_ci> 不设置宽度的情况:菜单组件会对子组件MenuItem、MenuItemGroup设置默认2栅格的宽度,若菜单项内容区比2栅格宽,则会自适应撑开。 27e41f4b71Sopenharmony_ci> 28e41f4b71Sopenharmony_ci> 设置宽度的情况:菜单组件会对子组件MenuItem、MenuItemGroup设置减去padding后的固定宽度。 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci## 属性 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性: 37e41f4b71Sopenharmony_ci 38e41f4b71Sopenharmony_ci### fontSize<sup>(deprecated)</sup> 39e41f4b71Sopenharmony_ci 40e41f4b71Sopenharmony_cifontSize(value: Length) 41e41f4b71Sopenharmony_ci 42e41f4b71Sopenharmony_ci统一设置Menu中所有文本的尺寸。 43e41f4b71Sopenharmony_ci 44e41f4b71Sopenharmony_ci从API Version 10开始废弃,建议使用[font](#font10)代替。 45e41f4b71Sopenharmony_ci 46e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 47e41f4b71Sopenharmony_ci 48e41f4b71Sopenharmony_ci**参数:** 49e41f4b71Sopenharmony_ci 50e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 51e41f4b71Sopenharmony_ci| ------ | ---------------------------- | ---- | -------------------------------------------------------- | 52e41f4b71Sopenharmony_ci| value | [Length](ts-types.md#length) | 是 | Menu中所有文本的尺寸,Length为number类型时,使用fp单位。 | 53e41f4b71Sopenharmony_ci 54e41f4b71Sopenharmony_ci### font<sup>10+</sup> 55e41f4b71Sopenharmony_ci 56e41f4b71Sopenharmony_cifont(value: Font) 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci统一设置Menu中所有文本的尺寸。 59e41f4b71Sopenharmony_ci 60e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 61e41f4b71Sopenharmony_ci 62e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ci**参数:** 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 67e41f4b71Sopenharmony_ci| ------ | ------------------------ | ---- | ------------------------------------------------------------ | 68e41f4b71Sopenharmony_ci| value | [Font](ts-types.md#font) | 是 | Menu中所有文本的尺寸。<br/>默认值:<br/>{<br/> size: 16,<br/> family: 'HarmonyOS Sans',<br/> weight: FontWeight.Medium,<br/> style: FontStyle.Normal<br/>} | 69e41f4b71Sopenharmony_ci### fontColor<sup>10+</sup> 70e41f4b71Sopenharmony_ci 71e41f4b71Sopenharmony_cifontColor(value: ResourceColor) 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_ci统一设置Menu中所有文本的颜色。 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 76e41f4b71Sopenharmony_ci 77e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci**参数:** 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 82e41f4b71Sopenharmony_ci| ------ | ------------------------------------------ | ---- | ---------------------- | 83e41f4b71Sopenharmony_ci| value | [ResourceColor](ts-types.md#resourcecolor) | 是 | Menu中所有文本的颜色。<br/>默认值:'#E5000000' | 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci### radius<sup>10+</sup> 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ciradius(value: Dimension | BorderRadiuses) 88e41f4b71Sopenharmony_ci 89e41f4b71Sopenharmony_ci设置Menu边框圆角半径。 90e41f4b71Sopenharmony_ci 91e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ci**参数:** 96e41f4b71Sopenharmony_ci 97e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 98e41f4b71Sopenharmony_ci| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 99e41f4b71Sopenharmony_ci| value | [Dimension](ts-types.md#dimension10) \| [BorderRadiuses](ts-types.md#borderradiuses9) | 是 | Menu边框圆角半径。<br/>默认值:2in1设备上默认值为8vp,其他设备上默认值为20vp。<br/> <br/> 从API version 12开始,当水平方向两个圆角半径之和的最大值大于菜单宽度,或垂直方向两个圆角半径之和的最大值大于菜单高度时,菜单四个圆角均采用菜单默认圆角半径值。 | 100e41f4b71Sopenharmony_ci 101e41f4b71Sopenharmony_ci### width<sup>10+</sup> 102e41f4b71Sopenharmony_ci 103e41f4b71Sopenharmony_ciwidth(value: Length) 104e41f4b71Sopenharmony_ci 105e41f4b71Sopenharmony_ci设置Menu边框宽度,支持设置的最小宽度为64vp。 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。 108e41f4b71Sopenharmony_ci 109e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 110e41f4b71Sopenharmony_ci 111e41f4b71Sopenharmony_ci**参数:** 112e41f4b71Sopenharmony_ci 113e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 114e41f4b71Sopenharmony_ci| ------ | ---------------------------- | ---- | -------------- | 115e41f4b71Sopenharmony_ci| value | [Length](ts-types.md#length) | 是 | Menu边框宽度。 | 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci### menuItemDivider<sup>12+</sup> 118e41f4b71Sopenharmony_ci 119e41f4b71Sopenharmony_cimenuItemDivider(options: DividerStyleOptions | undefined) 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_ci设置menuItem分割线样式, 不设置该属性则不展示分割线。 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_cistartMargin + endMargin 超过组件宽度后startMargin和endMargin会被置0。 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 126e41f4b71Sopenharmony_ci 127e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci**参数:** 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 132e41f4b71Sopenharmony_ci|---------|--------------------------------------------------------|------------| -------------- | 133e41f4b71Sopenharmony_ci| options | [DividerStyleOptions](ts-types.md#DividerStyleOptions) \| undefined | 是 | 设置menuItem分割线样式。<br />-strokeWidth:分割线的线宽。<br />-color:分割线的颜色。<br />-startMargin:分割线与menuItem侧边起端的距离。<br />-endMargin:分割线与menuItem侧边结束端的距离。 | 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci### menuItemGroupDivider<sup>12+</sup> 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_cimenuItemGroupDivider(options: DividerStyleOptions | undefined) 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci设置menuItemGroup上下分割线的样式, 不设置该属性则默认展示分割线。 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 144e41f4b71Sopenharmony_ci 145e41f4b71Sopenharmony_ci**参数:** 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 148e41f4b71Sopenharmony_ci|---------|--------------------------------------------------------|------------| -------------- | 149e41f4b71Sopenharmony_ci| options | [DividerStyleOptions](ts-types.md#DividerStyleOptions) \| undefined | 是 | 设置menuItemGroup顶部和底部分割线样式。<br />-strokeWidth:分割线的线宽, 默认值是1px。<br />-color:分割线的颜色, 默认值是 #33000000。<br />-startMargin:分割线与menuItemGroup侧边起端的距离, 默认值是16。<br />-endMargin:分割线与menuItemGroup侧边结束端的距离, 默认值是16。 | 150e41f4b71Sopenharmony_ci 151e41f4b71Sopenharmony_ci### subMenuExpandingMode<sup>12+</sup> 152e41f4b71Sopenharmony_ci 153e41f4b71Sopenharmony_cisubMenuExpandingMode(mode: SubMenuExpandingMode) 154e41f4b71Sopenharmony_ci 155e41f4b71Sopenharmony_ci设置Menu子菜单展开样式。 156e41f4b71Sopenharmony_ci 157e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 160e41f4b71Sopenharmony_ci 161e41f4b71Sopenharmony_ci**参数:** 162e41f4b71Sopenharmony_ci 163e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 164e41f4b71Sopenharmony_ci| ------ | ---------------------------- | ---- |--------------| 165e41f4b71Sopenharmony_ci| mode | [SubMenuExpandingMode](#submenuexpandingmode12枚举说明) | 是 | Menu子菜单展开样式。<br/>默认值:SubMenuExpandingMode.SIDE_EXPAND | 166e41f4b71Sopenharmony_ci 167e41f4b71Sopenharmony_ci## SubMenuExpandingMode<sup>12+</sup>枚举说明 168e41f4b71Sopenharmony_ci 169e41f4b71Sopenharmony_ciMenu子菜单展开样式枚举。 170e41f4b71Sopenharmony_ci 171e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 172e41f4b71Sopenharmony_ci 173e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 174e41f4b71Sopenharmony_ci 175e41f4b71Sopenharmony_ci| 名称 | 说明 | 176e41f4b71Sopenharmony_ci| --------------- | ------------------------------------------ | 177e41f4b71Sopenharmony_ci| SIDE_EXPAND | 默认展开样式, 子菜单位于同一平面侧边展开。 | 178e41f4b71Sopenharmony_ci| EMBEDDED_EXPAND | 直接展开样式, 子菜单嵌于主菜单内展开。 | 179e41f4b71Sopenharmony_ci| STACK_EXPAND | 堆叠样式, 子菜单浮于主菜单上方展开。 | 180e41f4b71Sopenharmony_ci 181e41f4b71Sopenharmony_ci## 示例 182e41f4b71Sopenharmony_ci 183e41f4b71Sopenharmony_ci### 示例1 184e41f4b71Sopenharmony_ci 185e41f4b71Sopenharmony_ci```ts 186e41f4b71Sopenharmony_ci@Entry 187e41f4b71Sopenharmony_ci@Component 188e41f4b71Sopenharmony_cistruct Index { 189e41f4b71Sopenharmony_ci @State select: boolean = true 190e41f4b71Sopenharmony_ci private iconStr: ResourceStr = $r("app.media.view_list_filled") 191e41f4b71Sopenharmony_ci private iconStr2: ResourceStr = $r("app.media.arrow_right_filled") 192e41f4b71Sopenharmony_ci 193e41f4b71Sopenharmony_ci @Builder 194e41f4b71Sopenharmony_ci SubMenu() { 195e41f4b71Sopenharmony_ci Menu() { 196e41f4b71Sopenharmony_ci MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) 197e41f4b71Sopenharmony_ci MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) 198e41f4b71Sopenharmony_ci } 199e41f4b71Sopenharmony_ci } 200e41f4b71Sopenharmony_ci 201e41f4b71Sopenharmony_ci @Builder 202e41f4b71Sopenharmony_ci MyMenu(){ 203e41f4b71Sopenharmony_ci Menu() { 204e41f4b71Sopenharmony_ci MenuItem({ startIcon: $r("app.media.icon"), content: "菜单选项" }) 205e41f4b71Sopenharmony_ci MenuItem({ startIcon: $r("app.media.icon"), content: "菜单选项" }) 206e41f4b71Sopenharmony_ci .enabled(false) 207e41f4b71Sopenharmony_ci MenuItem({ 208e41f4b71Sopenharmony_ci startIcon: this.iconStr, 209e41f4b71Sopenharmony_ci content: "菜单选项", 210e41f4b71Sopenharmony_ci endIcon: this.iconStr2, 211e41f4b71Sopenharmony_ci builder: ():void=>this.SubMenu() 212e41f4b71Sopenharmony_ci }) 213e41f4b71Sopenharmony_ci MenuItemGroup({ header: '小标题' }) { 214e41f4b71Sopenharmony_ci MenuItem({ 215e41f4b71Sopenharmony_ci startIcon: this.iconStr, 216e41f4b71Sopenharmony_ci content: "菜单选项", 217e41f4b71Sopenharmony_ci endIcon: this.iconStr2, 218e41f4b71Sopenharmony_ci builder: ():void=>this.SubMenu() 219e41f4b71Sopenharmony_ci }) 220e41f4b71Sopenharmony_ci MenuItem({ 221e41f4b71Sopenharmony_ci startIcon: $r("app.media.app_icon"), 222e41f4b71Sopenharmony_ci content: "菜单选项", 223e41f4b71Sopenharmony_ci endIcon: this.iconStr2, 224e41f4b71Sopenharmony_ci builder: ():void=>this.SubMenu() 225e41f4b71Sopenharmony_ci }) 226e41f4b71Sopenharmony_ci } 227e41f4b71Sopenharmony_ci MenuItem({ 228e41f4b71Sopenharmony_ci startIcon: this.iconStr, 229e41f4b71Sopenharmony_ci content: "菜单选项", 230e41f4b71Sopenharmony_ci }) 231e41f4b71Sopenharmony_ci } 232e41f4b71Sopenharmony_ci } 233e41f4b71Sopenharmony_ci 234e41f4b71Sopenharmony_ci build() { 235e41f4b71Sopenharmony_ci Row() { 236e41f4b71Sopenharmony_ci Column() { 237e41f4b71Sopenharmony_ci Text('click to show menu') 238e41f4b71Sopenharmony_ci .fontSize(50) 239e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 240e41f4b71Sopenharmony_ci } 241e41f4b71Sopenharmony_ci .bindMenu(this.MyMenu) 242e41f4b71Sopenharmony_ci .width('100%') 243e41f4b71Sopenharmony_ci } 244e41f4b71Sopenharmony_ci .height('100%') 245e41f4b71Sopenharmony_ci } 246e41f4b71Sopenharmony_ci} 247e41f4b71Sopenharmony_ci``` 248e41f4b71Sopenharmony_ci 249e41f4b71Sopenharmony_ci 250e41f4b71Sopenharmony_ci 251e41f4b71Sopenharmony_ci### 示例2 252e41f4b71Sopenharmony_ci 253e41f4b71Sopenharmony_ci普通菜单(使用symbol类型图标) 254e41f4b71Sopenharmony_ci 255e41f4b71Sopenharmony_ci```ts 256e41f4b71Sopenharmony_ci// xxx.ets 257e41f4b71Sopenharmony_ciimport { SymbolGlyphModifier } from '@kit.ArkUI'; 258e41f4b71Sopenharmony_ci 259e41f4b71Sopenharmony_ci@Entry 260e41f4b71Sopenharmony_ci@Component 261e41f4b71Sopenharmony_cistruct Index { 262e41f4b71Sopenharmony_ci @State startIconModifier: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_mic')).fontSize('24vp'); 263e41f4b71Sopenharmony_ci @State endIconModifier: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_trash')).fontSize('24vp'); 264e41f4b71Sopenharmony_ci @State selectIconModifier: SymbolGlyphModifier = 265e41f4b71Sopenharmony_ci new SymbolGlyphModifier($r('sys.symbol.checkmark')).fontSize('24vp'); 266e41f4b71Sopenharmony_ci @State select: boolean = true; 267e41f4b71Sopenharmony_ci 268e41f4b71Sopenharmony_ci @Builder 269e41f4b71Sopenharmony_ci SubMenu() { 270e41f4b71Sopenharmony_ci Menu() { 271e41f4b71Sopenharmony_ci MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) 272e41f4b71Sopenharmony_ci MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) 273e41f4b71Sopenharmony_ci } 274e41f4b71Sopenharmony_ci } 275e41f4b71Sopenharmony_ci 276e41f4b71Sopenharmony_ci @Builder 277e41f4b71Sopenharmony_ci MyMenu() { 278e41f4b71Sopenharmony_ci Menu() { 279e41f4b71Sopenharmony_ci MenuItem({ symbolStartIcon: this.startIconModifier, content: "菜单选项" }) 280e41f4b71Sopenharmony_ci MenuItem({ symbolStartIcon: this.startIconModifier, content: "菜单选项" }) 281e41f4b71Sopenharmony_ci .enabled(false) 282e41f4b71Sopenharmony_ci MenuItem({ 283e41f4b71Sopenharmony_ci symbolStartIcon: this.startIconModifier, 284e41f4b71Sopenharmony_ci content: "菜单选项", 285e41f4b71Sopenharmony_ci symbolEndIcon: this.endIconModifier, 286e41f4b71Sopenharmony_ci builder: (): void => this.SubMenu() 287e41f4b71Sopenharmony_ci }) 288e41f4b71Sopenharmony_ci MenuItemGroup({ header: '小标题' }) { 289e41f4b71Sopenharmony_ci MenuItem({ 290e41f4b71Sopenharmony_ci symbolStartIcon: this.startIconModifier, 291e41f4b71Sopenharmony_ci content: "菜单选项", 292e41f4b71Sopenharmony_ci symbolEndIcon: this.endIconModifier, 293e41f4b71Sopenharmony_ci builder: (): void => this.SubMenu() 294e41f4b71Sopenharmony_ci }) 295e41f4b71Sopenharmony_ci MenuItem({ 296e41f4b71Sopenharmony_ci symbolStartIcon: this.startIconModifier, 297e41f4b71Sopenharmony_ci content: "菜单选项", 298e41f4b71Sopenharmony_ci symbolEndIcon: this.endIconModifier, 299e41f4b71Sopenharmony_ci builder: (): void => this.SubMenu() 300e41f4b71Sopenharmony_ci }) 301e41f4b71Sopenharmony_ci } 302e41f4b71Sopenharmony_ci MenuItem({ 303e41f4b71Sopenharmony_ci content: "菜单选项", 304e41f4b71Sopenharmony_ci }).selected(this.select).selectIcon(this.selectIconModifier) 305e41f4b71Sopenharmony_ci } 306e41f4b71Sopenharmony_ci } 307e41f4b71Sopenharmony_ci 308e41f4b71Sopenharmony_ci build() { 309e41f4b71Sopenharmony_ci Row() { 310e41f4b71Sopenharmony_ci Column() { 311e41f4b71Sopenharmony_ci Text('click to show menu') 312e41f4b71Sopenharmony_ci .fontSize(50) 313e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 314e41f4b71Sopenharmony_ci } 315e41f4b71Sopenharmony_ci .bindMenu(this.MyMenu) 316e41f4b71Sopenharmony_ci .width('100%') 317e41f4b71Sopenharmony_ci } 318e41f4b71Sopenharmony_ci .height('100%') 319e41f4b71Sopenharmony_ci } 320e41f4b71Sopenharmony_ci} 321e41f4b71Sopenharmony_ci``` 322e41f4b71Sopenharmony_ci 323e41f4b71Sopenharmony_ci