如何监听当前屏幕的横竖屏状态?如何实现页面跟随屏幕横竖屏自动旋转?

北向实践与赋能

沙发 发表于 2024-1-4 11:34:39

如何监听当前屏幕的横竖屏状态?如何实现页面跟随屏幕横竖屏自动旋转?

关键字 屏幕旋转,自动旋转

解决方案 如何监听当前屏幕的横竖屏状态? 应用可以通过diplay.on监听屏幕状态改变   如何实现页面跟随屏幕横竖屏自动旋转? 1、Abilty级别配置:在模块配置文件module.json5中将EntryAbility设置为"orientation"; 2、动态设置:使用window.setPreferredOrientation设置窗口方向

示例代码

import window from '@ohos.window';
import display from '@ohos.display';

const TAG = 'foo'
const ORIENTATION: Array<string> = ['垂直', '水平', '反向垂直', '反向水平']

@Entry
@Component
struct ScreenTest {
  @State rotation: number = 0
  @State message: string = ORIENTATION[this.rotation]

  aboutToAppear() {
    this.setOrientation()

    let callback = async () => {
      let d = await display.getDefaultDisplaySync()
      this.rotation = d.rotation
      this.message = ORIENTATION[this.rotation]
      console.info(TAG, JSON.stringify(d))
    }
    try {
      display.on("change", callback); //监听屏幕状态改变
    } catch (exception) {
      console.error(TAG, 'Failed to register callback. Code: ' + JSON.stringify(exception));
    }
  }

  setOrientation() {
    try {
      window.getLastWindow(getContext(this), (err, data) => { //获取window实例
        if (err.code) {
          console.error(TAG, 'Failed to obtain the top window. Cause: ' + JSON.stringify(err));
          return;
        }
        let windowClass = data;
        console.info(TAG, 'Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));

        let orientation = window.Orientation.AUTO_ROTATION; //设置窗口方向为传感器自动旋转模式。
        try {
          windowClass.setPreferredOrientation(orientation, (err) => {
            if (err.code) {
              console.error(TAG, 'Failed to set window orientation. Cause: ' + JSON.stringify(err));
              return;
            }
            console.info(TAG, 'Succeeded in setting window orientation.');
          });
        } catch (exception) {
          console.error(TAG, 'Failed to set window orientation. Cause: ' + JSON.stringify(exception));
        }
        ;
      });
    } catch (exception) {
      console.error(TAG, 'Failed to obtain the top window. Cause: ' + JSON.stringify(exception));
    }
    ;
  }

  build() {
    Row() {
      Column() {
        Text(`${this.rotation}`).fontSize(25)
        Text(`${this.message}`).fontSize(25)
      }
      .width("100%")
    }
    .height("100%")
  }
}

参考资料

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-window.md#setpreferredorientation9

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-display.md#displayonaddremovechange

iamdaidai

发表于 2024-7-30 11:22  IP属地: 广东省广州市

回复 北向实践与赋能: 请问下,您这个转了之后,按钮什么的能正常操作吗?我的转了,按钮等控件无法正常操作了

qq_44160056

发表于 2024-11-16 15:48  IP属地: 陕西省西安市

回复 iamdaidai: 我也是这个问题,求解答

我爱代码!代码爱我

发表于 2024-11-17 17:53  IP属地: 河南省

回复 iamdaidai: 您现在解决了吗?现在发现个问题是,不在全屏的模式下是没问题的,但只要设置成全屏,就会出现类似问题.所以,求解答

【3 条回复】
共4 条回复,点击查看

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部