如何在Android中获取显示屏尺寸(英寸)?

5
我需要获取应用程序所使用的显示器的精确英寸数。我的当前解决方案是:
double inch;
double x = Math.pow(widthPix/dm.xdpi,2);
double y = Math.pow(heigthPix/dm.ydpi,2);
double screenInches = Math.sqrt(x+y);

inch = screenInches;

inch = inch * 10;
inch = Math.round(inch);
inch = inch / 10;

如何更好地获取显示器的英寸尺寸?在我的测试设备上,当前显示为4英寸,但实际上是5.9英寸,这是错误的...


似乎这是你能做的最好的了。如果设备关于其指标撒谎,我们就没有机会了。 - Henry
好的。是否有一个设备“说谎”的列表? - Björn Ternes
我不知道有任何列表。另一个想法是给用户一个覆盖的可能性。 - Henry
2个回答

8
以下结果与规格非常接近:
    DisplayMetrics dm = getResources().getDisplayMetrics();

    double density = dm.density * 160;
    double x = Math.pow(dm.widthPixels / density, 2);
    double y = Math.pow(dm.heightPixels / density, 2);
    double screenInches = Math.sqrt(x + y);
    log.info("inches: {}", screenInches);

输出:英寸:4.589389937671455
规格:三星Galaxy Nexus(720 x 1280像素,~320 dpi,4.65英寸)

请注意,dm.heightPixels(或根据您的方向dm.widthPixels)不一定提供准确信息,因为软键(如在Galaxy Nexus中使用)未添加到高度(或宽度)中。


双倍密度= dm.density * 160; 160是什么? - Kailas
这是 mdpi 屏幕的参考密度,其中 1 dp = 1 px。请参阅 http://developer.android.com/guide/practices/screens_support.html#overview 和 http://developer.android.com/reference/android/util/DisplayMetrics.html#density。 - Father Stack
1
在使用这个计算时,我应该得到 Google Pixel XL 的 5.5,但是我得到的是 4.9。 - Giedrius Šlikas

6

尝试这个.... 这将给出显示器的确切尺寸。

static String getDisplaySize(Activity activity) {
    double x = 0, y = 0;
    int mWidthPixels, mHeightPixels;
    try {
        WindowManager windowManager = activity.getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        DisplayMetrics displayMetrics = new DisplayMetrics();
        display.getMetrics(displayMetrics);
        Point realSize = new Point();
        Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
        mWidthPixels = realSize.x;
        mHeightPixels = realSize.y;
        DisplayMetrics dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        x = Math.pow(mWidthPixels / dm.xdpi, 2);
        y = Math.pow(mHeightPixels / dm.ydpi, 2);

    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return String.format(Locale.US, "%.2f", Math.sqrt(x + y));
}

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