美文网首页鸿蒙开发入门零基础学鸿蒙编程ArkTS/ArkUI实战
18、鸿蒙/布局/媒体查询 (@ohos.mediaquery)

18、鸿蒙/布局/媒体查询 (@ohos.mediaquery)

作者: 圆梦人生 | 来源:发表于2024-07-15 09:14 被阅读0次

概述

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

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

引入与使用流程

媒体查询通过mediaquery模块接口,设置查询条件并绑定回调函数,在对应的条件的回调函数里更改页面布局或者实现业务逻辑,实现页面的响应式设计。具体步骤如下:
首先导入媒体查询模块。

import mediaquery from '@ohos.mediaquery';

通过matchMediaSync接口设置媒体查询条件,保存返回的条件监听句柄listener。例如监听横屏事件:

let listener: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(orientation: landscape)');

给条件监听句柄listener绑定回调函数onPortrait,当listener检测设备状态变化时执行回调函数。在回调函数内,根据不同设备状态更改页面布局或者实现业务逻辑。

onPortrait(mediaQueryResult: mediaquery.MediaQueryResult) {
  if (mediaQueryResult.matches as boolean) {
    // do something here
  } else {
    // do something here
  }
}

listener.on('change', onPortrait);

媒体查询条件

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

语法规则

语法规则包括媒体类型(media-type)媒体逻辑操作(media-logic-operations)媒体特征(media-feature)

[media-type] [media-logic-operations] [(media-feature)]

例如:

  • 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) : 表示当系统为深色模式时成立。


    media-type.png
媒体逻辑操作(media-logic-operations)

媒体逻辑操作符:and、or、not、only用于构成复杂媒体查询,也可以通过comma(, )将其组合起来,详细解释说明如下表。


operations.png

媒体范围操作符包括<=,>=,<,>,详细解释说明如下表。


operations.png
媒体特征(media-feature)

媒体特征包括应用显示区域的宽高、设备分辨率以及设备的宽高等属性,详细说明如下表。
目前在卡片中使用媒体查询,只支持height、width。


feature.png

场景示例

下例中使用媒体查询,实现屏幕横竖屏切换时,给页面文本应用添加不同的内容和样式。

import mediaquery from '@ohos.mediaquery';
import window from '@ohos.window';
import common from '@ohos.app.ability.common';

@Component
export struct Mediaquery {
  @State color: string = '#DB7093';
  @State text: string = 'Portrait';
  @State portraitFunc:mediaquery.MediaQueryResult|void|null = null;
  // 当设备横屏时条件成立
  listener:mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(orientation: landscape)');

  // 当满足媒体查询条件时,触发回调
  onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) {
    if (mediaQueryResult.matches as boolean) { // 若设备为横屏状态,更改相应的页面布局
      this.color = '#FFD700';
      this.text = 'Landscape';
    } else {
      this.color = '#DB7093';
      this.text = 'Portrait';
    }
  }

  aboutToAppear() {
    // 绑定当前应用实例
    // 绑定回调函数
    this.listener.on('change', (mediaQueryResult:mediaquery.MediaQueryResult) => { this.onPortrait(mediaQueryResult) });
  }

  // 改变设备横竖屏状态函数
  private changeOrientation(isLandscape: boolean) {
    // 获取UIAbility实例的上下文信息
    let context:common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    // 调用该接口手动改变设备横竖屏状态
    window.getLastWindow(context).then((lastWindow) => {
      lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT)
    });
  }


  build() {
    Column({ space: 50 }) {
      Text(this.text).fontSize(50).fontColor(this.color)
      Text('Landscape').fontSize(50).fontColor(this.color).backgroundColor(Color.Orange)
        .onClick(() => {
          this.changeOrientation(true);
        })
      Text('Portrait').fontSize(50).fontColor(this.color).backgroundColor(Color.Orange)
        .onClick(() => {
          this.changeOrientation(false);
        })
    }
    .width('100%').height('100%')
  }
}

相关文章

  • 移动端布局-媒体查询 + rem单位布局

    媒体查询 + rem单位布局 说道这个布局,,那么我们首先得了解什么是媒体查询,rem是什么? 媒体查询:媒体查询...

  • rem布局&响应式布局

    rem布局 1.rem单位 2.媒体查询 2.1 什么是媒体查询 2.2 媒体查询语法规范 2.3 媒体查询+re...

  • day05-移动web开发-bootstrap(响应式开发)

    设备的划分: 媒体查询: 使用媒体查询能针对不同屏幕区间设置不同的布局和样式怎么使用媒体查询:关于媒体查询 @me...

  • 02、CSS3-响应式布局

    响应式布局原理 第一步:Meta标签 一、响应式布局 二、viewport视口 三、媒体查询 媒体查询可用于检测很...

  • 第五章:实现移动端样式

    响应式布局调试工具 选择媒体查询单位

  • 媒体查询 响应式布局

    响应式布局 meta标签的实用 设置布局宽度等于设备宽度,布局viewport等于度量viewport 媒体查询 ...

  • 表格自适应屏幕

    表格 CSS页面响应式布局,媒体查询: @media 媒体类型 and (媒体特性){样式} *最大宽度max-w...

  • 响应式布局

    布局类别 1.固定网页布局:设置固定宽度,px为单位。常见PC端页面。 2.流式布局+伸缩布局+rem+媒体查询:...

  • 苏宁易购项目

    rem布局 认识rem rem适配1.伸缩布局 flex2.流式布局 百分比3.响应布局 媒体查询 (超小...

  • 移动端

    媒体查询 meta: viewport (视窗) :设置视窗布局 width:控制 viewport 的大小,可以...

网友评论

    本文标题:18、鸿蒙/布局/媒体查询 (@ohos.mediaquery)

    本文链接:https://www.haomeiwen.com/subject/vwpzcjtx.html