【问题标题】:Flutter MediaQuery.of(context).size.width values are different than real screen resolutionFlutter MediaQuery.of(context).size.width 值与实际屏幕分辨率不同
【发布时间】:2020-04-22 17:33:55
【问题描述】:

在我的 Flutter 应用程序中,我试图获取真实的屏幕宽度(在每个设备上自然会有所不同)。

我正在使用MediaQuery.of(context).size.width,但我注意到返回的值与实际屏幕分辨率不匹配。

例如,

  • 在模拟器 iPhone 11 Pro Max(分辨率为 2688 x 1242)上,我得到 MediaQuery.of(context).size.width= 414

  • 在模拟器 Nexus XL(分辨率为 1440 x 2560)上,我得到 MediaQuery.of(context).size.width = 411.42857142857144

  • 在真实设备 iPhone 7(分辨率为 1,334 x 750)上,我得到 MediaQuery.of(context).size.width = 375

有谁知道为什么 MediaQuery 返回的值与实际屏幕分辨率不同(以像素为单位)?

谢谢

【问题讨论】:

  • MediaQueryData.devicePixelRatio 在每种情况下是什么?
  • 顺便说一句,你为什么想知道物理屏幕宽度?
  • 是的,刚刚意识到它们实际上是逻辑像素,我真的不需要物理像素!谢谢!

标签: flutter size screen


【解决方案1】:

根据the size property's documentation

以逻辑像素为单位的媒体大小(例如屏幕大小)。

逻辑像素在不同设备上的视觉尺寸大致相同。 物理像素是实际硬件像素的大小 设备。描述了每个逻辑像素的物理像素数 由 devicePixelRatio 决定。

所以你可以通过MediaQuery.of(context).size.width * MediaQuery.of(context).devicePixelRatio来获取物理像素的宽度。

【讨论】:

  • 正好媒体查询和布局构建器约束都以逻辑像素返回结果
  • 确实谢谢,这不是我遗漏的部分,它们是逻辑像素而不是物理像素。我确实尝试过,我确实用 MediaQuery.of(context).size.width * MediaQuery.of(context).devicePixelRatio 得到了物理的。非常感谢!
猜你喜欢
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2016-02-14
  • 2016-06-28
  • 2017-03-24
  • 2014-08-24
  • 1970-01-01
相关资源
最近更新 更多