安卓中显示宽度和高度错误

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屏幕)的当前高度。
我尝试使用获取像素的屏幕尺寸的代码,但出现了相同的问题。

3
你的代码是正确的。一些设备会从可用的屏幕分辨率中减去以前作为硬件按键,现在变成触摸按钮显示在屏幕上的屏幕区域。 - class stacker
我只能获取当前屏幕的宽度和高度为320(宽)x480(高),而无法获取其他屏幕的当前宽度和高度。 - AnilPatel
那这是个什么问题呢? - class stacker
我的所有按钮边距在320x480的屏幕上设置正确,但在其他屏幕上无法得到这个设置。 - AnilPatel
2个回答

9
我认为 getDefaultDisplay 只会给你应用程序要显示的窗口,它不考虑其他东西,比如顶部的通知栏或底部的 Android 按钮(主页、返回等等),所以在这两种情况下垂直尺寸有 48 像素的差异。
更多信息:
您的代码似乎是正确的,类似于 这里。您可能还想使用类似于 这个答案 中使用正确版本的 Android 的正确 API。
但无论如何,当软件按钮存在时,您将获得不包括软件导航栏的大小。
当您在 HVGA 屏幕上运行 Android 4.1 时,没有导航栏或组合栏(屏幕太小了),因此您会获得整个屏幕的分辨率。
如果您在较大的屏幕上运行相同的版本,则会看到导航栏,可用于您的应用程序的显示尺寸较小,您只会获得该空间的分辨率。

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


600x1024 屏幕上有 48 个像素的差异,但在 480x800 屏幕上没有 48 个像素的差异。请帮忙。 - AnilPatel
1
在480x800的情况下,它会给你什么?这些设备运行哪些版本的Android? - Matthieu
抱歉,Matthieu,我选择了错误的尺寸类型480X800,但我的当前尺寸为320X480(HVGA屏幕),并不会有48像素的差异,而是我得到了当前的宽度(320)和高度(480)。请帮帮我。 - AnilPatel
这些设备运行的是哪个版本的Android系统? - Matthieu
@Metthieu,你提供的信息很有用。 - AnilPatel
显示剩余2条评论

0

使用上述代码获取的屏幕高度不包括底部宽度为48px的Android按钮(主页、返回、最近应用程序)。

因此,您得到的屏幕高度为1024-48 = 976。

上述函数提供了应用程序可见区域。可以将应用程序设置为全屏应用程序,这将隐藏顶部的通知栏,但仍无法隐藏底部的Android按钮栏(主页、返回、最近应用程序)。因此,您可以利用的最大屏幕空间为1024-48 = 976 px。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接