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