我正在尝试创建一个可在PC(Windows)和Android上运行的应用程序,但是,我在两者上获得正确的屏幕尺寸时遇到问题。
在Windows上,Screen.getBounds()方法似乎总是返回正确的全屏大小(即没有任务栏空间的屏幕等)。在Android上,使用Screen.getBounds()将返回一个比实际屏幕大小大得多的屏幕尺寸。我可以让我的应用程序在Android上正常工作的唯一方法是使用Screen.getVisualBounds()。但是,在Windows上,使用Screen.getVisualBounds()始终返回的高度略小于实际的总屏幕大小,因为它会删除任务栏占用的空间。
有谁知道为什么Screen.getBounds()在Android上返回的值远远高于实际的可见屏幕?
感谢。
答案 0 :(得分:2)
Screen.getBounds()
返回物理像素,而Screen.getVisualBounds()
则返回逻辑像素。
在桌面上,这些界限之间的差异只与任务栏的存在有关,在移动设备上,差异与像素密度或比例有关,并且可能大于1.
这就是那些方法在Nexus 6上返回的内容:
由于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。