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

L
lixinnan 已提交
18
```ts
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

L
lixinnan 已提交
45 46 47
```ts
import mediaquery from '@ohos.mediaquery'
let listener:mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件
48
```
Z
zengyawen 已提交
49 50 51


## MediaQueryListener
Z
zengyawen 已提交
52 53 54

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

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

### 属性

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


### on

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

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

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

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

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

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

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


### off

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

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

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

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

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

**示例:** 
101

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

Z
zengyawen 已提交
117 118
## MediaQueryResult

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

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

Z
zengyawen 已提交
123 124 125

### 属性

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


### 示例
Z
zengyawen 已提交
133

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


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

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

  aboutToAppear() {
M
mahiru 已提交
156
    let portraitFunc = (mediaQueryResult:mediaquery.MediaQueryResult):void=>this.onPortrait(mediaQueryResult)  // bind current js instance
Z
zengyawen 已提交
157 158 159 160 161 162 163 164 165 166
    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%')
  }
}
167
```