2013-02-21 277 views
0

我有以下我的應用程序,以獲取屏幕寬度和高度的代碼:Android |獲取屏幕高度,寬度和屏幕寬度,高度

screenHeight = (short) Activity.getWindow().getWindowManager().getDefaultDisplay().getHeight(); 
screenWidth = (short) Activity.getWindow().getWindowManager().getDefaultDisplay().getWidth(); 

而在AndroidManifest,我有:

<activity 
     android:name="com.test.MyActivity" 
     android:configChanges="keyboardHidden|orientation" 
     android:launchMode="singleTask" 
     android:screenOrientation="landscape" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
</activity> 

現在,對於屏幕分辨率爲1280x700的設備,我期望screenWidth變量的值始終爲1280,screenHeight爲700.這與用戶如何握住手機無關。

但仍然有時我得到screenWidth等於700和高度等於1280.爲什麼?我的清單文件不應該強制我的應用程序的方向始終保持風景嗎?

+0

我不明白這是一個問題。寬度/高度是相對於屏幕方向的,是的。一旦你知道了,你只需要相應地使用信息。 – njzk2 2013-02-21 10:09:38

回答

0

android:screenOrientation="landscape"

這是導致此問題,如果你有解決您的問題,然後使它到肖像。

如果您不想限制自己,那麼請檢查代碼中的方向並進一步使用您的代碼。

不是代碼而是想法, 例如,

if(getOrientation=="portrait") 

    determine height and width. 

else 
    ... 
0

這是Android的一個有點棘手的部分。由於在您的應用程序中可能會異步發生大量事情,因此您不應該依賴此類方法。如果您的應用程序被迫以橫向模式運行,但您擁有一部普通手機,該手機可能具有肖像作爲家庭和鎖定屏幕的默認方向,則會遇到麻煩。每當您鎖定屏幕或啓動應用程序的新實例時,由於未完成旋轉動畫,您無法確定報告的寬度和高度是橫向還是縱向。

要正確確定分辨率,您必須瞭解您實際檢查的方向。您可以使用加速度計,OrientationEventListener,OnConfigurationChanged和rootView大小。不過,我想處理這個問題的最好方法是在代碼中交換寬度和高度,因此寬度始終是較大的值。就這樣。

0

放線在您的清單活動標籤

android:configChanges="keyboardHidden|orientation" 

覆蓋的方法在你的活動

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

,並把線onCreate()方法

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAP); 

您的應用程序將只留在風景區。 :)