JavafxPorts 屏幕尺寸

JavafxPorts screen size

我正在尝试创建一个可以在 PC (Windows) 和 Android 上 运行 的应用程序,但是,我在获得正确的屏幕尺寸时遇到了问题。

在 Windows 上,Screen.getBounds() 方法似乎总是 return 正确的全屏尺寸(即没有任务栏的屏幕 space 等)。在 Android 上,使用 Screen.getBounds() 将 return 屏幕尺寸比实际屏幕尺寸大得多。让我的应用程序在 android 上正常工作的唯一方法是使用 Screen.getVisualBounds()。但是,在 Windows 上,使用 Screen.getVisualBounds() 总是 return 的高度比实际的总屏幕尺寸略小,因为它删除了任务栏占用的 space。

有谁知道为什么 Screen.getBounds() return 在 Android 上的值比实际可见屏幕高得多?

谢谢。

Screen.getBounds() return是物理像素,Screen.getVisualBounds() return是逻辑像素。

虽然在桌面设备上,这些边界之间的差异仅与任务栏的存在有关,但在移动设备上,差异与像素密度或比例有关,并且可以大于 1。

这就是 Nexus 6 上 return 的那些方法:

由于 this device 的像素密度为 3.5。

回到您最初的问题,您需要在 Android 上使用 Screen.getVisualBounds()

但对于桌面版,您可以select大小自由选择:

@Override
public void start(Stage stage) {
    Rectangle2D bounds = JavaFXPlatform.isDesktop() ? 
            Screen.getPrimary().getBounds() : 
            Screen.getPrimary().getVisualBounds();
    Scene scene = new Scene(new StackPane(), bounds.getWidth(), bounds.getHeight());

    stage.setScene(scene);
    stage.show();
}

其中 JavaFXPlatform 来自 Gluon Charm Down,这是一个您可以获得 here.

的 OSS 库