在 OpenHarmony 中,“菜单适配”通常指在 不同设备形态(手机 / 折叠屏 / 平板 / 智慧屏 / 车机) 以及 不同交互方式(触摸 / 鼠标 / 遥控器) 下,菜单能够正常显示、布局和交互。下面从 设计原则 → 常用菜单组件 → 适配方式 → 示例 四个层面说明。
一次开发,多端部署
交互方式自适应
布局自适应
Button('菜单')
.bindMenu([
{ value: '复制', action: () => {} },
{ value: '粘贴', action: () => {} }
])
✅ 适合:
.onClick((e) => {
e.stopPropagation()
// 显示自定义菜单
})
✅ 适合:
Navigation() {
// 菜单内容
}
✅ 适合:
import mediaquery from '@ohos.mediaquery'
let isTablet = false
mediaquery.matchMediaSync('(min-width: 600vp)').on('change', (e) => {
isTablet = e.matches
})
if (isTablet) {
// 使用侧边菜单
} else {
// 使用底部菜单
}
.onMouse((e) => {
if (e.button === 2) {
// 右键菜单
}
})
.onClick(() => {
// 触摸菜单
})
Button('菜单')
.focusable(true)
.onKeyEvent((e) => {
if (e.keyCode === 13) {
// 确认键打开菜单
}
})
mediaquery.matchMediaSync('(min-width: 840vp)').on('change', () => {
// 切换为双栏菜单
})
| 设备 | 推荐菜单 |
|---|---|
| 手机 | 底部弹窗 / bindMenu |
| 折叠屏展开 | 侧边 Navigation |
| 平板 | 左侧菜单 + 右键 |
| 智慧屏 | 焦点菜单 |
| 车机 | 大按钮 + 语音 |
if (isTablet) {
Navigation() {
List() {
ListItem('首页')
ListItem('设置')
}
}
} else {
Button('菜单')
.bindMenu([
{ value: '首页', action: () => {} },
{ value: '设置', action: () => {} }
])
}
OpenHarmony 菜单适配 = ArkUI + 媒体查询 + 交互区分 + 布局自适应
如果你有具体场景(比如:
✅ 右键菜单怎么做
✅ 智慧屏菜单怎么适配
✅ 折叠屏菜单示例
✅ OpenHarmony 4.x / 5.x 差异)
可以直接告诉我,我可以给你 完整代码示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。