文档概述
说明:

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.ts

3.2 核心代码修改
找到窗口方向配置相关代码,将旋转模式替换为全局自动旋转:

// 导入依赖(如已存在可忽略)
import window from '@ohos.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_orientation=0
屏幕方向说明:
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 编译步骤

 1. 执行源码编译命令:

./build.sh --product-name 你的产品名

 2. 编译完成后打包系统镜像,烧录至设备
 
6.2 功能验证
 1. 开机进入系统,打开测试demo(已放置附件当中)旋转角度开关
 2. 检查横屏状态下图标、状态栏、控件布局正常;
 3. 重启设备,验证屏幕方向保持上一次设置;  

七、常见问题与踩坑总结

 1. 修改后旋转不生效
 - 检查Launcher应用是否成功替换
 - 确认 Launcher 重启逻辑执行成功
 2. 系统属性不生效
 - 确认 ohos.para 文件语法无错误,无多余空格;
 - 使用 param get 命令验证属性是否生效。

注:附件里有测试demo和效果效果展示视频

相关文件下载
screentest.zip
1.65 MB
下载
效果展示.zip
2.07 MB
下载
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐