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

时间:2013-04-22 06:04:19

标签: 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"/>
-------------------------------------------------------------

这段代码出了什么问题?

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

  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等)。
  5. 我获得当前宽度但没有获得所有设备的当前高度(没有(320x480屏幕)。

    我尝试来自Get screen dimensions in pixels的代码,但同样会出现问题。

2 个答案:

答案 0 :(得分:9)

我相信getDefaultDisplay只会为您提供应用程序显示的窗口,它不会考虑其他内容,例如顶部的通知栏或Android按钮(主页,后面......)底部或类似的东西。

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

更多信息

您的代码似乎是正确的,类似于there。您可能还想使用this answer之类的内容为正确版本的Android使用正确的API。

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

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

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

如果您不清楚,请检查导航栏和其他here的定义。

答案 1 :(得分:0)

您的屏幕高度与上面的代码不包括底部的Android按钮(主页,后面,最近的应用程序),宽度为48px。 因此,您将屏幕高度设置为1024-48 = 976。

上面的功能给出了可以看到app的区域。有可能使您的应用程序成为全屏应用程序,这将隐藏顶部的通知栏,但它仍然不会隐藏底部的Android按钮栏(主页,后面,最近的应用程序)。因此,您可以使用的最大屏幕空间是1024-48 = 976像素。

然而在某些手机中,android按钮不是屏幕的一部分,在这种情况下你可以使用整个1024 px的屏幕。