第九节HarmonyOS 常用基础组件23-Menu、MenuItem、MenuItemGroup

1、描述

Menu:以垂直列表形式显示的菜单。

MenuItem:用来展示菜单Menu中具体的item菜单项。

MenuItemGroup:该组件用来展示菜单MenuItem的分组。

2、子组件

Menu:包含MenuItem、MenuItemGroup子组件。

MenuItem:无。

MenuItemGroup:MenuItem

3、接口

Menu()

MenuItem(value?: MenuItenOptions | CustomBuilder)

MenuItemGroup(value?: MenuItemGroupOptions)

4、参数

参数名

参数类型

必填

描述

value

MenuItenOptions | CustomBuilder

包含设置MenuItem的各项信息。

value

MenuItemGroupOptions

包含设置MenuItemGroup的标题和尾部显示信息。

4、属性

Menu:

fontSize - Length - 统一设置Menu中所有文本的尺寸。

MenuItem:
selected - boolean - 设置菜单项是否选中,默认值:false。

selectIcon - boolean -当菜单被选中时,是否显示被选中的图标。

5、MenuItem - MenuItemOptions类型说明

名称

类型

必填

描述

startIcon

ResourceStr

Item中显示在左侧的图标信息路径。

content

ResourceStr

Item的内容信息。

endIcon

ResourceStr

Item中显示在右侧的图标信息路径。

labelInfo

ResourceStr

定义结束标签信息,如快捷方式Ctrl+C等。

builder

CustomBuilder

用于构建二级菜单。

6、MenuItemGroup -MenuItemGroupOptions类型说明

名称

类型

必填

描述

header

ResourceStr | CustomBuilder

设置对应group的标题显示信息。

footer

ResourceStr | CustomBuilder

设置对应group的尾部显示信息。

7、事件(MenuItem)

onChange - (selsected:boolean) => void - 当选中状态发生变化时,触发该回调,只有手动触发且MenuItem状态改变时才会触发onChange回调。value为true时,表示已选中,value为false时,表示未选中。

8、示例

import router from '@ohos.router'

@Entry
@Component
struct MenuPage {
  @State message: string = 'click to show menu'

  @Builder
  subMenu() {
    Menu() {
      MenuItem({
        startIcon: $r('app.media.icon'),
        content: "二级菜单-复制",
        labelInfo: "Ctrl+C"
      })
        .onChange((selected) => {
          console.log("zhangDM", "subMenu MenuItem1 onChange selected = " + selected)
        })
      MenuItem({
        startIcon: $r('app.media.icon'),
        content: "二级菜单-粘贴",
        labelInfo: "Ctrl+V"
      })
        .onChange((selected) => {
          console.log("zhangDM", "subMenu MenuItem2 onChange selected = " + selected)
        })
    }
  }

  @Builder
  myMenu() {
    Menu() {
      MenuItem({ startIcon: $r('app.media.icon'), content: "菜单选项1" })
      MenuItem({ startIcon: $r('app.media.icon'), content: "菜单选项2" })
      MenuItem({
        startIcon: $r('app.media.icon'),
        content: "菜单二级",
        endIcon: $r('app.media.ic_ok'),
        builder: this.subMenu.bind(this)
      })

      MenuItemGroup({ header: "小标题" }) {
        MenuItem({
          startIcon: $r('app.media.icon'),
          content: "MenuItemGroup-01"
        })
          .selected(true)
          .onChange((selected) => {
            console.log("zhangDM", "myMenu MenuItemGroup1 onChange selected = " + selected)
          })
        MenuItem({
          startIcon: $r('app.media.icon'),
          content: "MenuItemGroup-02"
        })
          .selected(true)
          .onChange((selected) => {
            console.log("zhangDM", "myMenu MenuItemGroup2 onChange selected = " + selected)
          })
      }

      MenuItem({
        startIcon: $r("app.media.icon"),
        content: "菜单选项",
        endIcon: $r("app.media.ic_ok")
      })

    }
  }

  build() {
    Row() {
      Scroll() {
        Column() {
          Text(this.message)
            .fontSize(22)
            .fontWeight(FontWeight.Bold)
            .width("96%")

          Blank(12)
          Button("Menu文本文档")
            .fontSize(20)
            .backgroundColor('#007DFF')
            .width('96%')
            .onClick(() => {
              // 处理点击事件逻辑
              router.pushUrl({
                url: "pages/baseComponent/menu/MenuDesc",
              })
            })
          Blank(12)

        }
        .width('100%')
        .bindMenu(this.myMenu)
      }
    }
    .padding({ top: 12, bottom: 12 })
  }
}

9、效果图

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Material-UI的MenuItem组件中展示二层子级,可以使用Menu组件和嵌套的MenuItem组件。首先,您需要在MenuItem组件中添加一个onClick事件,以便在单击时打开下一级菜单。然后,在onClick事件处理程序中,使用Menu组件来呈现下一级菜单,并将其相对于当前MenuItem组件定位。下面是一个示例代码: ``` import React, { useState } from 'react'; import { Menu, MenuItem, Typography } from '@material-ui/core'; function MyMenu() { const [anchorEl, setAnchorEl] = useState(null); const handleClick = (event) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; return ( <div> <MenuItem onClick={handleClick}> <Typography variant="inherit">First Level Item</Typography> </MenuItem> <Menu anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={handleClose} > <MenuItem onClick={handleClose}> <Typography variant="inherit">Second Level Item 1</Typography> </MenuItem> <MenuItem onClick={handleClose}> <Typography variant="inherit">Second Level Item 2</Typography> </MenuItem> </Menu> </div> ); } ``` 在上面的示例中,我们在MenuItem组件上添加了一个onClick事件,以便在单击时打开下一级菜单。在handleClick事件处理程序中,我们使用setAnchorEl将anchorEl状态设置为当前事件的目标。接下来,我们在Menu组件中呈现下一级菜单,并将其相对于当前MenuItem组件定位。最后,我们在每个子级MenuItem组件上添加了一个onClick事件处理程序,以便在单击时关闭菜单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyxhzdm

你的鼓励是我创作的最大动力!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值