2010-05-25 56 views
9

這是一個非常簡單的問題,我找不到答案:/ 如何以整數值快速訪問屏幕分辨率(寬度,高度)?Android:獲取屏幕分辨率/像素爲整數值

我已經試過這一個,但它總是顯示在我的模擬器零:

DisplayMetrics dm = new DisplayMetrics(); 
int width = dm.widthPixels/2; 

在我來說,我想動態創建一個tableRows表,每塊包含兩個的cols。這個列全部應該填充寬度的一半。

有人可以給我一個提示嗎?

+0

只是一個猜測 - DisplayMetrics中檢索的值在第一次繪製之前可能無效。你在onCreate或onDraw上檢查這個或者什麼時候? – SteelBytes 2010-05-25 07:13:11

+0

結果爲零的真正原因是因爲zero是int中的默認值。 'dm.widthPixels'沒有被初始化,所以它的值是零,零除以2也是零......你應該嘗試類似於'mView.getContext()。getResources()。getDisplayMetrics()' – Armin 2016-08-05 17:16:33

回答

3

最簡單的方法是實施onSizeChanged。您可能獲得的值爲0,因爲該視圖尚未初始化。例如,您不能在視圖構造函數中調用上述代碼。

+0

那麼這是什麼對我來說,當我動態地添加TableRows並完成後,將表添加到主LinearLayout並將其設置爲ContentView(通過使用this.setContentView(ll),其中ll是我的linearLayout? – poeschlorn 2010-05-25 09:13:11

+0

onSizeChanged將被稱爲第一個當你的視圖被繪製並且每當方向改變的時候,當它被調用時,將屏幕的尺寸存儲在你的類的成員中,當你繪製時(在OnDraw方法中)使用這些值。 – kgiannakakis 2010-05-25 09:18:55

+0

謝謝,我要去試試這:) :) – poeschlorn 2010-05-25 11:59:48

17

你可以用這種方式屏幕規格:

Display d = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width = d.getWidth(); 
int height = d.getHeight(); 
+3

這應該被標記爲正確的答案 – emaillenin 2011-10-16 17:14:49

+1

我得到了@deprecated警告,沒有進一步的解釋。使用Guillaume Perrot的答案代替 – Moak 2012-08-08 01:34:34

+0

@Moak,自從Android API 13以來已被棄用。請參閱[docs](http://developer.android。COM /參考/機器人/視圖/ Display.html#的getWidth%28%29)。 – 2015-10-28 10:12:09

4

我使用以下命令:

int scrWidth = getWindowManager().getDefaultDisplay().getWidth(); 
int scrHeight = getWindowManager().getDefaultDisplay().getHeight(); 

沒有搞亂,沒什麼大驚小怪的,只有2類變量

32

的trashkalmar答案正確。

但是,結果將特定於活動上下文。如果你想整個設備的屏幕分辨率:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
int screenWidth = displayMetrics.widthPixels; 
int screenHeight = displayMetrics.heightPixels; 

請注意,結果也取決於當前設備的方向。

+0

完美!...... – 2014-05-21 07:39:19

5

1.簡單地使用這裏面的活動來獲取屏幕寬度和高度像素。

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay() 
    .getMetrics(metrics); 
int width = metrics.widthPixels; 
int height = metrics.heightPixels; 

2,本也可以使用,但需要API級別的內聯檢查

Display display = getWindowManager().getDefaultDisplay(); 

Point size = new Point(); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
    display.getSize(size); 
    int width2 = size.x; 
    int height2 = size.y; 

} else { 
    int width2 = display.getWidth(); 
    int height2 = display.getHeight(); 
} 

3.使用這個時候你是不是在活動,但有背景

WindowManager wm = (WindowManager) context.getSystemService(
      Context.WINDOW_SERVICE); 
Display display1 = wm.getDefaultDisplay(); 
Point size1 = new Point(); 

int width1; 
int height1; 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 

    display1.getSize(size1); 
    width1 = size1.x; 
    height1 = size1.y; 

} else { 
    width2 = display.getWidth(); 
    height2 = display.getHeight(); 
}