2013-06-02 279 views
1

我使用這個代碼讓我的屏幕分辨率:Android的錯屏幕尺寸

//View v 
Context ctx = v.getContext(); 
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

,但我得到一個錯誤的屏幕尺寸:

06-03 05:25:47.861: I/Screen Size(5267): 1024x552 

我的平板電腦擁有7" 屏幕,1024×600分辨率。我猜想缺少的48像素是系統欄使用的,但即使隱藏它,我得到的屏幕尺寸。

由於我在android 4.1.1我不能使用getRealSize()方法添加API17。 如何獲得正確的屏幕尺寸?

更新:我的面板密度與1.0沒有不同,所以它不是重複的問題。大小應該是正確的。

更新2:下面的代碼工作(它只適用於13和16之間的API)。 它返回600x1024所以乾脆讓屏幕方向檢查,以獲得正確的寬度/高度

Method mGetRawW = Display.class.getMethod("getRawWidth"); 
Method mGetRawH = Display.class.getMethod("getRawHeight"); 
int nW = (Integer)mGetRawW.invoke(dp); 
int nH = (Integer)mGetRawH.invoke(dp); 

我把它從這裏:Android DisplayMetrics returns incorrect screen size in pixels on ICS

回答

0

你可以顯示度量這樣

context.getResources().getDisplayMetrics().density; 

對於不同的密碼也可以使用

這是一種可以覆蓋的方法,用於獲取屏幕設備信息,進入每個設備

@Override 
public void onSizeChanged (int w, int h, int oldw, int oldh) 
{ 
super.onSizeChanged(w, h, oldw, oldh); 
screenW = w; 
screenH = h; 

scaledCardW = (int) (screenW/8); //or whatever scale you need for bitmaps 
scaledCardH = (int) (scaledCardW*1.28); 
bitmap = // load your bitmaps 

} 
+0

我也嘗試過度量標準仍然會得到錯誤的大小。 – Vektor88

+0

我在這個問題上增加了另一個嘗試 – JRowan

0

你不能一次,但由於系統欄總是在屏幕的底部,你可以用這種伎倆來獲得真正的維度:

Display display = getWindowManager().getDefaultDisplay(); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
int height = display.getWidth(); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
int width = display.getWidth();