Android 11 之后,获取 Android 手机屏幕的尺寸(英寸)

文章目录

    • 计算的方法
    • Java 代码实现
    • Kotlin 代码实现

计算的方法

手机屏幕的大小是指 手机屏幕 对角线 的长度,单位为 英寸 或 吋。

对角线的长度 L L L (英寸)
屏幕宽 W W W (英寸)
屏幕高 H H H (英寸)

L = W 2 + H 2 L = \sqrt{W^2 + H^2} L=W2+H2

如何获取屏幕的宽度(英寸),获取屏幕的高度(英寸)?

我们能获取到数据:

  • 屏幕的宽高,单位是像素 (pixels):widthPixels,heightPixels,对应下面代码中的 point.xpoint.y
  • 每英寸的像素数:xdpi (宽)和 ydpi (高),对应下面代码中的 metrics.xdpimetrics.ydpi

屏幕的宽度(英寸) w i d t h I n c h = w i d t h P i x e l s x d p i widthInch = \frac{widthPixels}{xdpi} widthInch=xdpiwidthPixels

屏幕的宽度(英寸) h e i g h t I n c h = h e i g h t P i x e l s y d p i heightInch = \frac{heightPixels}{ydpi} heightInch=ydpiheightPixels

屏幕的尺寸(英寸) S c r e e n S i z e = w i d t h I n c h 2 + h e i g h t I n c h 2 ScreenSize = \sqrt{widthInch^2 + heightInch^2} ScreenSize=widthInch2+heightInch2

Java 代码实现

point.x :屏幕的宽度,单位是像素
point.y: 屏幕的高度,单位是像素
metrics.xdpi:宽度上,每英寸像素数
metrics.ydpi:高度上,每英寸像素数
point.x / metrics.xdpi 是以 英寸 为单位的宽度
point.y / metrics.ydpi 是以 英寸 为单位的高度

getRealSize(point) 可以获取到屏幕中状态栏(status bar)的高度

    public static double calcScreenSize(Activity activity) {
        DisplayMetrics metrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
        Point point = new Point();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            activity.getDisplay().getRealSize(point);
        } else {
            activity.getWindowManager().getDefaultDisplay().getSize(point);
        }
        double w = point.x / metrics.xdpi; // unit is inch
        double h = point.y / metrics.ydpi; // unit is inch
        double size = Math.sqrt(w * w + h * h);
        Log.d(TAG, String.format("Screen size: %.1f", size));
        return size;
    }

Kotlin 代码实现

    fun calcScreenSize(): Double {
        val metrics = DisplayMetrics()
        windowManager.defaultDisplay.getMetrics(metrics)
        val point = Point()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            display?.getRealSize(point)
        } else {
            windowManager.defaultDisplay.getSize(point)
        }
        val w: Double = (point.x / metrics.xdpi).toDouble() // unit is inch
        val h: Double = (point.y / metrics.ydpi).toDouble() // unit is inch
        val size = Math.sqrt(w * w + h * h)
        Log.d(TAG, String.format("Screen size: %.1f", size))
        return size
    }

你可能感兴趣的:(Android细节,android)