菜单控制

2024-01-22 16:18 更新

为组件绑定弹出式菜单,弹出式菜单以垂直列表形式显示菜单项,可通过长按、点击或鼠标右键触发。

说明
  • 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
  • CustomBuilder里不支持再使用bindMenu、bindContextMenu弹出菜单。多级菜单可使用Menu组件
  • 弹出菜单的文本内容不支持长按选中。

属性

名称

参数类型

描述

bindMenu

Array<MenuItem> | CustomBuilder

给组件绑定菜单,点击后弹出菜单。弹出菜单项支持文本和自定义两种功能。

bindContextMenu8+

content: CustomBuilder,

responseType: ResponseType

给组件绑定菜单,触发方式为长按或者右键点击,弹出菜单项需要自定义。

MenuItem

名称

类型

描述

value

string

菜单项文本。

action

() => void

点击菜单项的事件回调。

示例

示例1

普通菜单

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct MenuExample {
  5. build() {
  6. Column() {
  7. Text('click for Menu')
  8. }
  9. .width('100%')
  10. .margin({ top: 5 })
  11. .bindMenu([
  12. {
  13. value: 'Menu1',
  14. action: () => {
  15. console.info('handle Menu1 select')
  16. }
  17. },
  18. {
  19. value: 'Menu2',
  20. action: () => {
  21. console.info('handle Menu2 select')
  22. }
  23. },
  24. ])
  25. }
  26. }

示例2

自定义内容菜单

  1. @Entry
  2. @Component
  3. struct MenuExample {
  4. @State listData: number[] = [0, 0, 0]
  5. @Builder MenuBuilder() {
  6. Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
  7. ForEach(this.listData, (item, index) => {
  8. Column() {
  9. Row() {
  10. Image($r("app.media.icon")).width(20).height(20).margin({ right: 5 })
  11. Text(`Menu${index + 1}`).fontSize(20)
  12. }
  13. .width('100%')
  14. .height(30)
  15. .justifyContent(FlexAlign.Center)
  16. .align(Alignment.Center)
  17. .onClick(() => {
  18. console.info(`Menu${index + 1} Clicked!`)
  19. })
  20. if (index != this.listData.length - 1) {
  21. Divider().height(10).width('80%').color('#ccc')
  22. }
  23. }.padding(5).height(40)
  24. })
  25. }.width(100)
  26. }
  27. build() {
  28. Column() {
  29. Text('click for menu')
  30. .fontSize(20)
  31. .margin({ top: 20 })
  32. .bindMenu(this.MenuBuilder)
  33. }
  34. .height('100%')
  35. .width('100%')
  36. .backgroundColor('#f0f0f0')
  37. }
  38. }

示例3

菜单(右键触发显示)

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ContextMenuExample {
  5. @Builder MenuBuilder() {
  6. Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
  7. Text('Test menu item 1')
  8. .fontSize(20)
  9. .width(100)
  10. .height(50)
  11. .textAlign(TextAlign.Center)
  12. Divider().height(10)
  13. Text('Test menu item 2')
  14. .fontSize(20)
  15. .width(100)
  16. .height(50)
  17. .textAlign(TextAlign.Center)
  18. }.width(100)
  19. }
  20. build() {
  21. Column() {
  22. Text('rightclick for menu')
  23. }
  24. .width('100%')
  25. .margin({ top: 5 })
  26. .bindContextMenu(this.MenuBuilder, ResponseType.RightClick)
  27. }
  28. }
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号