1e41f4b71Sopenharmony_ci# @ohos.mediaquery (媒体查询) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci提供根据不同媒体类型定义不同的样式。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci> **说明:** 6e41f4b71Sopenharmony_ci> 7e41f4b71Sopenharmony_ci> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8e41f4b71Sopenharmony_ci> 9e41f4b71Sopenharmony_ci> 该模块不支持在[UIAbility](../apis-ability-kit/js-apis-app-ability-uiAbility.md)的文件声明处使用,即不能在UIAbility的生命周期中调用,需要在创建组件实例后使用。 10e41f4b71Sopenharmony_ci> 11e41f4b71Sopenharmony_ci> 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见[UIContext](js-apis-arkui-UIContext.md#uicontext)说明。 12e41f4b71Sopenharmony_ci> 13e41f4b71Sopenharmony_ci> 从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)对象。 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci## 导入模块 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci```ts 19e41f4b71Sopenharmony_ciimport { mediaquery } from '@kit.ArkUI'; 20e41f4b71Sopenharmony_ci``` 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci## mediaquery.matchMediaSync 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_cimatchMediaSync(condition: string): MediaQueryListener 26e41f4b71Sopenharmony_ci 27e41f4b71Sopenharmony_ci设置媒体查询的查询条件,并返回对应的监听句柄。 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci**参数:** 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 38e41f4b71Sopenharmony_ci| --------- | ------ | ---- | ------------------------------------------------------------ | 39e41f4b71Sopenharmony_ci| condition | string | 是 | 媒体事件的匹配条件,具体可参考[媒体查询语法规则](../../ui/arkts-layout-development-media-query.md#语法规则)。 | 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci**返回值:** 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci| 类型 | 说明 | 44e41f4b71Sopenharmony_ci| ------------------ | -------------------------------------------- | 45e41f4b71Sopenharmony_ci| [MediaQueryListener](#mediaquerylistener) | 媒体事件监听句柄,用于注册和去注册监听回调。 | 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci**示例:** 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci```ts 50e41f4b71Sopenharmony_ciimport { mediaquery } from '@kit.ArkUI'; 51e41f4b71Sopenharmony_ci 52e41f4b71Sopenharmony_cilet listener:mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件 53e41f4b71Sopenharmony_ci``` 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci 56e41f4b71Sopenharmony_ci## MediaQueryListener 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci媒体查询的句柄,并包含了申请句柄时的首次查询结果。媒体查询根据设置的条件语句,比如'(width <= 600vp)',比较系统信息,若首次查询时相关信息未初始化,matches返回false。 59e41f4b71Sopenharmony_ci 60e41f4b71Sopenharmony_ci继承自[MediaQueryResult](#mediaqueryresult)。 61e41f4b71Sopenharmony_ci 62e41f4b71Sopenharmony_ci**卡片能力:** 从API version 12开始,该类型支持在ArkTS卡片中使用。 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci 69e41f4b71Sopenharmony_ci### on('change') 70e41f4b71Sopenharmony_ci 71e41f4b71Sopenharmony_cion(type: 'change', callback: Callback<MediaQueryResult>): void 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_ci通过句柄向对应的查询条件注册回调,当媒体属性发生变更时会触发该回调。 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci> **说明:** 76e41f4b71Sopenharmony_ci> 77e41f4b71Sopenharmony_ci> 注册的回调中不允许进一步调用on或off。 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci**参数:** 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 88e41f4b71Sopenharmony_ci| -------- | ----------------------------------------------------- | ---- | ------------------------ | 89e41f4b71Sopenharmony_ci| type | string | 是 | 必须填写字符串'change'。 | 90e41f4b71Sopenharmony_ci| callback | Callback<[MediaQueryResult](#mediaqueryresult)> | 是 | 向媒体查询注册的回调 | 91e41f4b71Sopenharmony_ci 92e41f4b71Sopenharmony_ci**示例:** 93e41f4b71Sopenharmony_ci 94e41f4b71Sopenharmony_ci 详见[off示例](#offchange)。 95e41f4b71Sopenharmony_ci 96e41f4b71Sopenharmony_ci 97e41f4b71Sopenharmony_ci### off('change') 98e41f4b71Sopenharmony_ci 99e41f4b71Sopenharmony_cioff(type: 'change', callback?: Callback<MediaQueryResult>): void 100e41f4b71Sopenharmony_ci 101e41f4b71Sopenharmony_ci通过句柄向对应的查询条件取消注册回调,当媒体属性发生变更时不再触发指定的回调。 102e41f4b71Sopenharmony_ci 103e41f4b71Sopenharmony_ci**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 104e41f4b71Sopenharmony_ci 105e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 108e41f4b71Sopenharmony_ci 109e41f4b71Sopenharmony_ci**参数:** 110e41f4b71Sopenharmony_ci 111e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 112e41f4b71Sopenharmony_ci| -------- | -------------------------------- | ---- | ---------------------------------------------------------- | 113e41f4b71Sopenharmony_ci| type | string | 是 | 必须填写字符串'change'。 | 114e41f4b71Sopenharmony_ci| callback | Callback<[MediaQueryResult](#mediaqueryresult)> | 否 | 需要去注册的回调,如果参数缺省则去注册该句柄下所有的回调。 | 115e41f4b71Sopenharmony_ci 116e41f4b71Sopenharmony_ci**示例:** 117e41f4b71Sopenharmony_ci 118e41f4b71Sopenharmony_ci ```ts 119e41f4b71Sopenharmony_ciimport { mediaquery } from '@kit.ArkUI'; 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_cilet listener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件 122e41f4b71Sopenharmony_cifunction onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) { 123e41f4b71Sopenharmony_ci if (mediaQueryResult.matches) { 124e41f4b71Sopenharmony_ci // do something here 125e41f4b71Sopenharmony_ci } else { 126e41f4b71Sopenharmony_ci // do something here 127e41f4b71Sopenharmony_ci } 128e41f4b71Sopenharmony_ci} 129e41f4b71Sopenharmony_cilistener.on('change', onPortrait) // 注册回调 130e41f4b71Sopenharmony_cilistener.off('change', onPortrait) // 去取消注册回调 131e41f4b71Sopenharmony_ci ``` 132e41f4b71Sopenharmony_ci 133e41f4b71Sopenharmony_ci## MediaQueryResult 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci用于执行媒体查询操作。 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_ci**卡片能力:** 从API version 12开始,该类型支持在ArkTS卡片中使用。 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_ci### 属性 145e41f4b71Sopenharmony_ci 146e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 147e41f4b71Sopenharmony_ci| ------- | ------- | ---- | ---- | -------------------- | 148e41f4b71Sopenharmony_ci| matches | boolean | 是 | 否 | 是否符合匹配条件。 | 149e41f4b71Sopenharmony_ci| media | string | 是 | 否 | 媒体事件的匹配条件。 | 150e41f4b71Sopenharmony_ci 151e41f4b71Sopenharmony_ci 152e41f4b71Sopenharmony_ci### 示例 153e41f4b71Sopenharmony_ci 154e41f4b71Sopenharmony_ci> **说明:** 155e41f4b71Sopenharmony_ci> 156e41f4b71Sopenharmony_ci> 推荐通过使用[UIContext](js-apis-arkui-UIContext.md#uicontext)中的[getMediaQuery](js-apis-arkui-UIContext.md#getmediaquery)方法获取当前UI上下文关联的[MediaQuery](js-apis-arkui-UIContext.md#mediaquery)对象。 157e41f4b71Sopenharmony_ci 158e41f4b71Sopenharmony_ci```ts 159e41f4b71Sopenharmony_ciimport { mediaquery } from '@kit.ArkUI'; 160e41f4b71Sopenharmony_ci 161e41f4b71Sopenharmony_ci@Entry 162e41f4b71Sopenharmony_ci@Component 163e41f4b71Sopenharmony_cistruct MediaQueryExample { 164e41f4b71Sopenharmony_ci @State color: string = '#DB7093' 165e41f4b71Sopenharmony_ci @State text: string = 'Portrait' 166e41f4b71Sopenharmony_ci listener = mediaquery.matchMediaSync('(orientation: landscape)') // 建议使用 this.getUIContext().getMediaQuery().matchMediaSync()接口 167e41f4b71Sopenharmony_ci 168e41f4b71Sopenharmony_ci onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) { 169e41f4b71Sopenharmony_ci if (mediaQueryResult.matches) { 170e41f4b71Sopenharmony_ci this.color = '#FFD700' 171e41f4b71Sopenharmony_ci this.text = 'Landscape' 172e41f4b71Sopenharmony_ci } else { 173e41f4b71Sopenharmony_ci this.color = '#DB7093' 174e41f4b71Sopenharmony_ci this.text = 'Portrait' 175e41f4b71Sopenharmony_ci } 176e41f4b71Sopenharmony_ci } 177e41f4b71Sopenharmony_ci 178e41f4b71Sopenharmony_ci aboutToAppear() { 179e41f4b71Sopenharmony_ci let portraitFunc = (mediaQueryResult: mediaquery.MediaQueryResult): void => this.onPortrait(mediaQueryResult) 180e41f4b71Sopenharmony_ci // 绑定回调函数 181e41f4b71Sopenharmony_ci this.listener.on('change', portraitFunc); 182e41f4b71Sopenharmony_ci } 183e41f4b71Sopenharmony_ci 184e41f4b71Sopenharmony_ci aboutToDisappear() { 185e41f4b71Sopenharmony_ci // 解绑listener中注册的回调函数 186e41f4b71Sopenharmony_ci this.listener.off('change'); 187e41f4b71Sopenharmony_ci } 188e41f4b71Sopenharmony_ci 189e41f4b71Sopenharmony_ci build() { 190e41f4b71Sopenharmony_ci Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 191e41f4b71Sopenharmony_ci Text(this.text).fontSize(24).fontColor(this.color) 192e41f4b71Sopenharmony_ci } 193e41f4b71Sopenharmony_ci .width('100%').height('100%') 194e41f4b71Sopenharmony_ci } 195e41f4b71Sopenharmony_ci} 196e41f4b71Sopenharmony_ci```