2011-05-19 60 views
1

我有一个小班,需要跟踪设备的宽度和高度。Android display.getWidth/height为设备返回错误的尺寸?

public class BrScreenMetrics { 
public static int screenX=0; 
public static int screenY=0; 

public static void setMetrics(Activity activity) 
{ 

    WindowManager w = activity.getWindowManager(); 
    Display d = w.getDefaultDisplay(); 
    screenX = d.getWidth(); 
    screenY = d.getHeight(); 


} 

}

随着每一个新的活动我unvoke行:

BrScreenMetrics.setMetrics(this); 

哪些更新上旋转等方面的价值观......这个伟大的工程,但它返回320x522,不我的愿望是480x800。 我在做什么错?

轻微更新:

我试了一下,此代码使用以及机器人自己的指标类:

public static void setMetrics(Activity activity) 
{ 
    DisplayMetrics metrics = new DisplayMetrics(); 
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);  
    screenX = metrics.widthPixels; 
    screenY = metrics.heightPixels; 

} 

,但它仍然是320x522 :(

+2

看到http://stackoverflow.com/questions/5078808/android-showing-wrong-screen-resolution – 2011-05-19 12:47:36

回答

3

感谢寻找到清单确实是正确的方法,我在我需要 与最终发现最低要求4-6。

这里是我的工具,如果有人发现它有用,或者可以提供一些方法,以使其更好地:

package se.brickit.foundation; 
//Open comment block above for info. 

import android.app.Activity; 
import android.view.Display; 
import android.view.WindowManager; 
import android.webkit.WebSettings.ZoomDensity; 

public class BrScreenMetrics { 
    private static int screenWidthPX = 0; 
    private static int screenHeightPX = 0; 
    private static int densityDpi = 0; 
    private static DisplayMetrics metrics; 

    public static void setMetrics(Activity activity) { 
     DisplayMetrics metrics = new DisplayMetrics(); 
     activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     screenWidthPX = metrics.widthPixels; 
     screenHeightPX = metrics.heightPixels; 
     densityDpi = metrics.densityDpi; 

    } 

    /** 
    * @return the screenWidthPX 
    */ 
    public static int getScreenWidthPX() { 
     return screenWidthPX; 
    } 

    /** 
    * @param screenWidthPX 
    *   the screenWidthPX to set 
    */ 
    public static void setScreenWidthPX(int screenWidthPX) { 
     BrScreenMetrics.screenWidthPX = screenWidthPX; 
    } 

    /** 
    * @return the screenHeightPX 
    */ 
    public static int getScreenHeightPX() { 
     return screenHeightPX; 
    } 

    /** 
    * @param screenHeightPX 
    *   the screenHeightPX to set 
    */ 
    public static void setScreenHeightPX(int screenHeightPX) { 
     BrScreenMetrics.screenHeightPX = screenHeightPX; 
    } 

    /** 
    * @return the densityDpi 
    */ 
    public static int getDensityDpi() { 
     return densityDpi; 
    } 

    /** 
    * @param densityDpi 
    *   the densityDpi to set 
    */ 
    public static void setDensityDpi(int densityDpi) { 
     BrScreenMetrics.densityDpi = densityDpi; 
    } 

    /** 
    * @return the metrics 
    */ 
    public static DisplayMetrics getMetrics() { 
     return metrics; 
    } 

    /** 
    * @return the density 
    */ 
    public static ZoomDensity getZoomDensity() { 
     if (densityDpi < 140) 
      return ZoomDensity.CLOSE; 
     if (densityDpi < 210) 
      return ZoomDensity.MEDIUM; 
     return ZoomDensity.FAR; 
    } 

    public static int getStatusBarHeight() { 
     ZoomDensity zd = getZoomDensity(); 

     if (zd == ZoomDensity.CLOSE) 
      return 19; 
     else if (zd == ZoomDensity.MEDIUM) 
      return 25; 
     else 
      return 38; 

    } 

} 
0

你得到的正确尺寸如果您想以像素为单位获得真实尺寸,请将其添加到您的AndroidManifest.xml中

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

注:这是可能仅适用于Android 1.6 SDK或更高

希望它能帮助:)