2013-04-22 62 views
5

我有600(宽)x 1024(高)的屏幕尺寸。我得到当前宽度600,但错误地获得高度976(没有旋转屏幕)。我得到当前宽度1024,但错误获得高度552(旋转屏幕)。Android中显示宽度和高度错误

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:典型手机屏幕(240×320 LDPI,MDPI分辨率320x480,480x800的华电国际等)。
  2. 480dp:像Streak(480x800 mdpi)这样的Tweener平板电脑。
  3. 600dp:7英寸平板电脑(600x1024 mdpi)。
  4. 720dp:10“平板电脑(720x1280 mdpi,800x1280 mdpi等)。

我得到当前的宽度,但对所有设备(不包括(小320x480屏)无法获得当前高度。

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

+3

您的代码是正确的。某些设备从可用的屏幕分辨率中减去以前的硬件按键的屏幕区域,这些按键现在是显示屏上的触摸按键。 – 2013-04-22 06:08:38

+0

我得到当前的宽度和高度只有320(宽)×480(高)屏幕,但没有得到当前的宽度和高度的另一个屏幕。 – AnilPatel 2013-04-24 09:46:01

+0

为什么这是一个问题? – 2013-04-24 09:51:23

回答

9

相信getDefaultDisplay只给你应用程序将要显示的窗口,它不会考虑其他事情,如顶部的通知栏或底部的安卓按钮(家庭,后面...)或类似的东西。

这可能是为什么你在ve中看到48个像素的差异两种情况下的rtical大小。

更多信息

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

但是,在任何情况下,当它们出现时,您将获得的大小将不包括具有软Android按钮的导航栏。

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

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

如果您不清楚,请检查导航栏等的定义here

+0

在600x1024屏幕上48个像素不同但在480x800屏幕上不是48个像素不同。请帮助我。 – AnilPatel 2013-04-22 06:47:08

+1

在480x800的情况下,它会给你带来什么?这些设备正在运行的是哪些Android版本? – Matthieu 2013-04-22 07:17:09

+0

抱歉Matthieu,我错误的尺寸类型480X800,但我的cuurent尺寸320X480(HVGA屏幕)没有得到不同的48像素,但我得到当前的宽度(320)和高度(480)。请帮帮我。 – AnilPatel 2013-04-22 07:26:36

0

上面代码的屏幕高度不包括底部宽度为48px的android按钮(home,back,latest apps)。 因此,您的屏幕高度为1024-48 = 976.

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

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