安卓:显示错误的屏幕分辨率

12

我尝试使用这段代码获取安卓手机的屏幕分辨率

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    str_ScreenSize = dm.widthPixels + " x " + dm.heightPixels;
    str_ScreenSize = "dd" + " x " + dm.heightPixels;

我在我的 Galaxy S 手机上尝试了这段代码,得到的屏幕分辨率为 320x533 像素,但实际上 Galaxy S 的屏幕分辨率是 480x800 像素。那么这段代码有什么问题?

怎么获取特定设备的实际屏幕分辨率?


如何获得真实分辨率的结论: http://stackoverflow.com/questions/11824193/htc-sensation-real-resolution - thecr0w
屏幕尺寸为600(宽)x 1024(高)。我获取当前宽度为600,但获取的高度为976(未旋转屏幕)。我获取当前高度为1024,但获取的宽度为552(旋转屏幕后)。请帮助我。 - AnilPatel
6个回答

23

终于在寻找和测试了两天后,我终于找到了真正的问题所在...... 所有上述代码都会给出正确的分辨率。但是最重要的是,在清单文件中需要提及目标SDK。否则,如果密度大于1,将会给出错误的结果。

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="8" />

需要将targetSDK版本设置在4-9之间..希望这能帮助到将来遇到相同问题的人。


我花了一整天的时间试图弄清楚发生了什么事情;花费了很长时间才意识到 getWindowManager().getDefaultDisplay().getMetrics(dm) 返回了错误的值!!之后,搜索变得简单了。感谢您节省了我的几个小时! - Thunder Rabbit
我发现甚至需要设置这个才能正确设置视图大小。谢谢! - Aaron
1
真是太奇怪了,我也遇到了这个问题,但是我的清单文件中有targetSdkVersion。后来意识到它应该在<application>块之前,果然现在可以工作了。谢谢。 - Nick Gotch

4

尝试使用以下代码:

width = getResources().getDisplayMetrics().widthPixels;
height = getResources().getDisplayMetrics().heightPixels;

看起来你正在获取 Galaxy S 密度(1.5)除以像素后的结果。

480 / 1.5 = 320
799.5 / 1.5 = 533

编辑:

density = getResources().getDisplayMetrics().density;

哦,那我该如何获取设备的密度呢? - Shijilal
我正在获取Galaxy S的密度值为1.0。 - Shijilal
1
这似乎是有效的...虽然我不知道它是否是正确的方法... DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm);density=dm.densityDpi; width=(density/160)*dm.widthPixels; height=(density/160)*dm.heightPixels; - Shijilal

1

通过将以下行添加到您的清单文件中,禁用预缩放:

<supports-screens android:anyDensity="true" />

位置:
<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="...."
  android:versionCode="1"
  android:versionName="1.0">

<supports-screens android:anyDensity="true" />

<application android:label="@string/app_name" >
...

之后,您的显示屏将不再进行缩放,并且您也会获得正确的显示分辨率。


0

试试这个...

 Display display = getWindowManager().getDefaultDisplay();
int ScreenHeight = display.getHeight();
int ScreenWidth = display.getWidth();

0

这似乎是有效的...虽然我不知道它是否是正确的方法。

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm);

density=dm.densityDpi; 
width=(density/160)*dm.widthPixels; 
height=(density/160)*dm.heightPixels;

0

这是我的做法:

Display dis = getWindowManager().getDefaultDisplay();
Point point= new Point();
dis.getSize(point);
int width = point.x;
int height = point.y;

当不在Activity中时:

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

在引入getSize之前(API级别13),您可以使用现在已弃用的getWidth和getHeight方法:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

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