JavaFX 8 HiDPI支持
我刚刚在Arch Linux的4k屏幕上尝试了JavaFX Hello
World示例,但是不幸的是,GUI无法缩放。
该文件说
Hi-DPI支持。JavaFX 8现在支持Hi-DPI显示。
那么,如何使我的应用程序dpi知道呢?
回答:
对于具有视网膜显示的OS X Mac,它应该“正常工作”-JavaFX知道Hi-DPI
Mac,并将适当缩放UI。如果将VBox中的间距设置为8,则该间距与设备无关。在非视网膜显示器的Mac上,它将占用8像素;在具有两倍分辨率的视网膜显示器上,间距将占用16像素。由于视网膜显示器的DPI也是非视网膜显示器的两倍,因此DPI以及空间的物理屏幕尺寸将是相同的,而与设备无关。
对于Windows和Linux设备,您的结果可能不太令人满意,因为JavaFX
8u20当前默认情况下不会在此类设备上计算出任意DPI分辨率并适当地缩放。您可以做的是,以css作为em单位执行大多数测量(基于场景根默认字体的磅值),对于fxml也是类似的,然后根据以下情况适当设置场景根默认字体的磅值:您通过查询屏幕的DPI分辨率确定的内容。有关更多信息和示例代码,请参见此答案中的讨论:javafx自动调整大小和按钮填充。
Gnome
3具有比例因子的设置,可以通过以下命令进行控制:
gsettings set org.gnome.desktop.interface scaling-factor 2
您可以通过阅读用户的gnome配置文件设置来查询此缩放因子,并将其与查询屏幕DPI结合使用,以找出合适的缩放因子然后如何使用上述技术应用缩放。
只是个人的轶事-几天前,当我尝试在Hi-DPI显示器上使用Gnome 3缩放功能(CentOS
7以及最新的Fedora版本)时,发现在Linux下运行的应用程序对Hi-DPI的总体支持是非常参差不齐。当然,当我尝试这样做时,它对CentOS
6的支持有了很大的改进,但是要在窗口工具箱,标准应用程序和第三方应用程序中获得高质量的Hi-DPI支持,还有很长的路要走。因此,我相信运行HiDPI
Gnome台式机仍然是一件非常前沿的事情,绝对不适合所有人-我相信这种情况会随着时间而改变。
来自JavaFX团队的Hi-DPI首席博客文章:
在Apple的应用程序中(从带有视网膜显示屏的iPhone和iPad开始),解决方案是应用程序开发人员提供两张图像,而不是为每张图像资产提供一张图像。例如,初始屏幕将提供两张图像,一张为正常分辨率,另一张为2倍分辨率。这些文件的名称相同,但2x文件是根据某些约定命名的,因此在运行时,平台将在后台在视网膜上查找2x版本。这样,您的应用程序显示“
fooImage.png”,但在带有视网膜显示器的计算机上查找“ fooImage@2x.png”。
我不知道用于Hi-DPI显示器的位图图像选择功能当前是否在Java
8u20中-您可能必须自己通过用screen.getDpi()查询屏幕,然后加载适当的位图来实现。
4K像素很多。默认情况下,JavaFX将使用硬件加速图形管道。某些图形硬件可能未针对4K显示进行充分优化(例如,视频显存不足),这可能导致应用程序无法运行或性能不佳。我也不相信目前在研究各种4K设备上的JavaFX性能上付出了很多努力-
它可能“奏效”,但也可能不起作用。您需要在目标硬件上测试您的应用程序,以确定JavaFX应用程序在该硬件上运行时的当前功能。您可能还需要根据上面的一些建议来调整应用程序。
在OS X下支持Hi-DPI比Windows /
Linux设备简单(可能),因为目标设备是视网膜显示或非视网膜显示,其中一个是其他显示的2倍,并且可以利用OS
X系统的直接支持帮助实现视网膜缩放。在Windows / Linux中,可能需要的是缩放能力不只是2 倍的能力,并且(当前出色和计划中的)功能请求涵盖了此功能RT-32521支持基于DPI的默认值的全局坐标缩放。通常,按比例缩放比例可获得最佳可见效果。
- Kynosarges讨论JavaFX DPI缩放。
- JavaFX团队的工作负载在视网膜Mac上的JavaFX上写了一个博客(这有点过时了,因为JavaFX现在支持视网膜Mac。)
- 兰达关于JavaFX的观点:针对多种分辨率的设计。
- 苹果公司为优化高分辨率设备的应用程序提供了一些不错的建议,它不是JavaFX特有的,其中一些建议不适用于JavaFX,但是那里仍然有一些有用的通用原理和技术。
完整的Hi-DPI设备编码指南不在此特定答案的范围之内-您可以在Google的各种网络资源中搜索以获取更多信息。
如果您对JavaFX的Hi-DPI支持还有其他疑问,建议您在openjfx-dev
JavaFX开发人员邮件列表中询问。
该答案可能存在一些不一致或错误,并且可能随着时间的推移而更新。我做了答案社区维基。如果您了解JavaFX上对Hi-
DPI的特定更正,设备和操作系统的限制或支持模型的支持,请随时编辑此答案或将其移至OpenJFX
Wiki(无论如何它都属于该维基)。
以上是 JavaFX 8 HiDPI支持 的全部内容, 来源链接: utcz.com/qa/413948.html