2011-12-08 198 views
1

我已經試過2種的方法來找到設備的尺寸(寬度和高度):查找設備分辨率

  1. getWindowManager().getDefaultDisplay();
  2. ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

但是這兩種方法都是不可靠的,因爲有時他們給我錯誤的尺寸。對於具有480x800分辨率的HTC願望,它會給我尺寸爲320x533,這是不正確的。有人可以建議一個更可靠的方法嗎?

回答

1

以下解決方案爲我工作:

public void setDeviceDimensions() { 
     WindowManager w = getWindowManager(); 
     Display d = w.getDefaultDisplay(); 
     width = d.getWidth(); 
     height = d.getHeight(); 

    } 

隨着清單如下條目:

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="9" /> 
1

這應該工作

Display display = activity.getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int Height = display.getHeight(); 
0

這也將工作:

public static String getDisplayPixelSize(Activity activity) { 
    DisplayMetrics metrics = new DisplayMetrics(); 
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    return metrics.widthPixels + " x " + metrics.heightPixels; 
} 
0

您應該對以下條款明確的概念,

屏幕尺寸: 實際物理尺寸,在屏幕的對角線測量。 爲簡單起見,Android會將所有實際屏幕尺寸分爲四種廣義尺寸:小尺寸,普通尺寸,大尺寸和超大尺寸。

屏幕密度: 屏幕物理區域內的像素數量;通常稱爲dpi(每英寸點數)。例如,與「正常」或「高」密度屏幕相比,「低」密度屏幕在給定物理區域內具有更少的像素。 爲了簡單起見,Android將所有實際屏幕密度分爲四種廣義密度:低,中,高和超高。

定位: 從用戶的角度來看屏幕的方向。這是橫向或縱向,這意味着屏幕的寬高比分別爲寬或高。請注意,不同的設備默認情況下在不同的方向上運行,但是當用戶旋轉設備時,方向會在運行時更改。

分辨率: 屏幕上的物理像素總數。當添加對多個屏幕的支持時,應用程序不會直接使用解決方案;應用程序應僅關注屏幕大小和密度,如廣義大小和密度組所指定。

密度獨立像素(DP): 定義UI佈局時應該使用,以表達佈局尺寸或位置的密度無關的方式的虛擬像素。 與密度無關的像素相當於160 dpi屏幕上的一個物理像素,這是系統爲「中等」密度屏幕假設的基準密度。在運行時,系統根據使用的屏幕的實際密度,根據需要透明地處理dp單位的任何縮放比例。將dp單位轉換爲屏幕像素很簡單:px = dp *(dpi/160)。例如,在240 dpi屏幕上,1 dp等於1.5個物理像素。定義應用程序的用戶界面時,應始終使用dp單位,以確保在不同密度的屏幕上正確顯示您的用戶界面。

參考:android開發人員網站