调用setPreferredOrientation设置横竖屏,PC 端完全不生效
鸿蒙PC横竖屏设置问题示例项目
一个用于演示鸿蒙PC端横竖屏设置不生效问题的示例项目,说明了问题原因、解决方案和最佳实践。
项目信息
- 包名:
com.shili.pcerror - 版本:
1.0.0 - 目标SDK:
HarmonyOS 6.1.1 (24) - 兼容SDK:
HarmonyOS 6.1.0 (23) - 设备类型:
2in1(PC端)
项目结构
hongmengPCErrordemo/
├── AppScope/ # 应用级配置
│ ├── resources/
│ └── app.json5
├── entry/ # 主模块
│ ├── src/
│ │ ├── main/
│ │ │ ├── ets/
│ │ │ │ ├── entryability/
│ │ │ │ │ └── EntryAbility.ets
│ │ │ │ └── pages/
│ │ │ │ └── Index.ets
│ │ │ ├── resources/
│ │ │ └── module.json5 # 模块配置(重要)
│ └── build-profile.json5
├── docs/ # 文档目录
│ ├── 鸿蒙PC问题解决-窗口配置错误修复指南.md
│ └── 鸿蒙PC问题解决-横竖屏设置完全无效详解.md
├── build-profile.json5
├── hvigorfile.ts
└── oh-package.json5
功能说明
本项目主要演示鸿蒙PC端横竖屏设置不生效的问题:
PC端横竖屏设置不生效
⚠️ 重要发现:在PC端调用 setPreferredOrientation 设置横竖屏完全无效!
现象:
- 调用
window.setPreferredOrientation()API 返回成功 - 但窗口方向完全没有变化
- 无论设置 PORTRAIT(竖屏)还是 LANDSCAPE(横屏),PC端都会忽略
原因:
- PC设备没有方向传感器
- PC应用以窗口形式运行,方向由用户控制
- 系统设计上会忽略应用的方向请求
正确做法:
import { deviceInfo } from '@kit.BasicServicesKit';
// 根据设备类型采用不同策略
if (deviceInfo.deviceType === 'phone' || deviceInfo.deviceType === 'tablet') {
// 手机/平板:可以设置横竖屏
mainWindow.setPreferredOrientation(window.Orientation.PORTRAIT);
} else {
// PC端:使用响应式布局,不强制设置方向
// 让窗口自适应,用户可自由调整
}
详细说明:👉 鸿蒙PC问题解决-横竖屏设置完全无效详解
核心知识点
设备类型判断
使用 deviceInfo.deviceType 判断设备类型:
| 设备类型 | deviceType 值 | 说明 |
|---|---|---|
| 手机 | phone |
可以设置横竖屏 |
| 平板 | tablet |
可以设置横竖屏 |
| PC (2in1) | 2in1 |
不支持横竖屏设置 |
| 默认设备 | default |
通常为PC,不支持横竖屏设置 |
PC端窗口特性
- 窗口化运行: PC应用以窗口形式运行,不是全屏独占
- 用户控制: 窗口的位置、大小由用户控制
- 无方向概念: PC窗口没有横竖屏概念,只有宽和高
- 响应式布局: 应该根据窗口尺寸动态调整布局
快速开始
环境要求
- DevEco Studio 5.0+
- HarmonyOS SDK 6.1+
- Node.js 18+
安装与运行
- 克隆项目到本地
- 使用 DevEco Studio 打开项目
- 等待依赖同步完成
- 连接真机或启动模拟器
- 点击运行按钮
构建命令
# 构建HAP包
hvigorw --mode module -p module=entry@default -p product=default assembleHap
# 构建Release版本
hvigorw --mode module -p module=entry@default -p product=default -p buildMode=release assembleHap
常见问题解决
横竖屏设置不生效(PC端)
现象:
- 调用
setPreferredOrientation()返回成功但无效 - PC端窗口方向无法通过代码控制
原因:
- PC端应用以窗口形式运行,方向由用户控制
- 系统设计上会忽略应用的方向请求
解决方案: 使用设备类型判断,PC端采用响应式布局而非强制方向:
import { deviceInfo } from '@kit.BasicServicesKit';
if (deviceInfo.deviceType === 'phone' || deviceInfo.deviceType === 'tablet') {
// 移动端:设置横竖屏
mainWindow.setPreferredOrientation(window.Orientation.PORTRAIT);
} else {
// PC端:使用响应式布局
// 不设置方向,让窗口自适应
}
文档
详细的问题分析和解决方案请查看:
文档包含:
- 问题现象和原因分析
- 设备特性差异对比
- PC端窗口运行机制
- 多种解决方案
- 最佳实践和代码模板
- 实际案例演示
另外,窗口配置相关问题的解决方案请查看:
开发建议
- 设备适配: 区分手机和PC端,采用不同的窗口策略
- 横竖屏处理: PC端不要强制设置横竖屏,使用响应式布局自适应
- 响应式布局: PC端应用应该根据窗口尺寸动态调整布局
- 用户体验: PC端让用户自由控制窗口,不要强制改变窗口状态
- 文档查阅: 遇到问题先查阅官方文档,确认API在不同平台的行为
许可证
本项目仅供学习和参考使用。
联系方式
如有问题或建议,欢迎提交Issue或PR。
注意: 本项目主要用于演示鸿蒙PC端横竖屏设置不生效的问题,说明了PC端无法设置横竖屏的原因和正确做法,适合开发者学习参考,避免在开发中遇到相同问题。