有没有办法确定以厘米或英寸的Android物理屏幕高度?

我需要准确地知道设备上的屏幕有多大,以真实单位为单位,所以我可以计算出由于重力引起的加速度(以像素/毫秒为单位)。

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

希望这个帮助。

你需要使用屏幕密度来计算这个。

 Context.getResources().getDisplayMetrics().density 

根据文件:

显示器的逻辑密度。 这是“密度无关像素”单位的缩放因子,其中一个DIP在大约160 dpi的屏幕上(例如,240×320,1.5“x2”屏幕)上的一个像素,提供系统显示的基线。 因此,在160dpi的屏幕上,这个密度值将是1; 在120 dpi的屏幕上它将是0.75; 等等

该值并不完全遵循真实的屏幕尺寸(如xdpi和ydpi所给出的,而是用于基于显示dpi的总体变化逐步缩放整个UI的尺寸。例如,240×320屏幕将具有即使其宽度为1.8“,1.3”等,但是,如果屏幕分辨率增加到320×480,但屏幕尺寸保持1.5“×2”,则密度将增加(可能为1.5)。