JavafxPorts屏幕大小

时间:2016-04-09 07:23:22

标签: javafxports

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

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

有谁知道为什么Screen.getBounds()在Android上返回的值远远高于实际的可见屏幕?

感谢。

1 个答案:

答案 0 :(得分:2)

Screen.getBounds()返回物理像素,而Screen.getVisualBounds()则返回逻辑像素。

在桌面上,这些界限之间的差异只与任务栏的存在有关,在移动设备上,差异与像素密度或比例有关,并且可能大于1.

这就是那些方法在Nexus 6上返回的内容:

nexus6

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

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

但对于桌面,您可以自由选择尺寸:

@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,这是一个OSS库,你可以获得here