当前位置:网站首页>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。 |
参考文档
边栏推荐
- Windows 事件查看器记录到 MYSQL
- window.open不显示favicon.icon
- C专家编程 第1章 C:穿越时空的迷雾 1.11 轻松一下---由编译器定义的Pragmas效果
- C语言01、数据类型、变量常量、字符串、转义字符、注释
- protobuf 中数据编码规则
- 中小微企业如何简单便捷、低成本实现数字化?360视觉云有妙招
- 罗克韦尔AB PLC RSLogix5000中创建新项目、任务、程序和例程的具体方法和步骤
- 将 Windows 事件日志错误加载到 SQL 表中
- ReentrantReadWriteLock详解
- C专家编程 第3章 分析C语言的声明 3.5 typedef可以成为你的朋友
猜你喜欢

2021年数据泄露成本报告解读

C专家编程 第3章 分析C语言的声明 3.8 理解所有分析过程的代码段

Introduction to spark learning - 1

Small Tools (4) integrated Seata1.5.2 distributed transactions
![STM32 GPIO LED and buzzer implementation [Day 4]](/img/13/dbfed5a207e97ba0b78c1f63712e16.png)
STM32 GPIO LED and buzzer implementation [Day 4]
![[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

#夏日挑战赛# HarmonyOS 实现一个绘画板
![[Deep Learning] Today's bug (August 2)](/img/c5/c4c6d97276bd9997c49ed886aa24cf.png)
[Deep Learning] Today's bug (August 2)

Cookie和Session的关系

How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
随机推荐
C专家编程 第2章 这不是Bug,而是语言特性 2.4 少做之过
How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
leetcode:187. 重复的DNA序列
如何选择合适的导电滑环型号
uniapp隐藏导航栏和横屏显示设置
leetcode:189. 轮转数组
Yuan xiaolin: Volvo focus on travel security, and put it perfectly
将 Windows 事件日志错误加载到 SQL 表中
新版本 MaxCompute 的SQL 中支持的 EXTRACT 函数有什么作用?
【Unity入门计划】基本概念(8)-瓦片地图 TileMap 01
我在滴滴做开源
机器人开发--Universal Scene Description(USD)
C语言01、数据类型、变量常量、字符串、转义字符、注释
How to start an NFT collection
Some optional strategies and usage scenarios for PWA application Service Worker caching
spark入门学习-1
MPLS的wpn实验
参与便有奖,《新程序员》杂志福利来袭!
leetcode-268.丢失的数字