代码之家  ›  专栏  ›  技术社区  ›  Nathan

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

  •  46
  • Nathan  · 技术社区  · 15 年前

    我需要知道屏幕在设备上的实际长度单位有多大,这样我就可以计算重力加速度,单位是像素/毫秒。

    在Android API中是否有这样的方法?

    6 回复  |  直到 6 年前
        1
  •  87
  •   Community leo1    7 年前

    使用以下内容:

        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和mheight pixels取自下面的代码时

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

    参考本帖: Get screen dimensions in pixels

        2
  •  9
  •   gilix    11 年前

    要获取当前大小,请在末尾使用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;
    
        3
  •  4
  •   gingerbreadboy    15 年前

    android developers screen info.

    使用 xdpi * widthPixels ydpi * heightPixels 我想你会得到你想要的。

        4
  •  3
  •   Pankaj Lilan    7 年前

    下面的代码段将帮助您 屏幕尺寸(英寸)

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

    希望这有帮助。

        5
  •  0
  •   leegor    6 年前

    我用这个来得到真正的尺寸

    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
    
        6
  •  -4
  •   CaseyB    15 年前

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

    Context.getResources().getDisplayMetrics().density
    

    根据文件:

    显示的逻辑密度。这是与密度无关的像素单元的比例因子,其中一个倾斜是大约160 dpi屏幕上的一个像素(例如240x320,1.5“x2”屏幕),提供系统显示的基线。因此,在160dpi屏幕上,密度值为1;在120dpi屏幕上,密度值为.75;等等。

    该值并不完全符合实际屏幕大小(由xdpi和ydpi给出),而是用于根据显示dpi的总体变化逐步缩放整个UI的大小。例如,240x320屏幕的密度为1,即使其宽度为1.8”、1.3”等。但是,如果屏幕分辨率增加到320x480,但屏幕大小保持为1.5”x2”,则密度将增加(可能为1.5)。

    推荐文章