在 OpenHarmony 中,“菜单适配横屏”通常指 应用界面(包括菜单、弹窗、设置项等)在设备横屏状态下能正常显示和使用。下面按常见场景说明怎么做。
在 module.json5 中设置:
"abilities": [
{
"name": "EntryAbility",
"orientation": "unspecified" // 或 "landscape"
}
]
常用取值:
portrait:仅竖屏landscape:仅横屏unspecified:跟随系统(推荐)sensor:根据传感器自动旋转若菜单在横屏不显示,第一步先确认这里是否限制了竖屏。
避免写死宽高,使用:
FlexGridRow / ColumnlayoutWeight示例:
Row() {
Menu()
.layoutWeight(1)
Content()
.layoutWeight(2)
}
import display from '@ohos.display'
@State isLandscape: boolean = false
aboutToAppear() {
const displayInfo = display.getDefaultDisplaySync()
this.isLandscape = displayInfo.width > displayInfo.height
}
然后:
if (this.isLandscape) {
Row() { /* 横屏菜单 */ }
} else {
Column() { /* 竖屏菜单 */ }
}
Menu / BindMenuButton('菜单')
.bindMenu([
{ value: '选项1', action: () => {} },
{ value: '选项2', action: () => {} }
])
系统会自动适配横竖屏,无需额外处理。
横屏时注意:
width: 300vp@CustomDialog
struct MyMenu {
controller: CustomDialogController
build() {
Column() {
Text('菜单')
Button('关闭').onClick(() => this.controller.close())
}
.width('60%')
}
}
在横屏(尤其是平板)场景下:
if (this.isLandscape) {
Row() {
SideMenu()
MainContent()
}
} else {
Column() {
MainContent()
BottomTab()
}
}
✅ 横屏黑边
→ 检查 orientation 和布局是否写死尺寸
✅ 菜单被遮挡
→ 使用 SafeArea 或 padding
✅ 旋转后菜单不更新
→ 监听 display.on('change')
OpenHarmony 菜单适配横屏 = 允许横屏 + 响应式布局 + 根据屏幕方向切换菜单形态
如果你指的是 某个具体菜单(系统设置、Ability Menu、IDE 菜单、平板侧边栏),可以告诉我具体场景,我可以直接给你代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。