1e41f4b71Sopenharmony_ci# Menu 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ciYou can use menu APIs to display a context menu – a vertical list of items displayed by long pressing, clicking, or right-clicking a component. For details, see [Menu Control](../reference/apis-arkui/arkui-ts/ts-universal-attributes-menu.md). 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci## Creating a Menu in the Default Style 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ciUse the **bindMenu** API to implement a menu. **bindMenu** responds to the click event of the bound component. When the bound component is clicked, the menu is displayed. 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci```ts 12e41f4b71Sopenharmony_ciButton('click for Menu') 13e41f4b71Sopenharmony_ci .bindMenu([ 14e41f4b71Sopenharmony_ci { 15e41f4b71Sopenharmony_ci value: 'Menu1', 16e41f4b71Sopenharmony_ci action: () => { 17e41f4b71Sopenharmony_ci console.info('handle Menu1 select') 18e41f4b71Sopenharmony_ci } 19e41f4b71Sopenharmony_ci } 20e41f4b71Sopenharmony_ci ]) 21e41f4b71Sopenharmony_ci``` 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_ci 27e41f4b71Sopenharmony_ci## Creating a Menu in a Custom Style 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ciIf the default style does not meet requirements, you can use [\@Builder](../quick-start/arkts-builder.md) to customize menu content and use the **bindMenu** API to bind the custom menu to a component. 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci### \@Builder: Customizing Menu Content 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci```ts 36e41f4b71Sopenharmony_ciclass Tmp { 37e41f4b71Sopenharmony_ci iconStr2: ResourceStr = $r("app.media.view_list_filled") 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci set(val: Resource) { 40e41f4b71Sopenharmony_ci this.iconStr2 = val 41e41f4b71Sopenharmony_ci } 42e41f4b71Sopenharmony_ci} 43e41f4b71Sopenharmony_ci 44e41f4b71Sopenharmony_ci@Entry 45e41f4b71Sopenharmony_ci@Component 46e41f4b71Sopenharmony_cistruct menuExample { 47e41f4b71Sopenharmony_ci @State select: boolean = true 48e41f4b71Sopenharmony_ci private iconStr: ResourceStr = $r("app.media.view_list_filled") 49e41f4b71Sopenharmony_ci private iconStr2: ResourceStr = $r("app.media.view_list_filled") 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ci @Builder 52e41f4b71Sopenharmony_ci SubMenu() { 53e41f4b71Sopenharmony_ci Menu() { 54e41f4b71Sopenharmony_ci MenuItem({ content: "Copy", labelInfo: "Ctrl+C" }) 55e41f4b71Sopenharmony_ci MenuItem({ content: "Paste", labelInfo: "Ctrl+V" }) 56e41f4b71Sopenharmony_ci } 57e41f4b71Sopenharmony_ci } 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci @Builder 60e41f4b71Sopenharmony_ci MyMenu() { 61e41f4b71Sopenharmony_ci Menu() { 62e41f4b71Sopenharmony_ci MenuItem({ startIcon: $r("app.media.icon"), content: "Menu option" }) 63e41f4b71Sopenharmony_ci MenuItem({ startIcon: $r("app.media.icon"), content: "Menu option" }).enabled(false) 64e41f4b71Sopenharmony_ci MenuItem({ 65e41f4b71Sopenharmony_ci startIcon: this.iconStr, 66e41f4b71Sopenharmony_ci content: "Menu option", 67e41f4b71Sopenharmony_ci endIcon: $r("app.media.arrow_right_filled"), 68e41f4b71Sopenharmony_ci // When the builder parameter is set, it indicates that a submenu is bound to a menu item. When the user hovers the cursor over the menu item, the submenu is displayed. 69e41f4b71Sopenharmony_ci builder: this.SubMenu 70e41f4b71Sopenharmony_ci }) 71e41f4b71Sopenharmony_ci MenuItemGroup ({ header: 'Subtitle' }) { 72e41f4b71Sopenharmony_ci MenuItem ({ content: "Menu option" }) 73e41f4b71Sopenharmony_ci .selectIcon(true) 74e41f4b71Sopenharmony_ci .selected(this.select) 75e41f4b71Sopenharmony_ci .onChange((selected) => { 76e41f4b71Sopenharmony_ci console.info("menuItem select" + selected); 77e41f4b71Sopenharmony_ci let Str: Tmp = new Tmp() 78e41f4b71Sopenharmony_ci Str.set($r("app.media.icon")) 79e41f4b71Sopenharmony_ci }) 80e41f4b71Sopenharmony_ci MenuItem({ 81e41f4b71Sopenharmony_ci startIcon: $r("app.media.view_list_filled"), 82e41f4b71Sopenharmony_ci content: "Menu option", 83e41f4b71Sopenharmony_ci endIcon: $r("app.media.arrow_right_filled"), 84e41f4b71Sopenharmony_ci builder: this.SubMenu 85e41f4b71Sopenharmony_ci }) 86e41f4b71Sopenharmony_ci } 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ci MenuItem({ 89e41f4b71Sopenharmony_ci startIcon: this.iconStr2, 90e41f4b71Sopenharmony_ci content: "Menu option", 91e41f4b71Sopenharmony_ci endIcon: $r("app.media.arrow_right_filled") 92e41f4b71Sopenharmony_ci }) 93e41f4b71Sopenharmony_ci } 94e41f4b71Sopenharmony_ci } 95e41f4b71Sopenharmony_ci 96e41f4b71Sopenharmony_ci build() { 97e41f4b71Sopenharmony_ci // ... 98e41f4b71Sopenharmony_ci } 99e41f4b71Sopenharmony_ci} 100e41f4b71Sopenharmony_ci 101e41f4b71Sopenharmony_ci``` 102e41f4b71Sopenharmony_ci 103e41f4b71Sopenharmony_ci 104e41f4b71Sopenharmony_ci### Using the bindMenu Attribute to Bind a Component 105e41f4b71Sopenharmony_ci 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci```ts 108e41f4b71Sopenharmony_ciButton('click for Menu') 109e41f4b71Sopenharmony_ci .bindMenu(this.MyMenu) 110e41f4b71Sopenharmony_ci``` 111e41f4b71Sopenharmony_ci 112e41f4b71Sopenharmony_ci 113e41f4b71Sopenharmony_ci 114e41f4b71Sopenharmony_ci 115e41f4b71Sopenharmony_ci 116e41f4b71Sopenharmony_ci## Creating a Context Menu Displayed Upon Right-clicking or Long Pressing 117e41f4b71Sopenharmony_ci 118e41f4b71Sopenharmony_ciUse the **bindContextMenu** API to customize the menu content and menu popup mode: right-click or long press. The menu items that are displayed using **bindContextMenu** are in an independent child window and can be displayed outside the application window. 119e41f4b71Sopenharmony_ci 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_ci- The content in the @Builder is the same as that in the preceding section. 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_ci- Check the menu popup mode and bind the component through the **bindContextMenu** attribute. In the example, the menu is displayed upon right-clicking. 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci ```ts 126e41f4b71Sopenharmony_ci Button('click for Menu') 127e41f4b71Sopenharmony_ci .bindContextMenu(this.MyMenu, ResponseType.RightClick) 128e41f4b71Sopenharmony_ci ``` 129