屏幕尺寸为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"/>
-------------------------------------------------------------
这段代码出了什么问题?
以下是典型屏幕宽度的一些数字:
我获得当前宽度但没有获得所有设备的当前高度(没有(320x480屏幕)。
我尝试来自Get screen dimensions in pixels的代码,但同样会出现问题。
答案 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的屏幕。