js-apis-mediaquery.md 5.5 KB
Newer Older
Z
zengyawen 已提交
1
# @ohos.mediaquery (媒体查询)
Z
zengyawen 已提交
2

T
explain  
tianyu 已提交
3 4
提供根据不同媒体类型定义不同的样式。

H
HelloCrease 已提交
5
> **说明:**
H
HelloCrease 已提交
6
>
Z
zengyawen 已提交
7
> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Y
yamila 已提交
8
>
Y
yamila 已提交
9
> 该模块不支持在[UIAbility](./js-apis-app-ability-uiAbility.md)的文件声明处使用,即不能在UIAbility的生命周期中调用,需要在创建组件实例后使用。
H
huangdong57 已提交
10 11 12 13
>
> 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见[UIContext](./js-apis-arkui-UIContext.md#uicontext)说明。
>
> 从API version 10开始,可以通过使用[UIContext](./js-apis-arkui-UIContext.md#uicontext)中的[getMediaQuery](./js-apis-arkui-UIContext.md#getmediaquery)方法获取当前UI上下文关联的[MediaQuery](./js-apis-arkui-UIContext.md#mediaquery)对象。
Z
zengyawen 已提交
14

Z
zengyawen 已提交
15 16

## 导入模块
Z
zengyawen 已提交
17

H
HelloCrease 已提交
18
```js
Z
zengyawen 已提交
19 20 21
import mediaquery from '@ohos.mediaquery'
```

Z
zengyawen 已提交
22 23 24 25

## mediaquery.matchMediaSync

matchMediaSync(condition: string): MediaQueryListener
Z
zengyawen 已提交
26 27 28

设置媒体查询的查询条件,并返回对应的监听句柄。

L
luoying_ace_admin 已提交
29 30
**系统能力:** SystemCapability.ArkUI.ArkUI.Full

H
HelloCrease 已提交
31
**参数:** 
32

M
mahiru 已提交
33 34 35
| 参数名    | 类型   | 必填 | 说明                                                         |
| --------- | ------ | ---- | ------------------------------------------------------------ |
| condition | string | 是   | 媒体事件的匹配条件,具体可参考[媒体查询语法规则](../../ui/arkts-layout-development-media-query.md#语法规则)。 |
Z
zengyawen 已提交
36

H
HelloCrease 已提交
37
**返回值:** 
38

M
mahiru 已提交
39 40
| 类型               | 说明                                         |
| ------------------ | -------------------------------------------- |
H
HelloCrease 已提交
41
| MediaQueryListener | 媒体事件监听句柄,用于注册和去注册监听回调。 |
Z
zengyawen 已提交
42

H
HelloCrease 已提交
43
**示例:** 
44 45

```js
H
HelloCrease 已提交
46
let listener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件
47
```
Z
zengyawen 已提交
48 49 50


## MediaQueryListener
Z
zengyawen 已提交
51 52 53

媒体查询的句柄,并包含了申请句柄时的首次查询结果。

L
luoying_ace_admin 已提交
54
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
Z
zengyawen 已提交
55 56 57

### 属性

Y
yamila 已提交
58 59 60 61
| 名称    | 类型    | 可读 | 可写 | 说明                 |
| ------- | ------- | ---- | ---- | -------------------- |
| matches | boolean | 是   | 否   | 是否符合匹配条件。   |
| media   | string  | 是   | 否   | 媒体事件的匹配条件。 |
Z
zengyawen 已提交
62 63 64 65 66


### on

on(type: 'change', callback: Callback<MediaQueryResult>): void
Z
zengyawen 已提交
67 68 69

通过句柄向对应的查询条件注册回调,当媒体属性发生变更时会触发该回调。

L
luoying_ace_admin 已提交
70 71
**系统能力:** SystemCapability.ArkUI.ArkUI.Full

H
HelloCrease 已提交
72
**参数:** 
73

M
mahiru 已提交
74 75 76 77
| 参数名   | 类型                             | 必填 | 说明                     |
| -------- | -------------------------------- | ---- | ------------------------ |
| type     | string                           | 是   | 必须填写字符串'change'。 |
| callback | Callback<MediaQueryResult> | 是   | 向媒体查询注册的回调     |
Z
zengyawen 已提交
78

H
HelloCrease 已提交
79
**示例:** 
80

Z
zengyawen 已提交
81 82 83 84 85 86
  详见[off示例](#off)


### off

off(type: 'change', callback?: Callback<MediaQueryResult>): void
Z
zengyawen 已提交
87 88

通过句柄向对应的查询条件去注册回调,当媒体属性发生变更时不在触发指定的回调。
L
luoying_ace_admin 已提交
89 90 91

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

H
HelloCrease 已提交
92
**参数:** 
93

Y
yamila 已提交
94 95 96 97
| 参数名   | 类型                             | 必填 | 说明                                                       |
| -------- | -------------------------------- | ---- | ---------------------------------------------------------- |
| type     | string                           | 是   | 必须填写字符串'change'。                                   |
| callback | Callback<MediaQueryResult> | 否   | 需要去注册的回调,如果参数缺省则去注册该句柄下所有的回调。 |
H
HelloCrease 已提交
98 99

**示例:** 
100

H
HelloCrease 已提交
101
  ```js
102 103 104
    import mediaquery from '@ohos.mediaquery'
    
    let listener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件
M
mahiru 已提交
105
    function onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) {
106 107 108 109 110 111
        if (mediaQueryResult.matches) {
            // do something here
        } else {
            // do something here
        }
    }
H
HelloCrease 已提交
112 113
    listener.on('change', onPortrait) // 注册回调
    listener.off('change', onPortrait) // 去注册回调
Z
zengyawen 已提交
114
  ```
Z
zengyawen 已提交
115

Z
zengyawen 已提交
116 117
## MediaQueryResult

Y
yamila 已提交
118 119 120 121
用于执行媒体查询操作。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

Z
zengyawen 已提交
122 123 124

### 属性

Y
yamila 已提交
125 126 127 128
| 名称    | 类型    | 可读 | 可写 | 说明                 |
| ------- | ------- | ---- | ---- | -------------------- |
| matches | boolean | 是   | 否   | 是否符合匹配条件。   |
| media   | string  | 是   | 否   | 媒体事件的匹配条件。 |
Z
zengyawen 已提交
129 130 131


### 示例
Z
zengyawen 已提交
132

H
HelloCrease 已提交
133
```ts
Z
zengyawen 已提交
134 135 136 137 138 139 140 141 142 143
import mediaquery from '@ohos.mediaquery'


@Entry
@Component
struct MediaQueryExample {
  @State color: string = '#DB7093'
  @State text: string = 'Portrait'
  listener = mediaquery.matchMediaSync('(orientation: landscape)')

M
mahiru 已提交
144
  onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) {
Z
zengyawen 已提交
145 146 147 148 149 150 151 152 153 154
    if (mediaQueryResult.matches) {
      this.color = '#FFD700'
      this.text = 'Landscape'
    } else {
      this.color = '#DB7093'
      this.text = 'Portrait'
    }
  }

  aboutToAppear() {
M
mahiru 已提交
155
    let portraitFunc = (mediaQueryResult:mediaquery.MediaQueryResult):void=>this.onPortrait(mediaQueryResult)  // bind current js instance
Z
zengyawen 已提交
156 157 158 159 160 161 162 163 164 165
    this.listener.on('change', portraitFunc)
  }

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Text(this.text).fontSize(24).fontColor(this.color)
    }
    .width('100%').height('100%')
  }
}
166
```