OpenHarmony 4.0 Release横屏配置

一、前言

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竖屏显示等。

✍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源码开发创作吧~

了解更多关于OpenHarmony文章↩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值