在 OpenHarmony(ArkUI) 中,“菜单”通常指 Menu / ContextMenu / 自定义菜单,不同场景监听方式不同。下面按常见用法说明。
Menu + MenuItemimport { Menu, MenuItem } from '@kit.ArkUI'
@Entry
@Component
struct Index {
@State selectText: string = ''
build() {
Column() {
Button('显示菜单')
.onClick((event) => {
Menu.show({
x: 100,
y: 100,
items: [
new MenuItem('复制')
.onClick(() => {
this.selectText = '复制'
}),
new MenuItem('粘贴')
.onClick(() => {
this.selectText = '粘贴'
})
]
})
})
Text(this.selectText)
}
}
}
✅ 监听方式:
每个 MenuItem 的 onClick 就是菜单项监听。
bindContextMenu 监听@Entry
@Component
struct Index {
@State msg: string = ''
build() {
Column() {
Text('长按或右键我')
.fontSize(20)
.bindContextMenu(
[
new MenuItem('选项A').onClick(() => this.msg = 'A'),
new MenuItem('选项B').onClick(() => this.msg = 'B')
],
{ x: 0, y: 0 }
)
Text(this.msg)
}
}
}
✅ 监听方式:
通过 MenuItem.onClick 监听用户选择。
@State + Column 模拟菜单@Entry
@Component
struct Index {
@State showMenu: boolean = false
@State result: string = ''
build() {
Stack() {
Button('打开菜单')
.onClick(() => this.showMenu = true)
if (this.showMenu) {
Column() {
Text('菜单项1')
.onClick(() => {
this.result = '菜单项1'
this.showMenu = false
})
Text('菜单项2')
.onClick(() => {
this.result = '菜单项2'
this.showMenu = false
})
}
.backgroundColor('#fff')
.padding(10)
}
Text(this.result)
}
}
}
✅ 监听方式:
直接对 Text / Button 使用 onClick。
⚠️ OpenHarmony 原生 Menu 没有“关闭回调”
常见解决方案:
.onClick(() => {
this.showMenu = false
})
@Watch('onMenuChange')
@State showMenu: boolean = false
onMenuChange() {
console.info('菜单状态:', this.showMenu)
}
| 场景 | 监听方式 |
|---|---|
| 菜单项点击 | MenuItem.onClick |
| 右键菜单 | bindContextMenu |
| 自定义菜单 | onClick |
| 菜单关闭 | @Watch / 空白点击 |
| 系统返回 | ❌ 不支持 |
如果你能告诉我:
我可以给你 更精确的示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。