开天辟地 HarmonyOS(鸿蒙) - UI: 屏幕方向

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

开天辟地 HarmonyOS(鸿蒙) - UI: 屏幕方向

示例如下:

pages\ui\OrientationDemo.ets

/** 屏幕方向*/import { RadioBar, TitleBar } from '../TitleBar';
import { common } from '@kit.AbilityKit';
import { display, window } from '@kit.ArkUI';@Entry
@Component
struct OrientationDemo {build() {Column() {TitleBar()Tabs() {TabContent() { MySample1() }.tabBar('通过程序控制').align(Alignment.Top)TabContent() { MySample2() }.tabBar('通过配置控制').align(Alignment.Top)TabContent() { MySample3() }.tabBar('控制悬浮窗方向').align(Alignment.Top)}.scrollable(true).barMode(BarMode.Scrollable).layoutWeight(1)}.backgroundColor(Color.Yellow)}
}@Component
struct MySample1 {@State message: string = ""context = getContext(this) as common.UIAbilityContext;windowStage = this.context.windowStage;windowClass = this.windowStage.getMainWindowSync();valueList = ["UNSPECIFIED", "PORTRAIT", "LANDSCAPE", "PORTRAIT_INVERTED", "LANDSCAPE_INVERTED", "AUTO_ROTATION", "AUTO_ROTATION_PORTRAIT", "AUTO_ROTATION_LANDSCAPE", "AUTO_ROTATION_RESTRICTED", "AUTO_ROTATION_PORTRAIT_RESTRICTED", "AUTO_ROTATION_LANDSCAPE_RESTRICTED", "LOCKED", "AUTO_ROTATION_UNSPECIFIED", "USER_ROTATION_PORTRAIT", "USER_ROTATION_LANDSCAPE", "USER_ROTATION_PORTRAIT_INVERTED", "USER_ROTATION_LANDSCAPE_INVERTED", "FOLLOW_DESKTOP"]aboutToAppear() {let callback = async () => {/** display.getDefaultDisplaySync() - 旋转后,显示设备的相关信息*   width - 宽*   height - 高*   orientation - 方向(display.Orientation 枚举)*     PORTRAIT - 竖屏*     LANDSCAPE - 横屏(竖屏顺时针旋转 90 度)*     PORTRAIT_INVERTED - 反向竖屏(竖屏顺时针旋转 180 度)*     LANDSCAPE_INVERTED - 反向横屏(竖屏顺时针旋转 270 度)*/let newDisplay: display.Display = display.getDefaultDisplaySync();this.message += `orientation:${newDisplay.orientation}, width:${newDisplay.width}, height:${newDisplay.height}\n`}// 监听显示设备的方向变化display.on("change", callback);}aboutToDisappear(): void {// 关闭指定事件的监听display.off("change")}build() {Column({space:10}) {Text(this.message)RadioBar({valueList: this.valueList, onChange: (selectedIndex: number) => {/** windowClass.setPreferredOrientation() - 设置窗口的显示方向(window.Orientation 枚举)*   UNSPECIFIED - 未定义,由系统决定*   PORTRAIT - 竖屏*   LANDSCAPE - 横屏(竖屏顺时针旋转 90 度)*   PORTRAIT_INVERTED - 反向竖屏(竖屏顺时针旋转 180 度)*   LANDSCAPE_INVERTED - 反向横屏(竖屏顺时针旋转 270 度)*   AUTO_ROTATION - 跟随屏幕方向自动旋转(支持 4 个方向),且不受控制中心旋转开关的控制*   AUTO_ROTATION_PORTRAIT - 跟随屏幕方向自动旋转(仅支持竖屏和反向竖屏),且不受控制中心旋转开关的控制*   AUTO_ROTATION_LANDSCAPE - 跟随屏幕方向自动旋转(仅支持横屏和反向横屏),且不受控制中心旋转开关的控制*   AUTO_ROTATION_RESTRICTED - 跟随屏幕方向自动旋转(支持 4 个方向),且受控制中心旋转开关的控制*   AUTO_ROTATION_PORTRAIT_RESTRICTED - 跟随屏幕方向自动旋转(仅支持竖屏和反向竖屏),且受控制中心旋转开关的控制*   AUTO_ROTATION_LANDSCAPE_RESTRICTED - 跟随屏幕方向自动旋转(仅支持横屏和反向横屏),且受控制中心旋转开关的控制*   AUTO_ROTATION_UNSPECIFIED - 跟随屏幕方向自动旋转(由系统决定支持的方向,比如在经典的手机中仅支持 3 个方向,不支持反向竖屏),且受控制中心旋转开关的控制*   USER_ROTATION_PORTRAIT - 临时旋转到竖屏,之后跟随屏幕方向自动旋转(由系统决定支持的方向,比如在经典的手机中仅支持 3 个方向,不支持反向竖屏),且受控制中心旋转开关的控制*   USER_ROTATION_LANDSCAPE - 临时旋转到横屏,之后跟随屏幕方向自动旋转(由系统决定支持的方向,比如在经典的手机中仅支持 3 个方向,不支持反向竖屏),且受控制中心旋转开关的控制*   USER_ROTATION_PORTRAIT_INVERTED - 临时旋转到反向竖屏,之后跟随屏幕方向自动旋转(由系统决定支持的方向,比如在经典的手机中仅支持 3 个方向,不支持反向竖屏),且受控制中心旋转开关的控制*   USER_ROTATION_LANDSCAPE_INVERTED - 临时旋转到反向横屏,之后跟随屏幕方向自动旋转(由系统决定支持的方向,比如在经典的手机中仅支持 3 个方向,不支持反向竖屏),且受控制中心旋转开关的控制*   LOCKED - 方向锁定*   FOLLOW_DESKTOP - 跟随桌面的旋转模式*/this.windowClass.setPreferredOrientation(window.Orientation[this.valueList[selectedIndex]]);}})}.width('100%').height('100%')}
}/** 通过配置控制窗口方向需要在 src/main/module.json5 中做类似如下的配置* {*   "module": {*     "abilities": [*       {*         "orientation": "portrait"*       }*     ]*   }* }* 其中 orientation 的可用值和说明如下*  unspecified - 未定义,由系统决定*  landscape - 横屏*  portrait - 竖屏*  landscape_inverted - 反向横屏*  portrait_inverted - 反向竖屏*  auto_rotation - 跟随屏幕方向自动旋转(支持 4 个方向),且不受控制中心旋转开关的控制*  auto_rotation_landscape - 跟随屏幕方向自动旋转(仅支持横屏和反向横屏),且不受控制中心旋转开关的控制*  auto_rotation_portrait - 跟随屏幕方向自动旋转(仅支持竖屏和反向竖屏),且不受控制中心旋转开关的控制*  auto_rotation_restricted - 跟随屏幕方向自动旋转(支持 4 个方向),且受控制中心旋转开关的控制*  auto_rotation_landscape_restricted - 跟随屏幕方向自动旋转(仅支持横屏和反向横屏),且受控制中心旋转开关的控制*  auto_rotation_portrait_restricted - 跟随屏幕方向自动旋转(仅支持竖屏和反向竖屏),且受控制中心旋转开关的控制*  auto_rotation_unspecified:跟随屏幕方向自动旋转(由系统决定支持的方向,比如在经典的手机中仅支持 3 个方向,不支持反向竖屏),且受控制中心旋转开关的控制*  locked - 方向锁定*  follow_recent - 跟随最近窗口的旋转模式*  follow_desktop - 跟随桌面的旋转模式*/
@Component
struct MySample2 {@State message: string = ""aboutToAppear() {let callback = () => {let newDisplay: display.Display = display.getDefaultDisplaySync();this.message += `orientation:${newDisplay.orientation}, width:${newDisplay.width}, height:${newDisplay.height}\n`}display.on("change", callback);}aboutToDisappear(): void {display.off("change")}build() {Column({space:10}) {Text(this.message)}.width('100%').height('100%')}
}/** 控制悬浮窗方向需要在 src/main/module.json5 中做类似如下的配置* {*   "module": {*     "abilities": [*       {*         "preferMultiWindowOrientation": "landscape_auto"*       }*     ]*   }* }* 其中 preferMultiWindowOrientation 的可用值和说明如下*  default - 默认*  portrait - 竖屏悬浮窗*  landscape - 横屏悬浮窗*  landscape_auto - 由程序解决是竖屏悬浮窗还是横屏悬浮窗*/
@Component
struct MySample3 {@State message: string = ""context = getContext(this) as common.UIAbilityContext;windowStage = this.context.windowStage;windowClass = this.windowStage.getMainWindowSync();aboutToAppear() {let callback = async () => {let newDisplay: display.Display = display.getDefaultDisplaySync();this.message += `orientation:${newDisplay.orientation}, width:${newDisplay.width}, height:${newDisplay.height}\n`}display.on("change", callback);}aboutToDisappear(): void {display.off("change")}build() {Column({space:10}) {Button("横屏悬浮框").onClick(() => {// 横屏悬浮框(需要先在 module.json5 中配置 "preferMultiWindowOrientation": "landscape_auto")this.windowClass.enableLandscapeMultiWindow()})Button("竖屏悬浮框").onClick(() => {// 竖屏悬浮框(需要先在 module.json5 中配置 "preferMultiWindowOrientation": "landscape_auto")this.windowClass.disableLandscapeMultiWindow()})Text(this.message)}.width('100%').height('100%')}
}

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/895104.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day20 yum的详细的讲述

day20 yum的精讲 yum是centos 7中很重要的工具需要我们去了解和学习 1.学习的任务和背景 一般开发团队需要数据库的环境来测试程序 现在需要运维人员来协助在测试机器上Centos7上安装好 MySQL-5.6.43版本来作为前期迁移的准备的工作 同时== 配备好本地的yum源==方便后续软件包的…

Active Directory审核的常见误区(3)

一、忽略过时、未激活和孤立的用户帐户 存在未使用的用户帐户在AD域中是一个重大的安全隐患。离职员工和黑客可能会因此漏洞而去窃取企业的重要资源。这时候,制定处理离职员工的策略就显得至关重要,这包括禁用他的AD用户帐户、将他从电子邮件组中删除、撤销他对业务应用程序的…

java.net.UnknownHostException: upload-as0.qiniup.com: Name or service not known on问题排查

参考地址:https://blog.csdn.net/weixin_43700340/article/details/88393833 ping upload-as0.qiniup.com还有百度不通,但是局域网可以ping通ping网关可以ping通,ping公共地址也可以ping通如果直接ping百度的ip是可以通的通过上面的博客知道应该是DSN出了问题 也试过了这个命…

Java使用Amazon S3客户端实现前后端联动文件分片上传

在使用对象存储的时候,遇到超大文件上传的应用场景,可以通过前后端联动的方式,实现超大文件从前端直接向对象存储服务进行分片上传,具体实现过程如下: Maven依赖: <dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</art…

IOMMU和IOVA

IOMMU和IOVA 默认情况下,任何硬件都可以访问整个系统,因此它可以在任何地方执行DMA 事务。这有许多安全隐患。例如,流氓和/或不可信进程(包括在VM (虚拟机)内运行的进程)可能使用硬件设备来读写内核空间,和几乎其他任何存储位置。为了解决这个问题,现代系统配备了输入输出…

linux无法连接宿主机网络问题

很奇怪,之前我是可以连接宿主机互联网的,突然有一天不行了, 没找到具体的原因, 网上找了一下怎么解决,网络就又好了, 先记录一下,有时间在研究。 1、在虚拟机中创建的“电脑”上,右键选则setting(设置)。 2、选择NAT模式,然后点击Edit--》virtual network editor,点…

Node.js 路由

我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码。 因此,我们需要查看 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)? 我们需要的所有数据都会…

SageMath 9.3软件下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【051】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程(建议关闭杀毒软件)双击解压安装包安装,弹窗安装对话框点击下一步选择I accept,点击下一步默认,点击下一步默认文件夹,点击下一步安装路径选择D盘,点…

GoLand 2024软件下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【048】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程(建议关闭杀毒软件)下载并解压压缩包,双击exe文件安装,弹窗安装对话框点击下一步创建桌面快捷方式,点击下一步默认,点击安装等待安装过程运行软件,点…

VisualStudio快速更改方法签名

右键——快速操作和重构 更改方法签名 更改签名中,即可进行添加或删除 *****有道无术,术尚可求;有术无道,止于术。*****

eclipse xml Indent using spaces not work /eclipse xml 使用空格缩进功能未生效问题解决

eclipse xml Indent using spaces not work eclipse xml 使用空格缩进功能未生效问题解决 设置xml格式化配置Line width: 设置每行宽度Line width设定为80到100个字符。 Split multiple attributes each on a new line: 标签的每个属性都单独一行显示 Preserve whitespace in t…

【多线程】AQS详解

AQS是什么 AbstractQueuedSynchronizer是一个抽象的队列同步器,AQS利用模板方法模式解决了开发者在实现同步器时的复杂问题,提供了一个通用的加锁解锁框架。 AQS执行原理 AQS为实现的同步器提供了通用的执行框架,定义了对资源state的获取和释放流程。AQS核心思想是在CLH锁的…