【问题标题】:Wrong display width and height in AndroidAndroid中的显示宽度和高度错误
【发布时间】:2013-04-22 06:04:18
【问题描述】:

我的屏幕尺寸为 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 屏幕)。

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

【问题讨论】:

  • 您的代码是正确的。一些设备从可用的屏幕分辨率中减去以前的硬件键(现在是显示屏上的触摸按钮)的屏幕区域。
  • 我只获得了 320(width)x480(height) 屏幕的当前宽度和高度,但没有获得另一个屏幕的当前宽度和高度。
  • 为什么这是个问题?
  • my true all button margin setting in 320x480 but not get this setting another screen.

标签: android screen-orientation


【解决方案1】:

我相信getDefaultDisplay 只为您提供了将显示应用程序的窗口,它不考虑其他内容,例如顶部的通知栏或底部的 android 按钮(主页、返回...)或诸如此类。

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

更多信息

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

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

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

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

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

【讨论】:

  • 在 600x1024 的屏幕上相差 48 个像素,但在 480x800 的屏幕上没有 48 个像素的不同。请帮帮我。
  • 在 480x800 的情况下它会给你什么?这些设备运行的是什么版本的 Android?
  • 抱歉,Matthieu,我的尺寸类型错误 480X800,但我当前的尺寸 320X480(HVGA 屏幕)没有得到不同的 48 像素,但我得到了当前的宽度(320)和高度(480)。请帮帮我。
  • 这是什么版本的 Android / 这些设备在运行?
  • 我在 4.1 版本的 android 320x480(HVGA Screen)Emulator 中运行应用程序。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2015-02-09
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多