2017-08-14 91 views
3

我正在爲Microsoft Surface編寫一個JavaFX應用程序,我正在尋找一種方法來檢測從縱向到橫向旋轉設備時的屏幕方向更改,反之亦然。我用來檢測屏幕方向的當前方法如下:如何檢測屏幕方向更改? - Microsoft Surface上的JavaFX

window.widthProperty().addListener((obs, oldVal, newVal) -> { 
    if((double) newVal < window.getHeight()) { 
     setPortraitMode(); 
    } else { 
     setLandscapeMode(); 
    } 
}); 

此方法適用於手動窗口調整大小。但是,方向更改(設備旋轉)不會觸發窗口調整大小事件,因此更改佈局的方法不會自動觸發。

什麼是正確的方式來檢測屏幕方向的變化,而不用聽取大小調整事件?

+0

我想你可以輪詢[畫面]的視覺界限(https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Screen.html )在[AnimationTimer](https://docs.oracle.com/javase/8/javafx/api/javafx/animation/AnimationTimer.html)處理程序中,但這是一種醜陋的解決方案。 – jewelsea

回答

1

此問題的解決方案是檢查長寬比的變化。我使用的條件:

if((double) newVal < window.getHeight() || ((double) newVal/visualBounds.getHeight() < 1.5)