在开发Android应用程序的过程中,我注意到以下代码行没有报告我的三星Nexus S的正确屏幕尺寸:
width = getResources().getDisplayMetrics().widthPixels;
height = getResources().getDisplayMetrics().heightPixels;
Width返回320,height设置为533。从这篇文章中我知道这是一个没有考虑到设备像素密度的问题。为了纠正这个问题,我编写了下面的代码:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int density = dm.densityDpi;
int width = (density / 160) * dm.widthPixels;
int height = (density / 160) * dm.heightPixels;
当我烘烤变量width
和height
时,返回的尺寸是320宽和533高,这意味着没有任何变化。此外,dm.densityDpi
返回160,而不是235,因为它应该为三星Nexus s。
我读过的一些帖子,似乎表明问题可能在于AndroidManifest.xml。为了解决这个问题,我已经在XML文件中添加了以下内容:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="10"
/>
<supports-screens
android:anyDensity="false"
android:resizeable="false"
android:largeScreens="true"
android:normalScreens="true"
/>
但是,唉,这也不起作用。有谁知道我怎样才能让手机正确地返回它的密度?
这个"问题"与密度无关,这是因为您的应用程序在兼容模式下运行。你的舱单必须报告anyDensity=true