我正在尝试创建一个同时运行在PC (Windows)和Android上的应用程序,然而,我在这两款应用上都有获得正确屏幕大小的问题。
在Windows上,Screen.getBounds()方法似乎总是返回正确的全屏大小(即没有任务栏空间的屏幕等)。在Android上,使用Screen.getBounds()将返回一个比实际屏幕大小大得多的屏幕大小。只有使用Screen.getVisualBounds()才能让我的应用程序在安卓系统上正常工作。但是,在Windows上,使用Screen.getVisualBounds()总是返回一个大小略小于实际总屏幕大小的大小,因为它删除了任务栏占用的空间。
有人知道为什么Screen.getBounds()在Android上返回的值比实际可见屏幕高得多吗?
谢谢。
发布于 2016-04-09 10:16:20
Screen.getBounds()返回物理像素,而Screen.getVisualBounds()返回逻辑像素。
而在桌面上,这些边界之间的差异只是与任务栏的存在有关,而在移动设备上,差异与像素密度或比例尺有关,并且可以大于1。
这就是这些方法在Nexus 6上返回的内容:

由于这个装置的像素密度为3.5。
回到你最初的问题,你需要在安卓系统上使用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来自胶子魅力下降,一个开放源码软件库,你可以得到这里。
https://stackoverflow.com/questions/36513951
复制相似问题