2013-06-02 231 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();