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

时间:2017-07-07 20:01:39

标签: react-native

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

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

2 个答案:

答案 0 :(得分:45)

有关Dimensions的文档很差(outstanding issue),因此您必须深入了解代码以了解正在发生的事情。如果您查看Dimensions的来源,您会在第47行看到此评论:

// Screen and window dimensions are different on android

如果您使用责备追溯历史记录,您会在指向this commit的相关代码部分找到this old issue,该部分本身指向this issue有关尺寸报告不同屏幕高度的内容。

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

  1. 带软菜单栏的宽度/高度
  2. 没有软菜单栏的宽度/高度(所以实际的整个屏幕)
  3. 我的Android设备上的快速测试打印出这些值,我能够确认window的高度< screen的身高。window所以很有可能,这意味着:

    • screen:报告没有软菜单栏的宽度/高度
    • {{1}}:报告整个屏幕的宽度/高度

    我没有关注Android上的方向更改this product pain,因此我不知道旋转屏幕会如何影响这一点。

答案 1 :(得分:1)

在Android上window反映了可用于此应用的全部screen中的一部分。至少在3种情况下,screenwindow可能不同:

  • 如果Android设备打开了设备navigation bar ,则window的高度将比screen的高度低一个导航器的高度。这是illustrated in this answer by RY Zheng,与该问题的答案中的链接已被删除。

  • 如果该应用以Android's split screen/multi-window模式显示,并排显示两个应用的窗口,则window的宽度或高度将小于{{ 1}}取决于该屏幕的宽度或高度。在PR by ThisIsMissEm上已关闭的本机文档的“文档”中,因为没有人被Facebook审查过。

  • 如果打开应用后,Android设备的“辅助功能”设置中的"screen zoom""display size"设置已更改,则screen,{{1 scale的}}和width属性将更新以反映缩放,而height的属性则不会更新。如果应用重新启动,则window screen属性将与屏幕的属性匹配。

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

scale的宽度和高度将等于或小于Dimensions.get('window').scale / Dimensions.get('screen').scale;但有一个例外:如果在“显示尺寸”或“屏幕缩放”设置较高的情况下打开应用,则在应用仍打开的情况下将其设置为较低。在这种情况下,高度和宽度会变大,而window会变低,比率相同。