Android中的显示宽度和高度错误

Ani*_*tel 6 android screen-orientation

我的屏幕尺寸为600(宽)x 1024(高).我得到当前宽度600但错误地获得高度976(没有旋转屏幕).我得到当前宽度1024但错误得到高度552(旋转屏幕).

 int rowPixelWidth = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
                int rowWidth =  (int)Math.floor(rowPixelWidth / this.getResources().getDisplayMetrics().density);
                int rowPixelheight = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight();
                int rowheight =  (int)Math.floor(rowPixelheight / this.getResources().getDisplayMetrics().density);
                Log.d("rowWidth","rowWidth"+rowWidth);
                Log.d("rowheight","rowheight"+rowheight);
-------------------------------------------------------------
 <uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="8" />
    <supports-screens android:anyDensity="true"/>
-------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

这段代码出了什么问题?

以下是典型屏幕宽度的一些数字:

  1. 320dp:典型的手机屏幕(240x320 ldpi,320x480 mdpi,480x800 hdpi等).
  2. 480dp:像Streak(480x800 mdpi)这样的tweener平板电脑.
  3. 600dp:7"平板电脑(600x1024 mdpi).
  4. 720dp:10英寸平板电脑(720x1280 mdpi,800x1280 mdpi等).

我获得当前宽度但没有获得所有设备的当前高度(没有(320x480屏幕).

我尝试以像素为单位获取屏幕尺寸的代码,但同样会出现问题.

Mat*_*ieu 9

我相信getDefaultDisplay唯一会给你一个应用程序将要显示的窗口,它不会考虑其他东西,如顶部的通知栏或底部的Android按钮(主页,后面......)或类似的东西.

这可能就是为什么你会在两种情况下看到垂直尺寸相差48像素的原因.

更多信息

你的代码似乎是正确的,类似于那里的代码.您可能还想使用此答案中的内容来为正确版本的Android使用正确的API.

但无论如何,当你出现时,你将获得的尺寸将不包括带有软Android按钮的导航栏.

当您在HVGA屏幕上运行Android 4.1时,没有导航栏或组合栏(屏幕太小),因此您可以获得整个屏幕的分辨率.

如果您在更大的屏幕上运行相同的版本,您将看到导航栏,您的应用程序可用的显示大小更小,您将只获得该空间的分辨率.

如果您不清楚,请在此处查看导航栏和其他人的定义.