• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.mediaquery (媒体查询)
2
3提供根据不同媒体类型定义不同的样式。
4
5> **说明:**
6>
7> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> 该模块不支持在[UIAbility](./js-apis-app-ability-uiAbility.md)的文件声明处使用,即不能在UIAbility的生命周期中调用,需要在创建组件实例后使用。
10
11
12## 导入模块
13
14```js
15import mediaquery from '@ohos.mediaquery'
16```
17
18
19## mediaquery.matchMediaSync
20
21matchMediaSync(condition: string): MediaQueryListener
22
23设置媒体查询的查询条件,并返回对应的监听句柄。
24
25**系统能力:** SystemCapability.ArkUI.ArkUI.Full
26
27**参数:**
28
29| 参数名       | 类型     | 必填   | 说明                                       |
30| --------- | ------ | ---- | ---------------------------------------- |
31| condition | string | 是    | 媒体事件的匹配条件,具体可参考[媒体查询语法规则](../../ui/arkts-layout-development-media-query.md#语法规则)。 |
32
33**返回值:**
34
35| 类型                 | 说明                     |
36| ------------------ | ---------------------- |
37| MediaQueryListener | 媒体事件监听句柄,用于注册和去注册监听回调。 |
38
39**示例:**
40
41```js
42let listener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件
43```
44
45
46## MediaQueryListener
47
48媒体查询的句柄,并包含了申请句柄时的首次查询结果。
49
50**系统能力:** SystemCapability.ArkUI.ArkUI.Full
51
52### 属性
53
54| 名称    | 类型    | 可读 | 可写 | 说明                 |
55| ------- | ------- | ---- | ---- | -------------------- |
56| matches | boolean | 是   | 否   | 是否符合匹配条件。   |
57| media   | string  | 是   | 否   | 媒体事件的匹配条件。 |
58
59
60### on
61
62on(type: 'change', callback: Callback<MediaQueryResult>): void
63
64通过句柄向对应的查询条件注册回调,当媒体属性发生变更时会触发该回调。
65
66**系统能力:** SystemCapability.ArkUI.ArkUI.Full
67
68**参数:**
69
70| 参数名      | 类型                               | 必填   | 说明               |
71| -------- | -------------------------------- | ---- | ---------------- |
72| type     | string                           | 是    | 必须填写字符串'change'。 |
73| callback | Callback<MediaQueryResult> | 是    | 向媒体查询注册的回调       |
74
75**示例:**
76
77  详见[off示例](#off)。
78
79
80### off
81
82off(type: 'change', callback?: Callback<MediaQueryResult>): void
83
84通过句柄向对应的查询条件去注册回调,当媒体属性发生变更时不在触发指定的回调。
85
86**系统能力:** SystemCapability.ArkUI.ArkUI.Full
87
88**参数:**
89
90| 参数名   | 类型                             | 必填 | 说明                                                       |
91| -------- | -------------------------------- | ---- | ---------------------------------------------------------- |
92| type     | string                           | 是   | 必须填写字符串'change'。                                   |
93| callback | Callback<MediaQueryResult> | 否   | 需要去注册的回调,如果参数缺省则去注册该句柄下所有的回调。 |
94
95**示例:**
96
97  ```js
98    import mediaquery from '@ohos.mediaquery'
99
100    let listener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件
101    function onPortrait(mediaQueryResult) {
102        if (mediaQueryResult.matches) {
103            // do something here
104        } else {
105            // do something here
106        }
107    }
108    listener.on('change', onPortrait) // 注册回调
109    listener.off('change', onPortrait) // 去注册回调
110  ```
111
112## MediaQueryResult
113
114用于执行媒体查询操作。
115
116**系统能力:** SystemCapability.ArkUI.ArkUI.Full
117
118
119### 属性
120
121| 名称    | 类型    | 可读 | 可写 | 说明                 |
122| ------- | ------- | ---- | ---- | -------------------- |
123| matches | boolean | 是   | 否   | 是否符合匹配条件。   |
124| media   | string  | 是   | 否   | 媒体事件的匹配条件。 |
125
126
127### 示例
128
129```ts
130import mediaquery from '@ohos.mediaquery'
131
132
133@Entry
134@Component
135struct MediaQueryExample {
136  @State color: string = '#DB7093'
137  @State text: string = 'Portrait'
138  listener = mediaquery.matchMediaSync('(orientation: landscape)')
139
140  onPortrait(mediaQueryResult) {
141    if (mediaQueryResult.matches) {
142      this.color = '#FFD700'
143      this.text = 'Landscape'
144    } else {
145      this.color = '#DB7093'
146      this.text = 'Portrait'
147    }
148  }
149
150  aboutToAppear() {
151    let portraitFunc = this.onPortrait.bind(this) // bind current js instance
152    this.listener.on('change', portraitFunc)
153  }
154
155  build() {
156    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
157      Text(this.text).fontSize(24).fontColor(this.color)
158    }
159    .width('100%').height('100%')
160  }
161}
162```