HarmonyOS 是否有一种方式能支持打开一个新路由时只在新路由中应用横屏效果,其他路由仍保持竖屏

一个竖屏页点击切换到横屏时,是使用打开一个新路由的方式,目前的横屏实现方式,是在新路由页面中设置横屏 lastWindow.setPreferredOrientation(window.Orientation.LANDSCAPE),此时会导致一个问题,就是切换路由页面的过程中,原本竖屏的一级页面会被同时更改为横屏,原本横屏的二级页面会被同时修改为竖屏,并且在路由页面过渡的过程中这种更改是可见的,此情况被我司测试判断为缺陷。现考虑在跳转二级横屏页面时能否实现直接打开一个已经被置为横屏状态的路由容器,并且不影响一级竖屏页面的场景?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

1、首先打开entry下面的module.json5文件,在abilities节点下添加一个orientation的属性:“orientation”: ‘unspecified’

2、第一个页面:

import { router } from '@kit.ArkUI';
@Entry
@Component
struct aboutScreen1 {
  @State message: string = '';

  build() {
    Column() {
      Text('首页,点我跳转')
        .fontSize(30)
        .textAlign(TextAlign.Center)
        .width('100%')
        .fontWeight(500)
        .height('100%')
        .onClick(() => {
          router.pushUrl({url: "pages/aboutScreen2" })
        })
    }
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .backgroundColor(Color.White)
    .height('100%')
  }
}

3、第二个页面:

import { router, window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct aboutScreen1 {
  @State message: string = '';

  aboutToAppear(): void {
    let orientation = window.Orientation.LANDSCAPE
    this.setScreenOrientation(orientation)
  }

  aboutToDisappear(): void {
    let orientation = window.Orientation.PORTRAIT
    this.setScreenOrientation(orientation)
  }

  setScreenOrientation(orientation: window.Orientation) {
    let windowClass: window.Window | undefined = undefined;
    try{
      let promise = window.getLastWindow(getContext())
      promise.then((data) => {
        windowClass = data
        windowClass.setPreferredOrientation(orientation)
      }).catch((err: BusinessError) => {
        console.error('getLastWindow error')
      })
    } catch (e) {
      console.error('setScreenOrientation error')
    }
  }

  build() {
    Column() {
      Text('我横屏啦')
        .fontSize(30)
        .textAlign(TextAlign.Center)
        .width('100%')
        .fontWeight(500)
        .height('50%')
    }
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .backgroundColor(Color.White)
    .height('100%')
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
如何通过路由方式打开
401浏览 • 1回复 待解决
router路由中的params对象
320浏览 • 1回复 待解决
如何获取当前是还是啊?
4937浏览 • 1回复 待解决
使用Promise实现一种串行调用方式
1060浏览 • 1回复 待解决