如何获得真正的屏幕高度和宽度?

DisplayMetrics metrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels; 

我使用这些代码来获得屏幕的高度和宽度

我的Nexus7的屏幕高度应该是1280

但它返回1205 …

而我的minSdkVersion是8级

所以我不能使用这些方法:

 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int screen_width = size.x; int screen_height = size.y; 

现在,我应该如何获得正确的屏幕尺寸?

编辑:

 if (Build.VERSION.SDK_INT >= 11) { Point size = new Point(); try { this.getWindowManager().getDefaultDisplay().getRealSize(size); screenWidth = size.x; screenHeight = size.y; } catch (NoSuchMethodError e) { Log.i("error", "it can't work"); } } else { DisplayMetrics metrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels; } 

使用它的作品!

我认为这将工作。 诀窍是你必须使用:

 display.getRealSize(size); 

 display.getSize(size); 

处理您的API 8编码问题做这样的事情:

 try { display.getRealSize(size); height = size.y; } catch (NoSuchMethodError e) { height = display.getHeight(); } 

只有更新的API设备会有屏幕上的导航button,因此需要新的方法,旧的设备会抛出一个exception,但不会有屏幕导航,因此旧的方法是好的。

如果需要说明的话:仅仅因为你的项目的最低API等级为8并不意味着你必须在这个级别编译它。 我也使用级别8,但我的项目主要是在13级(3.2)编译,让他们访问了很多新的方法。

我写了一个方法,将尽可能接近API 10到17+。 它应该为API 14+提供真正的宽度和高度,并且它可以用于其他任何事情。

  Display display = context.getWindowManager().getDefaultDisplay(); int realWidth; int realHeight; if (Build.VERSION.SDK_INT >= 17){ //new pleasant way to get real metrics DisplayMetrics realMetrics = new DisplayMetrics(); display.getRealMetrics(realMetrics); realWidth = realMetrics.widthPixels; realHeight = realMetrics.heightPixels; } else if (Build.VERSION.SDK_INT >= 14) { //reflection for this weird in-between time try { Method mGetRawH = Display.class.getMethod("getRawHeight"); Method mGetRawW = Display.class.getMethod("getRawWidth"); realWidth = (Integer) mGetRawW.invoke(display); realHeight = (Integer) mGetRawH.invoke(display); } catch (Exception e) { //this may not be 100% accurate, but it's all we've got realWidth = display.getWidth(); realHeight = display.getHeight(); Log.e("Display Info", "Couldn't use reflection to get the real display metrics."); } } else { //This should be close, as lower API devices should not have window navigation bars realWidth = display.getWidth(); realHeight = display.getHeight(); } 

您可以使用DisplayDisplayMetricsfind真实的设备尺寸

使用显示器:

 private void findRealSize(Activity activity) { Point size = new Point(); Display display = activity.getWindowManager().getDefaultDisplay(); if (Build.VERSION.SDK_INT >= 17) display.getRealSize(size); else display.getSize(size); int realWidth = size.x; int realHeight = size.y; Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight); } 

使用DisplayMetrics:

 private void findRealSize(Activity activity) { DisplayMetrics displayMetrics = new DisplayMetrics(); if (Build.VERSION.SDK_INT >= 17) { activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics); } else { activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); } int realWidth = displayMetrics.widthPixels; int realHeight = displayMetrics.heightPixels; Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight); }