当前位置:网站首页>ArkUI如何适配横竖屏
ArkUI如何适配横竖屏
2022-08-03 16:17:00 【华为云】
媒体查询(Media Query)在移动设备上应用十分广泛,开发者经常需要根据设备的大致类型或者特定的特征和设备参数(例如屏幕分辨率)来修改应用的样式。为此媒体查询提供了如下功能:
针对设备和应用的属性信息,可以设计出相匹配的布局样式。
当屏幕发生动态改变时(比如分屏、横竖屏切换),应用页面布局同步更新。
如何使用
通过调用媒体查询接口,设置媒体查询条件和查询结果的回调函数,在对应的条件的回调函数里更改页面布局或者实现业务逻辑。
首先导入媒体查询模块,例如:
import mediaquery from '@ohos.mediaquery'然后通过matchMediaSync接口设置媒体查询条件,并保存返回的条件监听句柄,例如:
listener = mediaquery.matchMediaSync('(orientation: landscape)')最后通过上面保存的条件监听句柄listener去注册回调函数,在回调函数里更改页面布局或者实现业务逻辑,当匹配到媒体查询条件时会触发此回调函数,例如:
import mediaquery from '@ohos.mediaquery' let listener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件 function onPortrait(mediaQueryResult) { if (mediaQueryResult.matches) { //你的逻辑 this.islandscape = true } else { //你的逻辑 this.islandscape = false } } this.listener.on('change', this.onPortrait) // 注册回调 this.listener.off('change', this.onPortrait) // 去注册回调例子:
import mediaquery from '@ohos.mediaquery'let portraitFunc = null@[email protected] MediaQueryExample { @State islandscape: boolean = false listener = mediaquery.matchMediaSync('(orientation: landscape)') onPortrait(mediaQueryResult) { if (mediaQueryResult.matches) { this.islandscape = true } else { this.islandscape = false } } aboutToAppear() { portraitFunc = this.onPortrait.bind(this) //bind current js instance this.listener.on('change', portraitFunc) } build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Text( this.islandscape==true ? "横屏显示": "竖屏显示") .backgroundColor(Color.Blue) .textAlign(TextAlign.Center) .fontSize('50fp') .fontColor(Color.White) .width('100%') .height('100vp') } .width('100%').height('100%') }}
媒体查询条件语法规则
[media-type] [and|not|only] [(media-feature)]例如:
screen and (round-screen: true) :当设备屏幕是圆形时条件成立
(max-height: 800) :当高度小于800时条件成立
(height <= 800) :当高度小于800时条件成立
screen and (device-type: tv) or (resolution < 2) :包含多个媒体特征的多条件复杂语句查询
媒体特征(media-feature)
| 类型 | 说明 |
|---|---|
| height | 应用页面显示区域的高度。 |
| min-height | 应用页面显示区域的最小高度。 |
| max-height | 应用页面显示区域的最大高度。 |
| width | 应用页面显示区域的宽度。 |
| min-width | 应用页面显示区域的最小宽度。 |
| max-width | 应用页面显示区域的最大宽度。 |
| resolution | 设备的分辨率,支持dpi,dppx和dpcm单位。其中:- dpi表示每英寸中物理像素个数,1dpi≈0.39dpcm;- dpcm表示每厘米上的物理像素个数,1dpcm ≈ 2.54dpi;- dppx表示每个px中的物理像素数(此单位按96px=1英寸为基准,与页面中的px单位计算方式不同),1dppx = 96dpi。 |
| min-resolution | 设备的最小分辨率。 |
| max-resolution | 设备的最大分辨率。 |
| orientation | 屏幕的方向。可选值:- orientation: portrait(设备竖屏)- orientation: landscape(设备横屏) |
| device-height | 设备的高度。 |
| min-device-height | 设备的最小高度。 |
| max-device-height | 设备的最大高度。 |
| device-width | 设备的宽度。 |
| min-device-width | 设备的最小宽度。 |
| max-device-width | 设备的最大宽度。 |
| round-screen | 屏幕类型,圆形屏幕为true, 非圆形屏幕为 false。 |
| dark-mode | 系统为深色模式时为true,否则为false。 |
参考文档
边栏推荐
- [Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 02
- MarkDown常用代码片段和工具
- CopyOnWriteArrayList details
- Cookie和Session的关系
- Kubernetes 笔记 / 任务 / 管理集群 / 用 kubeadm 管理集群 / 配置一个 cgroup 驱动
- STM32的HAL和LL库区别和性能对比
- protobuf 反射使用总结
- To participate in sweepstakes, incoming new programmers magazine welfare!
- 《安富莱嵌入式周报》第276期:2022.07.25--2022.07.31
- 2021年数据泄露成本报告解读
猜你喜欢

MySQL窗口函数

Detailed ReentrantLock

QT QT 】 【 to have developed a good program for packaging into a dynamic library
![[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 02](/img/45/96af4ca21329964808a4c8f2b8272c.png)
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 02

Web3 安全风险令人生畏?应该如何应对?

Windows 事件转发到 SQL 数据库

详谈RDMA技术原理和三种实现方式

Windows 事件查看器记录到 MYSQL

MySQL相关介绍

How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
随机推荐
中小微企业如何简单便捷、低成本实现数字化?360视觉云有妙招
纯纯粹粹纯纯粹粹
STM32 GPIO LED和蜂鸣器实现【第四天】
Leetcode76. 最小覆盖子串
Kubernetes 笔记 / 任务 / 管理集群 / 用 kubeadm 管理集群 / 配置一个 cgroup 驱动
DAYU200 OpenHarmony标准系统HDMI全屏显示
《安富莱嵌入式周报》第276期:2022.07.25--2022.07.31
Leetcode76. Minimal Covering Substring
建造者模式/生成器模式
攻防世界----bug
C专家编程 第3章 分析C语言的声明 3.4 通过图标分析C语言的声明
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
袁小林:沃尔沃专注于出行的安全感,并且把它做到极致
【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer
【Unity入门计划】制作RubyAdventure01-玩家的创建&移动
将 Windows 事件日志错误加载到 SQL 表中
简易网络传输方法
MPLS的wpn实验
Cookie和Session的关系
mysql delete execution error: You can't specify target table 'doctor_info' for update in FROM clause