6

我的屏幕尺寸为 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) 这样的补间平板电脑。
  3. 600dp:7 英寸平板电脑 (600x1024 mdpi)。
  4. 720dp:10 英寸平板电脑(720x1280 mdpi、800x1280 mdpi 等)。

我得到了当前宽度,但没有得到所有设备的当前高度(没有(320x480 屏幕)。

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

4

2 回答 2

9

我相信getDefaultDisplay唯一给你的是应用程序将要显示的窗口,它不考虑其他东西,比如顶部的通知栏或底部的 android 按钮(主页、返回...)或类似的东西。

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

更多信息

您的代码似乎是正确的,并且与那里的代码相似。您可能还想在这个答案中使用类似的东西来为正确的 Android 版本使用正确的 API。

但无论如何,您将获得的尺寸不会包括带有软 Android 按钮的导航栏(当它们存在时)。

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

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

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

于 2013-04-22T06:11:29.760 回答
0

上面代码的屏幕高度不包括底部宽度为 48px 的 android 按钮(主页、返回、最近的应用程序)。结果,您将屏幕高度设为 1024-48 = 976。

上面的函数给出了可以看到应用程序的区域。可以将您的应用程序设置为全屏应用程序,它将在顶部隐藏通知栏,但它仍然不会在底部隐藏 android 按钮栏(主页、返回、最近的应用程序)。因此,您可以利用的最大屏幕空间为 1024-48=976 像素。

但是在某些手机中,android 按钮不是屏幕的一部分,在这些情况下,您可以使用整个 1024 像素的屏幕。

于 2013-04-30T11:51:09.473 回答