2011-08-22 65 views
3

我的代碼:如何獲得android蜂窩系統的屏幕寬度和高度?

Display display = activity.getWindowManager().getDefaultDisplay(); 
DisplayMetrics displayMetrics = new DisplayMetrics(); 
display.getMetrics(displayMetrics); 

System.out.println("screen width:"+displayMetrics.widthPixels); 
System.out.println("screen heigth:"+displayMetrics.heightPixels); 

當我運行這個程序的Android Honeycomb系統,輸出 800和1232 但該設備的屏幕800_1280,郝我能怎麼做呢? 謝謝。

+0

看起來它只是告訴你窗口大小 - 如果你將它設置爲全屏幕,你可能會得到完整的大小 – cjk

+1

你如何獲得這些尺寸值? 1232的高度實際上是屏幕尺寸減去導航欄高度(底部帶有後退,首頁等按鈕的欄)(即1280-48 = 1232)。所以你正在爲你的活動獲得可用的屏幕空間(假設你將它設置爲無標題欄)。事情是我已經嘗試了相同的代碼,但我獲得了800x1280的絕對屏幕尺寸。我實際上想知道**你是如何返回1232的。我在3.1版上測試了我的代碼 –

回答

0

其實設備全屏width=800 and height=1280(including status bar, title bar)。如果您運行代碼以獲取顯示大小,系統將不包含狀態欄高度和標題欄高度,因此您將獲得height as 1232 (1280-(status bar height + title bar height))

6

這段代碼對我的作品(如果你不介意使用無證方法):

Display d = getWindowManager().getDefaultDisplay(); 
int width, height; 

Method mGetRawH; 
Method mGetRawW; 
try { 
    mGetRawH = Display.class.getMethod("getRawWidth"); 
    mGetRawW = Display.class.getMethod("getRawHeight"); 
    width = (Integer) mGetRawW.invoke(d); 
    height = (Integer) mGetRawH.invoke(d); 
} catch (NoSuchMethodException e) { 
    e.printStackTrace(); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (InvocationTargetException e) { 
    e.printStackTrace(); 
} 

//You should care about orientation here 
int o = getResources().getConfiguration().orientation; 
if (o == Configuration.ORIENTATION_PORTRAIT) { 
    if (width > height) { 
     int tmp = width; 
     width = height; 
     height = tmp; 
    } 
} else if (o == Configuration.ORIENTATION_LANDSCAPE) { 
    if (width < height) { 
     int tmp = width; 
     width = height; 
     height = tmp; 
    } 
} 

Log.d("d", "w=" + width + " h=" + height); 
0

1280 * 752 - 景觀 爲800 x 1232 - 肖像

這48像素的爲Andriod默認通知欄...