如何在Android中获得以英寸为单位的显示尺寸?

如何在Android中获得以英寸为单位的显示尺寸?,android,Android,我的应用程序需要一英寸的显示屏。我目前的解决办法是: 有没有更好的方法来获得显示英寸?我的测试设备上的电流为4英寸,显示为5.9,这是错误的…以下给出的结果与规格非常接近: DisplayMetrics dm = getResources().getDisplayMetrics(); double density = dm.density * 160; double x = Math.pow(dm.widthPixels / density, 2); doub


我的应用程序需要一英寸的显示屏。我目前的解决办法是:


有没有更好的方法来获得显示英寸?我的测试设备上的电流为4英寸,显示为5.9,这是错误的…

以下给出的结果与规格非常接近:

    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中使用)不会添加到高度(或宽度)。

试试这个……这将为您提供精确的显示尺寸

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));
}

似乎是你能做的最好的了。如果设备对其指标撒谎,我们就没有机会了。嗯,好的。有“撒谎”设备的列表吗“我不知道有什么名单。另一个想法是让用户有可能覆盖.double density=dm.density*160;160是多少?这是mdpi屏幕的参考密度,其中1 dp=1 px。看,当使用这个计算时,谷歌像素XL应该得到5.5,但我得到了4.9
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));
}