2011-12-08 193 views
1

我已经试过2种的方法来找到设备的尺寸(宽度和高度):查找设备分辨率

  1. getWindowManager().getDefaultDisplay();
  2. ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

但是这两种方法都是不可靠的,因为有时他们给我错误的尺寸。对于具有480x800分辨率的HTC愿望,它会给我尺寸为320x533,这是不正确的。有人可以建议一个更可靠的方法吗?

回答

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" /> 
1

这应该工作

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

这也将工作:

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

您应该对以下条款明确的概念,

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

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

定位: 从用户的角度来看屏幕的方向。这是横向或纵向,这意味着屏幕的宽高比分别为宽或高。请注意,不同的设备默认情况下在不同的方向上运行,但是当用户旋转设备时,方向会在运行时更改。

分辨率: 屏幕上的物理像素总数。当添加对多个屏幕的支持时,应用程序不会直接使用解决方案;应用程序应仅关注屏幕大小和密度,如广义大小和密度组所指定。

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

参考:android开发人员网站