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

【HarmonyOS】鸿蒙应用如何进行页面横竖屏切换以及注意事项,自动切换横竖屏,监听横竖屏

【HarmonyOS】鸿蒙应用如何进行页面横竖屏切换以及注意事项,自动切换横竖屏,监听横竖屏

一、鸿蒙应用如何进行页面横竖屏调用API手动切换

1.首先要在EntryAbility 中获取主窗口对象
EntryAbility.ets

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';

export default class EntryAbility extends UIAbility {

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // 挂载globalThis上,可以当全局对象使用。当然此处实现方式因人而异,你可以放在单例里,或者localstore中等等
    globalThis.windowClass = windowStage.getMainWindowSync();
    windowStage.loadContent('pages/RotationTestPage', (err) => {
      if (err.code) {
        return;
      }
    });
  }
}

之后在需要调用横竖屏切换的页面或者逻辑中调用,我这里用按钮触发举例:
RotationTestPage.ets

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



struct RotationTestPage {
  private TAG: string = "RotationTestPage";

  onClickRotation = ()=>{
  	// 设置横竖屏状态
    let orientation = window.Orientation.LANDSCAPE;
    try{
      globalThis.windowClass.setPreferredOrientation(orientation, (err: BusinessError) => {
        if(err.code){
          console.error(this.TAG, 'Failed to set window orientation. Cause: ' + JSON.stringify(err));
          return;
        }
        console.info(this.TAG,'Succeeded in setting window orientation.');
      });
    }catch (exception) {
      console.error(this.TAG,'Failed to set window orientation. Cause: ' + JSON.stringify(exception));
    }
  }

  build() {
    RelativeContainer() {
      Text("点击切换为横屏")
        .id('RotationTestPageHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(this.onClickRotation)
    }
    .height('100%')
    .width('100%')
  }
}

window.Orientation具体数值,参见以下网址

注意:
设置主窗口的显示方向属性。仅在支持跟随sensor旋转的设备上生效,子窗口调用后不生效。

二、如何实现应用的屏幕自动旋转

在module.json5添加属性"orientation": “auto_rotation”。

"abilities": [ 
  { 
    "name": "EntryAbility", 
    "srcEntry": "./ets/entryability/EntryAbility.ets", 
    "description": "$string:EntryAbility_desc", 
    "icon": "$media:icon", 
    "label": "$string:EntryAbility_label", 
    "startWindowIcon": "$media:startIcon", 
    "startWindowBackground": "$color:start_window_background", 
    "exported": true, 
    "skills": [ 
      { 
        "entities": [ 
          "entity.system.home" 
        ], 
        "actions": [ 
          "action.system.home" 
        ] 
      } 
    ], 
    "orientation": "auto_rotation", // 随传感器旋转 
  } 
]

注意:
auto_rotation随传感器旋转 需要在系统下滑菜单中,放开自动锁定状态才可生效。

三、如何监听屏幕旋转

使用媒体查询接口监听屏幕旋转

import { mediaquery } from '@kit.ArkUI'; 
let listener = mediaquery.matchMediaSync('(orientation: landscape)'); // 监听横屏事件 
function onPortrait(mediaQueryResult: mediaquery.MediaQueryResult) { 
  if (mediaQueryResult.matches) { 
   // do something here 
  } else { 
   // do something here 
  } 
} 
listener.on('change', onPortrait) // 注册回调 
listener.off('change', onPortrait) // 去注册回调

http://www.kler.cn/a/466564.html

相关文章:

  • 《量子AI:突破量子比特稳定性与容错性的关键瓶颈》
  • 设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析
  • C#—SynchronizationContext类详解 (同步上下文)
  • Redis数据库笔记—— Hash(哈希)的扩容机制(rehash)
  • 开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!
  • ES IK分词器插件
  • Java IO 基础知识总结
  • Axios使用方法,axios.get、axios.post、axios.put、axios.delete
  • postman在软件测试中的应用
  • 一文读懂拟合法
  • 电脑cxcore100.dll丢失怎么办?
  • 华为ensp-BGP路由过滤
  • 【python】requests库发起HTTP请求
  • 职场常用Excel基础04-二维表转换
  • VS2015中使用boost库函数时报错问题解决error C4996 ‘std::_Copy_impl‘
  • 《探索机器人自主导航与路径规划技术的热点》
  • 常见的网络安全攻击技术
  • 如何在 ThinkPHP 中实现文件上传功能:实用示例
  • 网络安全:路由技术
  • HTML——63.普通按钮和隐藏域
  • word中编号统一格式
  • 青少年编程与数学 02-006 前端开发框架VUE 03课题、编写APP组件
  • ElasticSearch系列(一)
  • vue 基础参数增加多语言配置
  • 谷歌Willow芯片:量子计算为引擎加速人工智能在多领域的深度应用与变革
  • 人工智能之机器学习算法