如何获取当前设备的宽度?

我现在在做一次开发多端部署的相关内容,但是例如gridrow里面的breakpoint断点只能在这个组件里使用,无法作为条件语句进行判断。有没有什么参数,能直接获取当前设备的宽度?这样就能根据这个宽度判断是大设备还是小设备了。

UI框架
2024-07-01 12:50:08
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
droidzxy

在UIAbility中获取并存储为全局变量,然后在页面中获取全局变量。


1.在UIAbility的onWindowStageCreate生命周期回调中,通过窗口对象获取启动时的应用窗口宽度并注册回调函数监听窗口尺寸变化。将窗口尺寸的长度单位由px换算为vp后,即可基于前文中介绍的规则得到当前断点值,此时可以使用状态变量记录当前的断点值方便后续使用。

// MainAbility.ts

import window from '@ohos.window'

import display from '@ohos.display'

import UIAbility from '@ohos.app.ability.UIAbility'


export default class MainAbility extends UIAbility {

 private windowObj?: window.Window

 private curBp: string = ''

 //...

 // 根据当前窗口尺寸更新断点

 private updateBreakpoint(windowWidth: number) :void{

   // 将长度的单位由px换算为vp

   let windowWidthVp = windowWidth / display.getDefaultDisplaySync().densityPixels

   let newBp: string = ''

   if (windowWidthVp < 320) {

     newBp = 'xs'

   } else if (windowWidthVp < 600) {

     newBp = 'sm'

   } else if (windowWidthVp < 840) {

     newBp = 'md'

   } else {

     newBp = 'lg'

   }

   if (this.curBp !== newBp) {

     this.curBp = newBp

     // 使用状态变量记录当前断点值

     AppStorage.setOrCreate('currentBreakpoint', this.curBp)

   }

 }


 onWindowStageCreate(windowStage: window.WindowStage) :void{

   windowStage.getMainWindow().then((windowObj) => {

     this.windowObj = windowObj

     // 获取应用启动时的窗口尺寸

     this.updateBreakpoint(windowObj.getWindowProperties().windowRect.width)

     // 注册回调函数,监听窗口尺寸变化

     windowObj.on('windowSizeChange', (windowSize)=>{

       this.updateBreakpoint(windowSize.width)

     })

   });

  // ...

 }

   

 //...

}


2.​在页面中,获取及使用当前的断点。

​@Entry

@Component

struct Index {

 @StorageProp('currentBreakpoint') curBp: string = 'sm'


 build() {

   Flex({justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center}) {

     Text(this.curBp).fontSize(50).fontWeight(FontWeight.Medium)

   }

   .width('100%')

   .height('100%')

 }

}

分享
微博
QQ
微信
回复
2024-07-01 17:00:14
相关问题
如何获取当前组件宽度
204浏览 • 1回复 待解决
如何获取当前窗口宽度
398浏览 • 1回复 待解决
如何获取当前设备设备名称
2354浏览 • 1回复 待解决
获取设备屏幕宽度和高度
493浏览 • 1回复 待解决
如何获取当前设备品牌名称?
332浏览 • 1回复 待解决
如何获取当前设备所在网络ip
468浏览 • 1回复 待解决
获取当前设备屏幕方向
378浏览 • 1回复 待解决
获取当前设备类型方法。
336浏览 • 1回复 待解决
获取当前设备屏幕密度。
300浏览 • 1回复 待解决
鸿蒙os开放如何获取当前设备ip地址?
5027浏览 • 1回复 待解决
请问如何获取窗口宽度
1814浏览 • 1回复 待解决
HarmonyOS 如何获取组件宽度
337浏览 • 1回复 待解决
如何获取主窗口window宽度
1908浏览 • 1回复 待解决
求大佬告知如何获取窗口宽度
1658浏览 • 1回复 待解决
如何获取文本显示宽度和高度?
277浏览 • 1回复 待解决
如何获取单位为vp屏幕宽度
168浏览 • 1回复 待解决
如何获取当前HAPBundleName?
370浏览 • 1回复 待解决
如何获取文本框里文字宽度
2408浏览 • 1回复 待解决
如何获取Text组件中文字宽度
2045浏览 • 1回复 待解决
如何获取当前HAPBundleName
2397浏览 • 1回复 待解决
获取文本Text组件宽度
379浏览 • 1回复 待解决