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

news2024/10/1 14:18:26

响应式布局之媒体查询

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

  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到600
  private listener:mediaquery.MediaQueryListener=this.getUIContext().getMediaQuery().matchMediaSync('(600vp>width>320vp)')
  // 屏幕尺寸小于320
  private listener1:mediaquery.MediaQueryListener=this.getUIContext().getMediaQuery().matchMediaSync('(320vp>width)')
  // 屏幕尺寸大于600
  private listener2:mediaquery.MediaQueryListener=this.getUIContext().getMediaQuery().matchMediaSync('(width>600vp)')
  @State bakcolor:Color=Color.White
  aboutToAppear(): 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.coloradmin.cn/o/2182513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Markdown笔记管理工具Haptic

什么是 Haptic &#xff1f; Haptic 是一个新的本地优先、注重隐私的开源 Markdown 笔记管理工具。它简约、轻量、高效&#xff0c;旨在提供您所需的一切&#xff0c;而不包含多余的功能。 目前官方提供了 docker 和 Mac 客户端。 Haptic 仍在积极开发中。以下是未来计划的一些…

fastAPI教程:jinja2模板

FastAPI 五、jinja2模板 jinja是python知名web框架Flask的作者开发的⼀个开源的模板系统&#xff0c;起初是仿django模板的⼀个模板引擎DjangoTPL&#xff0c;为Flask提供模板支持&#xff0c;由于其灵活&#xff0c;快速和安全等优点被⼴泛使用。 jinja2是jinja2这个模块的…

025.Oracle_DBMS_job定时任务

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

无人机之编队控制篇

无人机编队控制是指无人机集群在执行任务过程中&#xff0c;如何形成并保持一定的几何构型&#xff0c;以适应平台性能、战场环境、战术任务等要求的控制技术。以下是对无人机编队控制的详细解析&#xff1a; 一、无人机编队控制的主要任务 无人机编队控制主要解决两个问题&a…

剪刀面的做法

1 面和水称重准备好&#xff0c;鸡蛋敲孔流入面粉中两个蛋清。 2 边下水边和面&#xff0c;每次下水不要太多&#xff0c;这是和硬面要注意的&#xff0c;下水多&#xff0c;水用完了&#xff0c;面还没和起来&#xff0c;一边揉面一边搓面盆周围&#xff0c;这样可以使盆光&a…

AT89s51单片机和STC单片机烧录不同引脚问题

首先确定一下&#xff0c;两种烧录接口引脚不同 STC烧录器主要使用串口引脚 实际上stm32中也可以使用这种UART通信方式烧录程序&#xff0c;只是需要确定连接引脚进入bootloader模式 AT89S51来源Atmel公司&#xff0c;其中AVR单片机也是这个公司 ISP和SPI不是一个概念&…

在线css像素px到Em的转换器

具体请前往&#xff1a;在线Px转Em工具--将绝对像素(px)长度单位转换为相对长度em

Java之线程篇七

目录 单例模式 饿汉模式 懒汉模式-单线程版 懒汉模式-多线程版 阻塞队列 生产者消费者模型 标准库中的阻塞队列 阻塞队列实现 定时器 标准库中的定时器 实现定时器 线程池 标准库中的线程池 Executors 创建线程池的几种方式 线程池的优点 ThreadPoolExecutor的构…

Zotero7+better notes+Ethereal Style自定义笔记模版

插件版本 zotero: v7.0.5 Ethereal Style: v4.9.8 Better Notes for Zotero: v2.0.8 Green Frog: v0.19.05 笔记模版样式 模版代码 <!-- zotero: v7.0.5Ethereal Style: v4.9.8Better Notes for Zotero: v2.0.8Green Frog: v0.19.05 --><!-- 标题 -->&l…

Windows平台如何实现RTSP|RTMP流录像?

好多开发者使用场景&#xff0c;除了实现基础的低延迟RTSP、RTMP播放外&#xff0c;还需要实现RTSP、RTMP流数据的本地录像功能。本文以大牛直播SDK的Windows平台播放模块为例&#xff0c;介绍下如何实现RTSP、RTMP流录像。 功能设计 [拉流]支持拉取RTSP流录像&#xff1b; [拉…

51单片机的宠物自动投喂系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器DS1302时钟模块蓝牙步进电机按键、蜂鸣器等模块构成。适用于猫猫/狗狗宠物自动喂食器等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间和温湿度 2、温湿度传感器DHT11采集环境温湿度 3、时…

蓝桥杯【物联网】零基础到国奖之路:十四. 扩展模块之温湿度传感器

蓝桥杯【物联网】零基础到国奖之路:十四. 扩展模块之温湿度传感器 第一节 硬件解读第二节 CubeMX配置第三节 模版代码 第一节 硬件解读 STS3x-DIS是sensirion新一代温湿度传感器。精度较高&#xff0c;速度较快。SHT3x内部集成了湿度传感器和温度传感器&#xff0c;ADC采样输入…

shell脚本多行注释

1.冒号<<结束字符 :<<COMMENT echo -e&#xff1a;使用 -e 参数使 echo 支持转义字符。 \n&#xff1a;表示换行。 # Source definitions&#xff1a;添加注释。 . /etc/profile&#xff1a;加载 /etc/profile 文件。 >> 将上述内容追加到 /root/.bashrc 文…

通过PHP获取商品详情

在电子商务的浪潮中&#xff0c;数据的重要性不言而喻。商品详情信息对于电商运营者来说尤为宝贵。PHP&#xff0c;作为一种广泛应用的服务器端脚本语言&#xff0c;为我们提供了获取商品详情的便捷途径。 了解API接口文档 开放平台提供了详细的API接口文档。你需要熟悉商品详…

数据结构——栈的基本操作

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》55 ~ 59页 &#x1f308;每一个清晨&#xff0c;都是世界对你说的最温柔的早安&#xff1a;ૢ(≧▽≦)و✨ 1、栈的基本概念 栈&#x…

LabVIEW提高开发效率技巧----RT与FPGA模块

LabVIEW RT&#xff08;Real-Time&#xff09;和FPGA模块是为开发实时系统和高性能控制应用而设计的&#xff0c;能够有效满足工业控制、自动化测试、信号处理等领域的严格要求。通过这两个模块&#xff0c;开发者可以充分发挥LabVIEW的并行处理能力&#xff0c;实现高效稳定的…

L0-Linux-关卡材料提交

SSH全称Secure Shell&#xff0c;中文翻译为安全外壳&#xff0c;它是一种网络安全协议&#xff0c;通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证&#xff0c;在不安全的网络环境中提供了安全的网络服务。 SSH 是&#xff08;C/S…

基于SpringBoot+Vue的学生宿舍管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

中国雕塑——孙溟㠭浅析《瘗鹤铭》

中国雕塑——孙溟㠭浅析碑帖《瘗鹤铭》 《瘞鹤铭》 《瘗鹤铭》是原刻于镇江焦山西麓崖壁上的摩崖石刻&#xff0c;属楷书体。是一位隐士为一只死去的鹤所撰的纪念文字。时代和书写者众说纷纭&#xff0c;前人有说晋王羲之&#xff0c;有说梁代陶弘景&#xff0c;有人认为是隋朝…

linux文件编程_文件

1. 文件编程概述 之前在windows中对文件的操作是&#xff1a;打开文档—>编辑文档—>保存文档—>关闭文档 我们的Linux文件编程主要是利用代码对文件进行操作&#xff1a;文件创建、打开、编辑等自动化执行等 在Linux我们要使用编程调用api函数的方式进行文档的编辑…