• 获取 Android 手机屏幕的实际大小(英寸)


    计算的方法

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

    对角线的长度 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;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    [Linux入门]---进程的概念
    【前端】IOS微信浏览器点击右上角遮罩实现
    2022 ICPC Gran Premio de Mexico 1ra Fecha(一)
    qsort () 库函数
    深度学习笔记其七:计算机视觉和PYTORCH
    Go--切片,append
    dockerfile制作-pytoch+深度学习环境版
    Java 中的异常和处理详解
    C# Onnx yolov8 竹签计数、一次性筷子计数
    代码整洁之道
  • 原文地址:https://blog.csdn.net/u013553529/article/details/126775659