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

Nat*_*han 47 android resolution screen inches

我需要确切知道屏幕在设备上的实际长度单位有多大,这样我就可以计算出由重力引起的加速度,以每毫秒像素为单位.

Android API中是否有针对此的方法?

Bgh*_*aak 88

使用以下内容:

    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);
Run Code Online (Sandbox Code Playgroud)

当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)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

请参阅此文章以供参考: 获取屏幕尺寸(以像素为单位

  • 我有~15个测试设备,但有些测试设备出现故障,例如它不适用于某些型号,如摩托罗拉Milestone或ZTE手机. (8认同)
  • 返回值不准确,因为`getMetrics`(和`display.getWidht()`或`display.getHeight()`返回应用程序可用的值(例如,它不包含操作栏高度) ).因此,在1280x800屏幕上,您可以获得值1260x800或1280x780等等. (4认同)
  • 正如 STeN 所提到的,这种计算对于某些设备是不正确的。例如,此代码为 Droid Bionic 报告了一个 3" 屏幕,它实际上有一个 4.3" 屏幕。仿生上 xdpi 和 ydpi 的返回值分别为 368 和 365,可能是由于 PenTile 显示器或摩托罗拉混淆。此设备的实际 DPI 为 sqrt(960^2 + 540^2) / 4.3 = ~256 dpi。 (2认同)
  • 因此,对于Droid Bionic和其他一些设备,如果使用DisplayMetrics.densityDpi返回的近似DPI而不是使用xdpi/ydpi,则可以获得更准确的屏幕尺寸. (2认同)
  • 说我的三星Galaxy Ace S5830I是15英寸 - 显然情况并非如此! (2认同)

小智 9

获取当前大小最后使用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;
Run Code Online (Sandbox Code Playgroud)