开源鸿蒙横竖屏切换
文档概述说明1.文章由移远通信技术股份有限公司提供2.以下内容包含了个人理解仅供参考如有不合理处请联系笔者修改18770704023(微信同号)一、前言 适配背景在很多OpenHarmony产品上可以发现默认屏幕旋转能力存在明显局限系统自动旋转开关仅对第三方应用生效桌面 Launcher 无法跟随传感器旋转强制横屏后桌面图标、控件布局错乱显示比例异常屏幕方向设置为临时状态设备重启后自动恢复默认竖屏无法持久化官方窗口 API 仅支持应用级旋转不满足整机全局旋转需求。本文通过修改系统 Launcher 窗口属性、优化 UI 加载逻辑、增加系统属性持久化配置实现完整的全局横竖屏切换能力。二、开发环境说明系统版本OpenHarmony 5.0.3开发语言ArkTS (ETS)、C编译环境Ubuntu 20.04.6 LTS涉及模块Launcher、系统参数服务、窗口管理器三、全局屏幕旋转核心修改桌面 应用同步生效OpenHarmony 窗口管理器提供多种旋转策略默认使用受限自动旋转仅作用于应用窗口需修改为全局自动旋转模式。3.1 修改文件路径launcher/common/src/main/ets/default/manager/WindowManager.ts3.2 核心代码修改找到窗口方向配置相关代码将旋转模式替换为全局自动旋转// 导入依赖如已存在可忽略importwindow fromohos.window;// 原代码受限自动旋转仅应用旋转桌面不生效 // win.setPreferredOrientation(window.Orientation.AUTO_ROTATION_RESTRICTED);// 修改后全局自动旋转桌面应用同步跟随传感器旋转 win.setPreferredOrientation(window.Orientation.AUTO_ROTATION);3.3 旋转枚举说明四、横屏 UI 布局异常修复方案开启全局旋转后部分版本会出现 Launcher 横屏图标偏移问题大致现象如下注部分设备和版本存在这个问题并不是所有。4.1 解决方案通过重启 Launcher 进程强制刷新 UI 布局两种实现方式方式 1命令行手动调试# 查找launcher进程ID并杀死kill-9$(pidof launcher)方式 2系统代码内自动重载推荐在旋转逻辑后增加进程重启调用实现旋转后自动修复布局。五、屏幕方向持久化重启不丢失配置默认旋转状态为内存级重启失效通过系统 persist 属性实现开机自动加载配置。5.1 添加系统持久化参数修改系统参数配置文件新增屏幕方向持久化属性文件路径base/startup/init/services/etc/param/ohos.para添加配置内容# 屏幕方向持久化配置persist.sys.screen_orientation0屏幕方向说明0默认值1垂直2水平3反向垂直4反向水平5.2 业务层同步保存状态在横竖屏切换逻辑中同步更新系统属性systemParameterEnhance.setSync(persist.sys.orientation, value)value值说明 screen.Orientation.VERTICAL //垂直 screen.Orientation.HORIZONTAL //水平 screen.Orientation.REVERSE_VERTICAL //反向垂直 screen.Orientation.REVERSE_HORIZONTAL 反向水平5.3 开机自加载方向配置在系统开机启动阶段读取 persist 属性并设置屏幕方向替代原本读取display_manager_config.xml的逻辑实现重启不重置。六、完整编译 验证流程6.1 编译步骤执行源码编译命令./build.sh --product-name 你的产品名编译完成后打包系统镜像烧录至设备6.2 功能验证开机进入系统打开测试demo已放置附件当中旋转角度开关检查横屏状态下图标、状态栏、控件布局正常重启设备验证屏幕方向保持上一次设置七、常见问题与踩坑总结修改后旋转不生效检查Launcher应用是否成功替换确认 Launcher 重启逻辑执行成功系统属性不生效确认 ohos.para 文件语法无错误无多余空格使用 param get 命令验证属性是否生效。注附件里有测试demo和效果效果展示视频