2014-10-03 22 views
20

Tôi vừa thử ra JavaFX Hello World Example trên màn hình 4k trên Arch Linux, nhưng tiếc là GUI không mở rộng.JavaFX 8 Hỗ trợ HiDPI

Các documentation nói

hỗ trợ Hi-DPI. JavaFX 8 giờ đây hỗ trợ màn hình Hi-DPI.

Vậy làm cách nào tôi có thể làm cho ứng dụng của mình nhận thức được dpi?

+0

Có phần nào trong HĐH của bạn hỗ trợ đúng chế độ 'HI-DPI', ngoài ứng dụng của bạn không? [Theo Arch Wiki] (https://wiki.archlinux.org/index.php/HiDPI), hỗ trợ HiDPI là tốt nhất. – Ideasthete

+0

Tôi sử dụng gnome hỗ trợ hệ số chia tỷ lệ HiDPI. – tryzor

Trả lời

28

Hi-DPI hỗ trợ trên các thiết bị khác nhau

Đối với Mac OS X với võng mạc hiển thị nó nên "chỉ làm việc" - JavaFX là nhận thức của Hi-DPI Mac và sẽ mở rộng giao diện người dùng một cách thích hợp. Nếu bạn đặt khoảng cách trong VBox thành 8, thì đó là thiết bị độc lập của thiết bị; trên màn hình hiển thị không có võng mạc, nó sẽ chiếm 8 pixel, trên màn hình võng mạc có độ phân giải gấp đôi, khoảng cách sẽ chiếm 16 pixel. Bởi vì màn hình võng mạc cũng có gấp đôi DPI cũng như gấp đôi độ phân giải của màn hình không võng mạc, việc đo lường màn hình vật lý của không gian sẽ giống nhau bất kể thiết bị.

Đối với các thiết bị Windows và Linux, kết quả của bạn có thể kém thỏa mãn vì JavaFX 8u20 hiện không theo mặc định làm việc ra các độ phân giải DPI tùy ý trên các thiết bị đó và chia tỷ lệ cho chúng một cách thích hợp. Những gì bạn có thể làm là thực hiện hầu hết các số đo của bạn trong css as em units (dựa trên kích thước điểm của phông chữ mặc định gốc của cảnh) và similarly for fxml và sau đó đặt kích thước điểm phông chữ mặc định của phông gốc một cách thích hợp tùy thuộc vào những gì bạn xác định từ truy vấn độ phân giải DPI của màn hình. Xem phần thảo luận trong câu trả lời này để biết thêm thông tin và mã mẫu: javafx automatic resizing and button padding.

cụ thể để Gnome

Gnome 3 có một setting for the scaling factor có thể được điều khiển bởi lệnh này:

gsettings set org.gnome.desktop.interface scaling-factor 2 

Bạn có thể truy vấn hệ số tỉ lệ này bằng cách đọc cài đặt cấu hình gnome của người dùng và sử dụng này trong kết hợp với truy vấn DPI màn hình để tìm ra cách nhân tố tỷ lệ thích hợp sau đó áp dụng tỷ lệ bằng cách sử dụng các kỹ thuật được mô tả ở trên.

Chỉ là một giai thoại cá nhân - khi tôi thử sử dụng tính năng Gnome 3 (CentOS 7 và cũng là bản phát hành Fedora gần đây) trên màn hình Hi-DPI vài ngày trở lại, tôi thấy hỗ trợ tổng thể cho Hi-DPI trên các ứng dụng đang chạy dưới Linux để được khá spotty. Chắc chắn, hỗ trợ đã được cải thiện nhiều từ CentOS 6 khi tôi cố gắng, nhưng vẫn còn một cách để đạt được chất lượng hỗ trợ Hi-DPI trên bộ công cụ cửa sổ, ứng dụng tiêu chuẩn và ứng dụng của bên thứ ba. Vì lý do này, tôi tin rằng việc chạy các máy tính để bàn HiDPI Gnome vẫn là một vấn đề khá dễ xảy ra, điều này chắc chắn không dành cho tất cả mọi người - tôi chắc chắn rằng tình trạng này sẽ thay đổi theo thời gian.

hình ảnh bitmap

Từ một đội JavaFX dẫn blog entry on Hi-DPI:

Trong các ứng dụng của Apple (bắt đầu với iPhone và iPad với màn hình dạng lưới của họ), giải pháp cho vấn đề là cho ứng dụng nhà phát triển cung cấp hai hình ảnh thay vì một hình ảnh cho mỗi nội dung hình ảnh.Ví dụ, màn hình giật gân sẽ được cung cấp với hai hình ảnh, một ở độ phân giải bình thường và một ở độ phân giải 2x. Các tập tin được đặt tên giống nhau nhưng một 2x được đặt tên theo một số quy ước, như vậy mà tại thời gian chạy nền tảng sẽ tra cứu phiên bản 2x trên võng mạc đằng sau hậu trường. Theo cách này, ứng dụng của bạn nói “fooImage.png” nhưng “[email protected]” được tìm kiếm thay vì trên máy có màn hình võng mạc.

Tôi không biết liệu hình ảnh bitmap này chọn chức năng cho Hi-DPI hiển thị hiện trong Java 8u20 hay không - bạn có thể phải thực hiện nó cho mình bằng cách truy vấn màn hình với screen.getDpi(), sau đó tải bitmap thích hợp.

4K Devices

4K là rất nhiều pixel để đẩy. JavaFX theo mặc định sẽ sử dụng phần cứng một đường ống đồ họa tăng tốc khi có sẵn một đường ống đồ họa. Một số phần cứng đồ họa có thể không được tối ưu hóa hoàn toàn cho màn hình 4K (ví dụ: không đủ ram video), có thể dẫn đến ứng dụng không hoạt động hoặc hoạt động kém. Tôi cũng không tin rằng hiện tại rất nhiều nỗ lực đã đi vào điều tra hiệu suất JavaFX trên các thiết bị 4K khác nhau - nó có thể "chỉ hoạt động", nhưng nó có thể không. Bạn sẽ cần phải kiểm tra ứng dụng của bạn trên phần cứng đích để xác định các khả năng hiện tại của các ứng dụng JavaFX khi chạy trên phần cứng đó. Bạn cũng có thể cần phải tinh chỉnh ứng dụng theo một số gợi ý ở trên.

Một người dùng đã báo cáo một vấn đề với JavaFX 8u20 khi cố gắng để hiển thị video 4K sử dụng JavaFX:

nền

Hỗ trợ Hi-DPI dưới OS X (có khả năng) đơn giản hơn các thiết bị Windows/Linux vì các thiết bị đích là võng mạc hoặc màn hình không có võng mạc với một thiết bị là một tỷ lệ 2x chính xác của thiết bị kia và trực tiếp pport từ hệ điều hành OS X có thể được tận dụng để giúp đạt được quy mô võng mạc. Với Windows/Linux, có lẽ những gì được yêu cầu là khả năng mở rộng quy mô ở các yếu tố khác với chỉ 2x và được bao gồm bởi yêu cầu tính năng (hiện đang xuất sắc và được lên lịch) RT-32521 Support global coordinate scaling with DPI-based default. Chia tỷ lệ theo số lượng không thể tách rời thường cho kết quả hiển thị tốt nhất.

Tài nguyên bổ sung

  • Kynosarges thảo luận về JavaFX DPI Scaling.
  • Tải nhóm JavaFX đã viết một blog on JavaFX on retina Macs (đây là một ít ngày bây giờ, vì JavaFX hiện hỗ trợ Mac võng mạc).
  • Quan điểm của Randahl trên JavaFX: Designing for Multiple Resolutions.
  • Apple có một số lời khuyên tốt đẹp về optimizing applications cho các thiết bị có độ phân giải cao, không phải JavaFX cụ thể và một số lời khuyên không áp dụng cho JavaFX, nhưng vẫn còn một số hiệu trưởng và kỹ thuật chung hữu ích ở đó.

Hướng dẫn đầy đủ về mã hóa cho thiết bị Hi-DPI nằm ngoài phạm vi của câu trả lời cụ thể này - bạn có thể google tài nguyên web khác nhau để biết thêm thông tin.

Nếu bạn có thêm câu hỏi về hỗ trợ Hi-DPI cho JavaFX, tôi khuyên bạn nên hỏi chúng trên openjfx-dev JavaFX developer mailing list.

Wiki trả lời

Câu trả lời này có thể có một số mâu thuẫn càng tốt hoặc lỗi và có thể hẹn hò với thời gian. Tôi đã đưa ra câu trả lời cho cộng đồng wiki. Nếu bạn biết các sửa đổi cụ thể, giới hạn thiết bị và hệ điều hành hoặc hỗ trợ mô hình hỗ trợ cho Hi-DPI trên JavaFX, vui lòng chỉnh sửa câu trả lời này hoặc di chuyển câu trả lời tới số OpenJFX wiki (nơi có thể thuộc về nó).

+0

Cảm ơn câu trả lời toàn diện này. Tôi sẽ thử những gì hoạt động trên các nền tảng khác nhau. – tryzor

Các vấn đề liên quan