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