Есть ли способ определить высоту физического экрана Android в см или дюймах?

StackOverflow https://stackoverflow.com/questions/2193457

Вопрос

Мне нужно точно знать, насколько большой экран находится на устройстве в реальных единицах длины, поэтому я могу рассчитать ускорение из-за гравитации в пикселях на миллисекунду.

Есть ли метод где-то в Android API для этого?

Это было полезно?

Решение

Используйте следующее:

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(mWidthPixels/dm.xdpi,2);
    double y = Math.pow(mHeightPixels/dm.ydpi,2);
    double screenInches = Math.sqrt(x+y);
    Log.d("debug","Screen inches : " + screenInches);

Когда Mwidthpixels и MHeightPixels взяты из ниже

private void setRealDeviceSizeInPixels()
{
    WindowManager windowManager = getWindowManager();
    Display display = windowManager.getDefaultDisplay();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    display.getMetrics(displayMetrics);


    // since SDK_INT = 1;
    mWidthPixels = displayMetrics.widthPixels;
    mHeightPixels = displayMetrics.heightPixels;

    // includes window decorations (statusbar bar/menu bar)
    if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
    {
        try
        {
            mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
            mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
        }
        catch (Exception ignored)
        {
        }
    }

    // includes window decorations (statusbar bar/menu bar)
    if (Build.VERSION.SDK_INT >= 17)
    {
        try
        {
            Point realSize = new Point();
            Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
            mWidthPixels = realSize.x;
            mHeightPixels = realSize.y;
        }
        catch (Exception ignored)
        {
        }
    }

Смотрите этот пост для справки:Получить размеры экрана в пикселях

Другие советы

Для получения текущего размера используйте Math. Round в конце.

 DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(dm.widthPixels/dm.xdpi,2);
    double y = Math.pow(dm.heightPixels/dm.ydpi,2);
    double screenInches = Math.sqrt(x+y);
    Log.d("debug","Screen inches : " + screenInches);

screenInches=  (double)Math.round(screenInches * 10) / 10;

Информация о экране разработчиков Android.

использовать xdpi * widthPixels а также ydpi * heightPixels может получить вас, что вы хотите, я думаю.

Следующий фрагмент кода поможет вам получить Размер экрана в дюймах

public static double getScreenSizeInches(Activity activity){
    WindowManager windowManager = activity.getWindowManager();
    Display display = windowManager.getDefaultDisplay();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    display.getMetrics(displayMetrics);

    // since SDK_INT = 1;
    int mWidthPixels = displayMetrics.widthPixels;
    int mHeightPixels = displayMetrics.heightPixels;

    // includes window decorations (statusbar bar/menu bar)
    if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) {
        try{
            mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
            mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
        } catch (Exception ignored) {}
    }

    // includes window decorations (statusbar bar/menu bar)
    if (Build.VERSION.SDK_INT >= 17) {
        try {
            Point realSize = new Point();
            Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
            mWidthPixels = realSize.x;
            mHeightPixels = realSize.y;
        } catch (Exception ignored) {}
    }

    DisplayMetrics dm = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(mWidthPixels / dm.xdpi, 2);
    double y = Math.pow(mHeightPixels / dm.ydpi, 2);
    return Math.sqrt(x + y);
}

Надеюсь, это помощь.

Я использовал это, чтобы получить реальный размер

final DisplayMetrics metrics = new DisplayMetrics();
final WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    windowManager.getDefaultDisplay().getRealMetrics(metrics);
}
else {
    windowManager.getDefaultDisplay().getMetrics(metrics);
}
int realHeight = metrics.heightPixels; // This is real height
int realWidth = metrics.widthPixels; // This is real width

Вам нужно использовать плотность экрана для расчета этого.

Context.getResources().getDisplayMetrics().density

Согласно документации:

Логическая плотность дисплея. Это коэффициент масштабирования для нестоявого пиксельного устройства плотности, где одно пиксель на одном пикселе на экране приблизительно 160 DPI (например, на экране 240x320, 1,5 «x2»), обеспечивающий исходную линию дисплея системы. Таким образом, на экране 160DPI это значение плотности будет 1; На экране 120 DPI это было бы .75; и т.п.

Это значение не точно следит за реальным размером экрана (как задано XDPI и YDPI, а скорее используется для масштабирования размера общего пользовательского интерфейса на шагах на основе валовых изменений в дисплее DPI. Например, экран 240x320 будет иметь Плотность 1, даже если его ширина составляет 1,8 ", 1,3" и т. Д. Однако, если разрешение экрана увеличивается до 320x480, но размер экрана остался 1,5 "x2", то плотность будет увеличена (возможно до 1,5).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top