一、前言
OpenHarmony源码默认基于手机类竖屏设备配置,在某些行业或场景,如平板、电视、广告机等常常需要横屏显示,因此需要修改OpenHarmony 默认显示方向,由竖屏改为横屏。
二、环境配置
- 系统版本: OpenHarmony 4.0 Release (4.0.10.13) 32bit
- 设备平台:DAYU 200 RK3568
三、系统默认横屏
3.1屏幕方向调试命令
可使用hdc命令修改设备/system/etc/window/resources/display_manager_config.xml配置文件buildInDefaultOrientation参数,重启生效:
# 拷贝设备display_manager_config.xml 至本地桌面
hdc shell mount -o remount,rw /;hdc file recv /system/etc/window/resources/display_manager_config.xml C:\Users\xxx\Desktop\display_manager_config.xml
# 修改buildInDefaultOrientation并保存(默认为0)
<buildInDefaultOrientation>2</buildInDefaultOrientation>
# 拷贝本地display_manager_config.xml 至设备原路径
hdc shell mount -o remount,rw /;hdc file send C:\Users\xxx\Desktop\display_manager_config.xml /system/etc/window/resources/display_manager_config.xml
#重启生效
hdc shell reboot
3.2不同配置值效果
- 未指定: <buildInDefaultOrientation>
0<buildInDefaultOrientation> 表示未指定屏幕方向,使用默认方向,与<buildInDefaultOrientation>1<buildInDefaultOrientation>显示一致

- 竖屏: <buildInDefaultOrientation>
1<buildInDefaultOrientation>

- 横屏: <buildInDefaultOrientation>
2<buildInDefaultOrientation>

- 竖屏反转: <buildInDefaultOrientation>
3<buildInDefaultOrientation>

- 横屏反转: <buildInDefaultOrientation>
4<buildInDefaultOrientation>

3.3 源码修改
rk3568设备/system/etc/window/resources/display_manager_config.xml配置文件在源码中对应
foundation/window/window_manager/resources/config/rk3568/display_manager_config.xml
<!-- Indicates orientation of the built-in screen -->
<!-- 0: Orientation::UNSPECIFIED -->
<!-- 1: Orientation::VERTICAL 2: Orientation::HORIZONTAL-->
<!-- 3: Orientation::REVERSE_VERTICAL 4: Orientation::REVERSE_HORIZONTAL -->
<buildInDefaultOrientation>2</buildInDefaultOrientation>
全编后更新系统验证。
细心的你可能发现,Launcher概率性竖屏,并显示异常,但系统设置应用横屏正常。

3.4 横屏异常处理
系统由横屏改为竖屏后,仍有一些未完全适配的问题,如:开机Logo&开机视频仍竖屏、Launcher概率性竖屏异常,输入法UI横屏适配异常、OTA升级UI竖屏显示等。
- 开机画未横屏显示:使用横屏开机画替换原本的竖屏开机画
原 开机第一画:device\board\hihope\rk3568\kernel\logo.bmp

原 开机第二画:device\board\hihope\rk3568\kernel\logo_kernel.bmp

- 开机动画和Launcher概率性横屏显示竖屏:已有先关文章,此处笔者不再赘述,可参考:OpenHarmony系统解决方案 - 配置屏幕方向导致开机动画和Launcher显示异常
✍OneMoreThink
修改foundation/window/window_manager/wmserver/src/window_node_container.cpp可模块化编译和验证:
注意:64位系统, libwms.z.so拷贝至/system/lib64/libwms.z.so
#模块化编译libwms.z.so
./build.sh -p rk3568 --build-target libwms
#将生成的libwms.z.so替换设备libwms.z.so
hdc shell mount -o remount,rw /;hdc file send xxx\out\rk3568\window\window_manager\libwms.z.so /system/lib/libwms.z.so
# 重启设备生效
hdc shell reboot
更多OpenHarmony模块编译技巧可参考OpenHarmony模块化编译↩
- recovery升级界面未横屏显示: 将在后续文章中分享,请关注更新~
四、应用设置屏幕方向
本章节介绍在应用中如何设置屏幕方向
- 设置应用UI方向
可在module.json5 abilities配置中添加orientation:
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
...
"orientation": "auto_rotation",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
...
}
]
参考:module.json5配置文件-abilities标签↩
orientation 标识当前UIAbility组件启动时的方向,支持配置枚举,或启动方向资源索引。
启动方向枚举支持的取值如下:
- unspecified:未指定方向,由系统自动判断显示方向。
- landscape:横屏。
- portrait:竖屏。
- follow_recent:跟随背景窗口的旋转模式。
- landscape_inverted:反向横屏。
- portrait_inverted:反向竖屏。
- auto_rotation:随传感器旋转。
- auto_rotation_landscape:传感器横屏旋转,包括横屏和反向横屏。
- auto_rotation_portrait:传感器竖屏旋转,包括竖屏和反向竖屏。
- auto_rotation_restricted:传感器开关打开,方向可随传感器旋转。
- auto_rotation_landscape_restricted:传感器开关打开,方向可随传感器旋转为横屏, 包括横屏和反向横屏。
- auto_rotation_portrait_restricted:传感器开关打开,方向随可传感器旋转为竖屏, 包括竖屏和反向竖屏。
- locked:传感器开关关闭,方向锁定。
- auto_rotation_unspecified:受开关控制和由系统判定的自动旋转模式。
- follow_desktop:跟随桌面的旋转模式。
配置启动方向的资源索引时,取值为长度不超过255字节的字符串,配置示例:$string:orientation。
说明:
- 从API version 14开始,支持配置启动方向资源索引。 字符串 该标签可缺省,缺省值为unspecified。
- 设置系统屏幕方向
使用@ohos.screen setOrientation()接口即可let promise: Promise<Array<screen.Screen>> = screen.getAllScreens(); promise.then((data: Array<screen.Screen>) => { this.mScreen = data[0]; this.mScreenRotation = this.mScreen.orientation console.log('Succeeded in getting all screens. Data:' + JSON.stringify(data)); }).catch((err: BusinessError) => { console.log('Failed to get all screens. Cause: ' + JSON.stringify(err)); }); this.mScreen.setOrientation(this.mScreenRotation, (err: BusinessError) => { const errCode: number = err.code; if (errCode) { console.error('Failed to set the vertical orientation. Code: ' + JSON.stringify(err)); return; } console.info('Succeeded in setting the vertical orientation.'); });

Demo参考:ScreenDemo
五、总结
Congratulations~✌ 通过本文,你已基本掌握:
- OpenHarmony系统默认屏幕方向配置
- OpenHarmony横屏Logo、bootanimation和Launcher显示异常处理
- OpenHarmony 应用如何配置屏幕方向和设置系统屏幕方向
接下来尝试更多有趣OpenHarmony源码开发创作吧~
1549

被折叠的 条评论
为什么被折叠?



