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

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

Есть ли какой-нибудь метод в 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 могут получить то, что вы хотите, я думаю.

Чтобы вычислить это, вам нужно использовать плотность экрана.

 Context.getResources().getDisplayMetrics().density 

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

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

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