Dimensions API中"窗口"和"屏幕"之间的区别是什么

raa*_*rts 28 react-native

在我的iOS模拟器上,它们都返回相同的值.

我理解普通浏览器的区别,但React Native有什么区别?是否存在返回不同值的情况?

Mic*_*eng 65

有关Dimensions的文档非常差(未解决的问题),因此您必须深入了解代码以了解正在发生的事情.如果你看一下Dimensions的来源,你会在第47行看到这个评论:

// Screen and window dimensions are different on android
Run Code Online (Sandbox Code Playgroud)

如果您使用blame追溯历史记录,您会在指向此旧问题的相关代码部分找到此提交,该问题本身指向有关Dimensions报告不同屏幕高度的此问题.

我对Android本身并不了解,但从我可以收集到的内容来看,Android似乎可以报告两个不同的数字:

  1. 宽度/高度,带软菜单栏
  2. 没有软菜单栏的宽度/高度(所以实际的整个屏幕)

我的Android设备上的快速测试打印出这些值,我能够确认window高度screen的高度.所以很有可能,这意味着:

  • window:报告宽度/高度而不使用软菜单栏
  • screen:报告整个屏幕的宽度/高度

我没有跟回这个产品在Android上的方向变化的痛苦,所以我不知道旋转屏幕会如何影响这一点.

  • 是`.measure()`调用相对于`window`或`screen`? (5认同)
  • 感谢您的回答,并向我展示(以一种微妙的方式),我本可以自己找到的;-) (4认同)
  • Android 支持分屏,即您的窗口仅覆盖屏幕的一部分。在某些发行版和 chromeOS 上也有自由格式的窗口,其中窗口尺寸小于屏幕并且可以调整大小。您可以在清单中指定您的应用程序不支持这些功能,然后操作系统将不允许它。然后在普通的全屏手机应用程序上有系统栏。它们是包含在窗口中还是缩小窗口以排除它们可以由应用程序本身进行配置。 (2认同)

use*_*ca8 7

在 Android 上window反映screen了可用于此应用程序的总数的部分。有至少3个的情况下screen,并window可以是不同的:

  • 如果 Android 设备打开了设备导航栏,则window高度将比screen高度低导航器的高度。这在 RY Zheng 的这个答案中得到了说明,该答案在被删除的这个问题的答案中链接到了。

  • 如果应用程序在Android 的分屏/多窗口模式下显示,两个应用程序的窗口并排显示,则window宽度或高度将低于screen基于该屏幕的宽度或高度的多少。ThisIsMissEm在本机文档的PR 中“记录”了这一点,该文档已关闭,因为 Facebook 没有人对其进行审核。

  • 如果Android设备有“屏幕缩放”“显示尺寸”中的辅助功能设置的设置改变而应用程序是开放scalewidthheight属性window将更新,以反映变焦但对性能screen不会。如果应用程序重新启动,该window scale属性将与屏幕的属性匹配。

    如果具有固定尺寸的元素无法在不重新启动应用程序的情况下更改屏幕缩放比例时缩放,则将这些尺寸乘以Dimensions.get('window').scale / Dimensions.get('screen').scale可能会有所帮助。

宽度和高度window将等于或小于screen; 有一个例外:如果应用程序打开时“显示大小”或“屏幕缩放”设置设置为高,那么在应用程序仍然打开的情况下设置为低。在这种情况下,高度和宽度将更大,并且scale将以相同的比率降低。