2016-04-09 17 views
1

Ich versuche eine App zu erstellen, die auf PC (Windows) und Android ausgeführt wird, jedoch habe ich Probleme, die richtige Bildschirmgröße auf beiden zu bekommen.JavaFxPorts Bildschirmgröße

Unter Windows scheint die Screen.getBounds() -Methode immer die korrekte Vollbildgröße (d. H. Der Bildschirm ohne den Taskleistenbereich usw.) zurückzugeben. Auf Android gibt Screen.getBounds() eine Bildschirmgröße zurück, die viel größer als die tatsächliche Bildschirmgröße ist. Der einzige Weg, wie ich meine App auf Android richtig funktionieren lassen kann, ist Screen.getVisualBounds(). Unter Windows liefert die Verwendung von Screen.getVisualBounds() jedoch immer eine Größe, die in der Höhe etwas kleiner ist als die tatsächliche Gesamtgröße des Bildschirms, da dadurch der von der Taskleiste belegte Speicherplatz entfernt wird.

Weiß jemand, warum die Screen.getBounds() einen viel höheren Wert auf Android als der tatsächlich sichtbare Bildschirm zurückgibt?

Danke.

Antwort

2

Screen.getBounds() gibt die physischen Pixel zurück, während Screen.getVisualBounds() die logischen zurückgibt.

Während auf dem Desktop der Unterschied zwischen diesen Grenzen liegt, nur um das Vorhandensein der Taskleiste bezogen, auf dem mobilen Gerät der Differenz zu der Pixeldichte bzw. Skala bezogen ist, und es kann größer als 1 sein

Diese 6 ist das, was diese Methoden auf einem Nexus zurück:

nexus6

aufgrund der Tatsache, daß die Pixeldichte für this device beträgt 3,5.

Zurück zu Ihrem ursprünglichen Problem, müssen Sie Screen.getVisualBounds() auf Android verwenden.

Aber für Desktop sind Sie die Größe wählen frei:

@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(); 
} 

wo JavaFXPlatform kommt von Gluon Charm unten, eine OSS-Bibliothek, die Sie here bekommen.

+0

Danke Jose. Ich schätze Ihre schnellen Antworten auf meine Fragen. Ich habe versucht, meinen Code so allgemein wie möglich zu halten, ohne plattformspezifische Problemumgehungen verwenden zu müssen, aber das ist unter Umständen unvermeidlich. Danke nochmal für die Hinweise. – Driv

+0

So sollte es die meiste Zeit sein, aber irgendwann gibt es unvermeidliche notwendige Plattform-Besonderheiten. Werfen Sie einen Blick auf Charm Down: Es bietet Agnostic API, aber unter der Haube hängt es von plattformspezifischen Code ab. Falls Sie den gleichen Ansatz beibehalten möchten, können Sie die Desktop/Android/iOS-Pakete verwenden. –