The Menu component is a vertical list of items presented to the user.
This component is supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version.
The Menu component must be used together with the bindMenu or bindContextMenu method. It does not work when used alone.
Menu()
Creates a fixed container for a menu. This API does not have any parameters.
Rules for calculating the width of menus and menu items:
During the layout, the width of each menu item is expected to be the same. If a child component has its width set, the size calculation rule prevails.
If the width is not set, the Menu component sets the default width of two columns for the MenuItem and MenuItemGroup child components. If a menu item's content area is wider than two columns, the Menu component automatically expands the menu item content area.
When the width is set, the Menu component sets the MenuItem and MenuItemGroup child components to the fixed width (set width minus the padding).
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
fontSize(value: Length)
Sets the size of all text within the menu.
This API is deprecated since API version 10. You are advised to use font instead.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
| value | Length | Yes | Size of all text within the menu. If the value of the Length type is a number, the unit is fp. |
font(value: Font)
Sets the size of all text within the menu.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
| value | Font | Yes | Size of all text within the menu. Default value: { size: 16, family: 'HarmonyOS Sans', weight: FontWeight.Medium, style: FontStyle.Normal } |
fontColor(value: ResourceColor)
Sets the font color of all text within the menu.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
| value | ResourceColor | Yes | Font color of all text within the menu. Default value: '#E5000000' |
radius(value: Dimension | BorderRadiuses)
Sets the radius of the menu border corners.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
| value | Dimension | BorderRadiuses | Yes | Radius of the menu border corners. Default value: 8vp for 2-in-1 devices and 20vp for other devices Since API version 12, if the sum of the two maximum corner radii in the horizontal direction exceeds the menu width, or if the sum of the two maximum corner radii in the vertical direction exceeds the menu height, the default corner radius will be used for all four corners of the menu. |
width(value: Length)
Sets the border width of the menu. The minimum width is 64 vp.
Widget capability: This API can be used in ArkTS widgets since API version 10.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
| value | Length | Yes | Border width of the menu. |
@Entry
@Component
struct Index {
@State select: boolean = true
private iconStr: ResourceStr = $r("app.media.view_list_filled")
private iconStr2: ResourceStr = $r("app.media.arrow_right_filled")
@Builder
SubMenu() {
Menu() {
MenuItem({ content: "Copy", labelInfo: "Ctrl+C" })
MenuItem({ content: "Paste", labelInfo: "Ctrl+V" })
}
}
@Builder
MyMenu(){
Menu() {
MenuItem({ startIcon: $r("app.media.icon"), content: "Menu item" })
MenuItem({ startIcon: $r("app.media.icon"), content: "Menu item" })
.enabled(false)
MenuItem({
startIcon: this.iconStr,
content: "Menu item",
endIcon: this.iconStr2,
builder: ():void=>this.SubMenu()
})
MenuItemGroup({ header: 'Subtitle' }) {
MenuItem({
startIcon: this.iconStr,
content: "Menu item",
endIcon: this.iconStr2,
builder: ():void=>this.SubMenu()
})
MenuItem({
startIcon: $r("app.media.app_icon"),
content: "Menu item",
endIcon: this.iconStr2,
builder: ():void=>this.SubMenu()
})
}
MenuItem({
startIcon: this.iconStr,
content: "Menu item",
})
}
}
build() {
Row() {
Column() {
Text('click to show menu')
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.bindMenu(this.MyMenu)
.width('100%')
}
.height('100%')
}
} 
This example demonstrates a regular menu (using symbol-type icons).
// xxx.ets
import { SymbolGlyphModifier } from '@kit.ArkUI';
@Entry
@Component
struct Index {
@State startIconModifier: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_mic')).fontSize('24vp');
@State endIconModifier: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_trash')).fontSize('24vp');
@State selectIconModifier: SymbolGlyphModifier =
new SymbolGlyphModifier($r('sys.symbol.checkmark')).fontSize('24vp');
@State select: boolean = true;
@Builder
SubMenu() {
Menu() {
MenuItem({ content: "Copy", labelInfo: "Ctrl+C" })
MenuItem({ content: "Paste", labelInfo: "Ctrl+V" })
}
}
@Builder
MyMenu() {
Menu() {
MenuItem({ symbolStartIcon: this.startIconModifier, content: "Menu item" })
MenuItem({ symbolStartIcon: this.startIconModifier, content: "Menu item" })
.enabled(false)
MenuItem({
symbolStartIcon: this.startIconModifier,
content: "Menu item",
symbolEndIcon: this.endIconModifier,
builder: (): void => this.SubMenu()
})
MenuItemGroup({ header: 'Subtitle' }) {
MenuItem({
symbolStartIcon: this.startIconModifier,
content: "Menu item",
symbolEndIcon: this.endIconModifier,
builder: (): void => this.SubMenu()
})
MenuItem({
symbolStartIcon: this.startIconModifier,
content: "Menu item",
symbolEndIcon: this.endIconModifier,
builder: (): void => this.SubMenu()
})
}
MenuItem({
content: "Menu item",
}).selected(this.select).selectIcon(this.selectIconModifier)
}
}
build() {
Row() {
Column() {
Text('click to show menu')
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.bindMenu(this.MyMenu)
.width('100%')
}
.height('100%')
}
} 