寻找设备分辨率

时间:2011-12-08 11:15:05

标签: android

我尝试了两种方法来查找设备尺寸(宽度和高度):

  1. getWindowManager().getDefaultDisplay();
  2. ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
  3. 但这两种方法都不可靠,因为有时它们会给我错误的维度。对于拥有480x800分辨率的HTC欲望,它会给我尺寸为320x533,这是不正确的。有人可以建议更可靠的方法吗?

4 个答案:

答案 0 :(得分:1)

这应该有效

Display display = activity.getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int Height = display.getHeight();

答案 1 :(得分:1)

以下解决方案对我有用:

public void setDeviceDimensions() {
        WindowManager w = getWindowManager();
        Display d = w.getDefaultDisplay();
        width = d.getWidth();
        height = d.getHeight();

    }

以及清单中的以下条目:

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

答案 2 :(得分:0)

这也有效:

public static String getDisplayPixelSize(Activity activity) {
    DisplayMetrics metrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    return metrics.widthPixels + " x " + metrics.heightPixels;
}

答案 3 :(得分:0)

您应该在以下条款中有明确的概念,

屏幕尺寸 实际物理尺寸,以屏幕对角线测量。 为简单起见,Android将所有实际屏幕尺寸分为四种通用尺寸:小尺寸,普通尺寸,大尺寸和超大尺寸。

屏幕密度: 屏幕物理区域内的像素数量;通常称为dpi(每英寸点数)。例如,与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定物理区域内具有更少的像素。 为简单起见,Android将所有实际屏幕密度分为四种通用密度:低,中,高和超高。

<强>定位: 从用户的角度看屏幕的方向。这可以是横向或纵向,这意味着屏幕的宽高比分别为宽或高。请注意,默认情况下,不仅不同的设备在不同的方向上运行,但在用户旋转设备时,方向可能会在运行时发生变化。

解决: 屏幕上的物理像素总数。添加对多个屏幕的支持时,应用程序无法直接使用分辨率;应用程序应仅关注屏幕尺寸和密度,如通用尺寸和密度组所指定的那样。

与密度无关的像素(dp): 在定义UI布局时应使用的虚拟像素单元,以与密度无关的方式表达布局尺寸或位置。 与密度无关的像素相当于160 dpi屏幕上的一个物理像素,这是系统为“中等”密度屏幕假定的基线密度。在运行时,系统根据使用的屏幕的实际密度,根据需要透明地处理dp单元的任何缩放。 dp单位到屏幕像素的转换很简单:px = dp *(dpi / 160)。例如,在240 dpi屏幕上,1 dp等于1.5个物理像素。在定义应用程序的UI时,应始终使用dp单位,以确保在不同密度的屏幕上正确显示UI。

参考:android开发者网站