一多

一多开发

1一次开发,多个设备适配运行,不同设备看到不同布局方案 2一次开发,根据不同设备打包成不同hap 3 4// 用到技术 5媒体查询技术 6栅格系统,封装好组件,根据屏幕大小决定元素排列,底层也是媒体查询技术
一次开发,多个设备适配运行,不同设备看到不同布局方案 一次开发,根据不同设备打包成不同hap // 用到技术 媒体查询技术 栅格系统,封装好组件,根据屏幕大小决定元素排列,底层也是媒体查询技术

响应式布局

1断点 // 用户放大缩小屏幕,如超过500vp横向排列 2 3媒体查询技术 // 检测设备大小、类型,决定元素排列, xs、sm(手机)、md、lg、xl、xxl 4 5栅格布局 // 在媒体查询基础上封装
断点 // 用户放大缩小屏幕,如超过500vp横向排列 媒体查询技术 // 检测设备大小、类型,决定元素排列, xs、sm(手机)、md、lg、xl、xxl 栅格布局 // 在媒体查询基础上封装

媒体查询技术

 1import mediaquery from '@ohos.mediaquery';  2  3@Entry  4@Component  5struct Page02_Media {  6 @State message: string = 'Hello World';  7 private listener = mediaquery.matchMediaSync('(orientation: landscape)')  8 onPortrait = (mediaQueryResult: mediaquery.MediaQueryResult) => {  9 if (mediaQueryResult.matches) { 10 console.log('横屏') 11 this.message = '横屏' 12 } else { 13 console.log('竖屏') 14 this.message = '竖屏' 15 } 16 } 17 18 // 给listener绑定函数 19 aboutToAppear(): void { 20 this.listener.on('change', this.onPortrait) 21 } 22 23 build() { 24 Column() { 25 Text('媒体查询') 26 Text(this.message) 27 } 28 .height('100%') 29 .width('100%') 30 } 31}
import mediaquery from '@ohos.mediaquery'; @Entry @Component struct Page02_Media { @State message: string = 'Hello World'; private listener = mediaquery.matchMediaSync('(orientation: landscape)') onPortrait = (mediaQueryResult: mediaquery.MediaQueryResult) => { if (mediaQueryResult.matches) { console.log('横屏') this.message = '横屏' } else { console.log('竖屏') this.message = '竖屏' } } // 给listener绑定函数 aboutToAppear(): void { this.listener.on('change', this.onPortrait) } build() { Column() { Text('媒体查询') Text(this.message) } .height('100%') .width('100%') } }

常量

## 1/**  2 * 常量文件:页面常用值  3 */  4export class BasicConstants {  5 static readonly FULL_WIDTH = '100%'  6 static readonly FULL_HEIGHT = '100%'  7 static readonly FONT_SIZE_SMALL = '14vp'  8 static readonly FONT_SIZE_NORMAL = '16vp'  9 static readonly FONT_SIZE_BIG = '20vp' 10 static readonly FONT_SIZE_LARGE = '30vp' 11}
/** * 常量文件:页面常用值 */ export class BasicConstants { static readonly FULL_WIDTH = '100%' static readonly FULL_HEIGHT = '100%' static readonly FONT_SIZE_SMALL = '14vp' static readonly FONT_SIZE_NORMAL = '16vp' static readonly FONT_SIZE_BIG = '20vp' static readonly FONT_SIZE_LARGE = '30vp' }

屏幕尺寸

 1import { BreakPointConstants } from '../constants/BreakPointConstants'  2import { mediaquery } from '@kit.ArkUI'  3  4export class BreakPointSystem {  5 // 当前屏幕尺寸, 保存到全局, currentBreakPoint作为key  6 private currentBreakPoint: string = BreakPointConstants.BREAKPOINT_SM  7 // 屏幕大小条件查询  8 private smListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_SM)  9 private mdListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_MD) 10 private lgListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_LG) 11 12 // 保存屏幕尺寸到应用状态 13 private updateCurrentBreakPoint(breakpoint: string) { 14 if (this.currentBreakPoint != breakpoint) { 15 this.currentBreakPoint = breakpoint 16 } 17 AppStorage.setOrCreate<string>(BreakPointConstants.CURRENT_BREAKPOINT, this.currentBreakPoint) 18 } 19 20 // 绑定不同监听器 21 private isBreakPointSM = (mediaQueryResult: mediaquery.MediaQueryResult) => { 22 if (mediaQueryResult.matches) { 23 // 保存sm单位 24 this.updateCurrentBreakPoint(BreakPointConstants.BREAKPOINT_SM) 25 } 26 } 27 private isBreakPointMD = (mediaQueryResult: mediaquery.MediaQueryResult) => { 28 if (mediaQueryResult.matches) { 29 // 保存md单位 30 this.updateCurrentBreakPoint(BreakPointConstants.BREAKPOINT_MD) 31 } 32 } 33 private isBreakPointLG = (mediaQueryResult: mediaquery.MediaQueryResult) => { 34 if (mediaQueryResult.matches) { 35 // 保存lg单位 36 this.updateCurrentBreakPoint(BreakPointConstants.BREAKPOINT_LG) 37 } 38 } 39 40 public register() { 41 this.smListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_SM) 42 this.mdListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_MD) 43 this.lgListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_LG) 44 this.smListener.on('change', this.isBreakPointSM) 45 this.mdListener.on('change', this.isBreakPointMD) 46 this.lgListener.on('change', this.isBreakPointLG) 47 } 48 49 public unregister() { 50 this.smListener.off('change', this.isBreakPointSM) 51 this.mdListener.off('change', this.isBreakPointMD) 52 this.lgListener.off('change', this.isBreakPointLG) 53 } 54}
import { BreakPointConstants } from '../constants/BreakPointConstants' import { mediaquery } from '@kit.ArkUI' export class BreakPointSystem { // 当前屏幕尺寸, 保存到全局, currentBreakPoint作为key private currentBreakPoint: string = BreakPointConstants.BREAKPOINT_SM // 屏幕大小条件查询 private smListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_SM) private mdListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_MD) private lgListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_LG) // 保存屏幕尺寸到应用状态 private updateCurrentBreakPoint(breakpoint: string) { if (this.currentBreakPoint != breakpoint) { this.currentBreakPoint = breakpoint } AppStorage.setOrCreate<string>(BreakPointConstants.CURRENT_BREAKPOINT, this.currentBreakPoint) } // 绑定不同监听器 private isBreakPointSM = (mediaQueryResult: mediaquery.MediaQueryResult) => { if (mediaQueryResult.matches) { // 保存sm单位 this.updateCurrentBreakPoint(BreakPointConstants.BREAKPOINT_SM) } } private isBreakPointMD = (mediaQueryResult: mediaquery.MediaQueryResult) => { if (mediaQueryResult.matches) { // 保存md单位 this.updateCurrentBreakPoint(BreakPointConstants.BREAKPOINT_MD) } } private isBreakPointLG = (mediaQueryResult: mediaquery.MediaQueryResult) => { if (mediaQueryResult.matches) { // 保存lg单位 this.updateCurrentBreakPoint(BreakPointConstants.BREAKPOINT_LG) } } public register() { this.smListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_SM) this.mdListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_MD) this.lgListener = mediaquery.matchMediaSync(BreakPointConstants.RANGE_LG) this.smListener.on('change', this.isBreakPointSM) this.mdListener.on('change', this.isBreakPointMD) this.lgListener.on('change', this.isBreakPointLG) } public unregister() { this.smListener.off('change', this.isBreakPointSM) this.mdListener.off('change', this.isBreakPointMD) this.lgListener.off('change', this.isBreakPointLG) } }

 1import { BasicConstants } from '../constants/BasicConstants'  2import { BreakPointSystem } from 'common'  3import { BreakPointConstants } from 'common'  4  5@Entry  6@Component  7struct Index {  8 @State message: string = 'Hello World';  9 private breakPointSystem = new BreakPointSystem() 10 @StorageProp(BreakPointConstants.CURRENT_BREAKPOINT) currentBreakPoint: string = 'sm' 11 12 aboutToAppear(): void { 13 this.breakPointSystem.register() 14 } 15 16 aboutToDisappear(): void { 17 this.breakPointSystem.unregister() 18 } 19 20 build() { 21 Column() { 22 Text(this.message) 23 Text(`当前屏幕类型:${this.currentBreakPoint}`) 24 } 25 .height(BasicConstants.FULL_HEIGHT) 26 .width(BasicConstants.FULL_WIDTH) 27 } 28}
import { BasicConstants } from '../constants/BasicConstants' import { BreakPointSystem } from 'common' import { BreakPointConstants } from 'common' @Entry @Component struct Index { @State message: string = 'Hello World'; private breakPointSystem = new BreakPointSystem() @StorageProp(BreakPointConstants.CURRENT_BREAKPOINT) currentBreakPoint: string = 'sm' aboutToAppear(): void { this.breakPointSystem.register() } aboutToDisappear(): void { this.breakPointSystem.unregister() } build() { Column() { Text(this.message) Text(`当前屏幕类型:${this.currentBreakPoint}`) } .height(BasicConstants.FULL_HEIGHT) .width(BasicConstants.FULL_WIDTH) } }

存储

1AppStorage.setOrCreate<string>(BreakPointConstants.CURRENT_BREAKPOINT, this.currentBreakPoint)
AppStorage.setOrCreate<string>(BreakPointConstants.CURRENT_BREAKPOINT, this.currentBreakPoint)

Powered By 可尔物语

浙ICP备11005866号-12