Android:如何获得设备的真实屏幕大小?

我已经尝试了不同的方式来获取设备的屏幕大小,但它总是返回我错误的大小(791×480而不是854×480),这可能是由于导航栏。 我的设备目前正在运行JellyBean 4.1.1。

我试过了 :

Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); OpenGLRenderer.widthScreen = size.x; OpenGLRenderer.heightScreen = size.y; 

和:

 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); String resolution = dm.widthPixels + "x" + dm.heightPixels; 

我正在使用下面的代码来使应用程序全屏:

 setContentView(mGLSurfaceView); mGLSurfaceView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

我注意到在logcat中正确的大小被返回:

 01-01 03:05:06.967: I/InputReader(1961): Device reconfigured: id=8, name='cyttsp-spi', surface size is now 480x854, mode is 1 

在我的AndroidManifest:

 uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" 

我用了:

  • 获取冰淇淋三明治的真实屏幕分辨率
  • HTC Sensation真实分辨率
  • 以像素为单位获取屏幕尺寸

为什么我无法获得真正的尺寸( 480x854 )? 或者我怎样才能使用“设备重新configuration”返回的表面?

Solutions Collecting From Web of "Android:如何获得设备的真实屏幕大小?"

尝试打电话

  display.getRealSize(); 

免责声明:我没有意识到这一点,但这只适用于API 17(Android 4.2 / JellyBean)和以上。

尝试这个

  final DisplayMetrics metrics = new DisplayMetrics(); Display display = getWindowManager().getDefaultDisplay(); Method mGetRawH = null,mGetRawW = null; try { // For JellyBeans and onward if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN){ display.getRealMetrics(metrics); realWidth = metrics.widthPixels; realHeight = metrics.heightPixels; } else{ // Below Jellybeans you can use reflection method mGetRawH = Display.class.getMethod("getRawHeight"); mGetRawW = Display.class.getMethod("getRawWidth"); try { realWidth = (Integer) mGetRawW.invoke(display); realHeight = (Integer) mGetRawH.invoke(display); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

我在Android 3.2平板电脑上遇到同样的问题。 我testing了getRealSize和getDisplayMetrics。 他们预计崩溃,因为他们打算在API 17上可用。但奇怪的是,getDisplayMetrics不会崩溃在我的3.2,并返回正确的维度。 getRealSize崩溃。