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

HarmonyOS Next应用开发——响应式布局之媒体查询

响应式布局之媒体查询

媒体查询作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式,常用于多屏幕的应用适配。媒体查询常用于下面两种场景:

  1. 针对设备和应用的属性信息(比如显示区域、深浅色、分辨率),设计出相匹配的布局。
  2. 当屏幕发生动态改变时(比如分屏、横竖屏切换),同步更新应用的页面布局。
媒体查询条件

符合媒体查询条件会触发屏幕的操作,比如在手机屏幕上布局如何显示,在平板屏幕上布局如何显示。

媒体查询条件由媒体类型、逻辑操作符、媒体特征组成,其中媒体类型可省略,逻辑操作符用于连接不同媒体类型与媒体特征,其中,媒体特征要使用“()”包裹且可以有多个。

语法规则包括媒体类型(media-type)、媒体逻辑操作(media-logic-operations)(经常省略)和媒体特征(media-feature)。

[media-type] [media-logic-operations] [(media-feature)]
媒体类型(media-type)

查询条件未写媒体类型时,默认为screen。媒体类型必须写在查询条件开头。

类型说明
screen按屏幕相关参数进行媒体查询。
媒体特征(media-feature)

媒体特征包括应用显示区域的宽高、设备分辨率以及设备的宽高等属性,详细说明如下表。

比较height、width等宽高尺寸时,支持vp和px单位,无单位默认为px。

类型说明
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设备的宽度。当前仅在应用初始化时保存一次,不会随设备宽度变化实时更新,例如折叠屏的折叠展开场景。
device-type设备的类型。可选值:default、tablet。
min-device-width设备的最小宽度。
max-device-width设备的最大宽度。
round-screen屏幕类型,圆形屏幕为true,非圆形屏幕为false。
dark-mode系统当前的深浅模式。可选值:true、false。深色模式为true,浅色模式为false。

例如

  • screen and (round-screen: true) :表示当设备屏幕是圆形时条件成立。
  • (max-height: 800px) :表示当高度小于等于800px时条件成立。
  • (height <= 800px) :表示当高度小于等于800px时条件成立。
  • screen and (device-type: tv) or (resolution < 2) :表示包含多个媒体特征的多条件复杂语句查询,当设备类型为tv或设备分辨率小于2时条件成立。
  • (dark-mode: true) :表示当系统为深色模式时成立。
媒体查询监听

可以根据固定查询条件生成所对应的媒体查询监听,此监听一直在运行中,直到符合媒体查询条件,触发对应的操作。

private listener:mediaquery.MediaQueryListener=this.getUIContext().getMediaQuery().matchMediaSync('(800vp>width>320vp)')
this.listener.on('change',(result:mediaquery.MediaQueryResult)=>{ //绑定改变监听})

案例

根据屏幕大小显示不同的背景颜色。

import { mediaquery } from '@kit.ArkUI';@Entry
@Component
struct Mediapage {@State message: string = 'Hello World';// 屏幕尺寸在320到600private listener:mediaquery.MediaQueryListener=this.getUIContext().getMediaQuery().matchMediaSync('(600vp>width>320vp)')// 屏幕尺寸小于320private listener1:mediaquery.MediaQueryListener=this.getUIContext().getMediaQuery().matchMediaSync('(320vp>width)')// 屏幕尺寸大于600private listener2:mediaquery.MediaQueryListener=this.getUIContext().getMediaQuery().matchMediaSync('(width>600vp)')@State bakcolor:Color=Color.WhiteaboutToAppear(): void { //所有监听绑定事件this.listener.on('change',(result:mediaquery.MediaQueryResult)=>{if(result.matches){this.bakcolor=Color.Yellow}})this.listener1.on('change',(result:mediaquery.MediaQueryResult)=>{if(result.matches){this.bakcolor=Color.Red}})this.listener2.on('change',(result:mediaquery.MediaQueryResult)=>{if(result.matches){this.bakcolor=Color.Green}})}aboutToDisappear(): void {//解绑监听this.listener.off("change")this.listener1.off("change")this.listener2.off("change")}build() {RelativeContainer() {}.backgroundColor(this.bakcolor).height('100%').width('100%')}
}

运行效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/452877.html

相关文章:

  • 240 搜索二维矩阵 II
  • jenkins微服务
  • 【Kotlin基于selenium实现自动化测试】初识selenium以及搭建项目基本骨架(1)
  • 汽车追尾为什么是后车的责任?
  • [运维]4.bookinfo无法部署的问题
  • ACT调试pycharm报错
  • 记一次控件提升后,运行却不显示的Bug
  • 关于深度学习torch的环境配置问题
  • Linux工具的使用——yum和vim的理解和使用
  • websockets库使用(基于Python)
  • Electron 主进程与渲染进程、预加载preload.js
  • 鸿蒙harmonyos next纯flutter开发环境搭建
  • 【学习资源】人在环路的机器学习
  • 计算机毕业设计 基于Python的热门微博数据可视化分析系统的设计与实现 Python+Django+Vue 可视化大屏 附源码 讲解 文档
  • 031集——文本文件按空格分行——C#学习笔记
  • LabVIEW 成绩统计系统
  • SpringBoot技术栈:构建高效古典舞交流平台
  • Docker 容器日志记录与管理:日志输出、轮转与配置实践
  • Django学习笔记一:MVT的示例
  • 集合框架01:集合的概念、Collection体系、Collection接口
  • shadcn-vue 快速开始
  • 智慧管控平台技术解决方案
  • 酒店业CRM和酒店数据管理大数据—未来之窗行业应用跨平台架构
  • 滚雪球学Oracle[8.1讲]:高级主题与未来趋势
  • 【Matlab绘图】从Excel导入表格并进行三维绘图
  • IDEA里面的长截图插件
  • (15)衰落信道模型作用于信号是相乘还是卷积
  • (C语言贪吃蛇)14.用绝对值方式解决不合理的走位
  • [深度学习]基于YOLO高质量项目源码+模型+GUI界面汇总
  • 仕考网:公务员国考有三不限岗位吗?