当前位置: 首页 > news >正文

开源鸿蒙横竖屏切换

文档概述
说明:

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 核心代码修改
找到窗口方向配置相关代码,将旋转模式替换为全局自动旋转:

// 导入依赖(如已存在可忽略)importwindow 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 你的产品名
  1. 编译完成后打包系统镜像,烧录至设备

6.2 功能验证

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

七、常见问题与踩坑总结

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

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

http://www.jsqmd.com/news/542224/

相关文章:

  • Super Qwen Voice World效果惊艳:‘金币数量’HUD实时反映生成计数
  • 如何高效批量下载抖音内容:从单视频到用户主页的完整解决方案
  • Apache IoTDB Web Workbench:告别命令行,拥抱可视化时序数据库管理新时代
  • 达摩院PALM春联模型多场景落地:政务大厅自助春联机解决方案
  • Qwen3-ASR-0.6B惊艳效果:藏语、维吾尔语等少数民族语言识别案例
  • 零基础玩转OpenClaw:Qwen3-32B镜像实现首个自动化任务
  • 快速掌握文本编码:ESFT-token-code-lite入门指南
  • 短效代理是什么?它有什么用?一文讲清定义、特点与应用价值
  • 百度网盘非会员限速如何破解?这个开源工具让你下载速度提升3倍!
  • SDMatte图像预处理建议:曝光校正、去噪、锐化对抠图质量影响量化分析
  • YOLO系列专栏(一):YOLO 2026 数据集增强 | 图像 + 标签同步增强,多方法高效实现
  • 像素时装锻造坊应用场景:Metaverse虚拟形象像素皮肤批量定制服务
  • 79.单词搜索
  • ubuntu22.04环境鸿蒙全仓代码编译配置
  • Gemma-3 Pixel Studio镜像免配置:开箱即用的12B多模态推理工作站
  • Vite项目实战:解决monaco-editor中文汉化失败的3种方法(附最新语言包下载)
  • 从输入网址到访问服务器响应返回客户端
  • 155农村事务管理与交流平台系统-springboot+vue+微信小程序
  • 功能齐全的屏幕截图C++实现详解(附源码)
  • 智能周报生成器:OpenClaw+百川2-13B自动汇总工作成果
  • 156湖南交通工程学院学生就业信息系统-springboot+vue
  • 告别理论!用Cobalt Strike实战红日靶场:从蚁剑上线到SMB Beacon横向移动的避坑指南
  • 什么时候会触发FullGC
  • 百川2-13B模型量化对比:4bits与8bits版本在OpenClaw任务中的差异
  • AI 辅助 AUTOSAR 测试
  • python 第六课 (字典 函数 None 作用域 函数嵌套 函数递归调用 重点)
  • 3步掌握高效视频处理:ffmpegGUI让复杂命令可视化
  • 高效掌握BBDown:全场景哔哩哔哩视频下载工具使用指南
  • AutoDock Vina分子对接中过渡金属原子类型处理的5种突破性策略:高级技术架构指南
  • Switch-Toolbox:如何破解任天堂游戏文件编辑的三大技术难题?