为啥有不少国产安卓机获取到的xdpi和ydpi是错的

首先解释一下实际计算出来的dpi和Android系统定义的dpi之间的区别:假如分辨率1080×1920,那么5英寸计算出来的是440,4.5英寸dpi是490。如此看来,屏幕密度将会出现很多数值,呈现严重的碎片化。而密度又是安卓屏幕将界面进行缩放显示的依据,那么安卓是如何适配这么多屏幕的呢?其实,每部安卓手机屏幕都有一个初始的固定dpi值,这些数值是120、160、240、320、480,可以看作为“系统密度”。安卓对界面元素进行缩放的比例依据正是系统定义的dpi值,而不是实际计算出来的dpi。所以,不要轻易修改Android系统中定义的dpi值,这可能会引起部分App不兼容。如果应用开发中想要知道手机的实际dpi值,就必须先知道手机屏幕大小然后根据公式计算:dpi = √(长度像素数2 + 宽度像素数2) / 屏幕对角线英寸数
■网友
厂商为了吸引眼球做一些小动作那是正常。广告说1080分辨率,其实是720或480,为了让购买者相信所以改分辨率参数、改dpi.我在开发的时候也很困扰,无奈。所有我也只能这样处理:Point point = new Point();getWindowManager().getDefaultDisplay().getRealSize(point);DisplayMetrics dm = getResources().getDisplayMetrics();double x = Math.pow(point.x / dm.xdpi, 2);double y = Math.pow(point.y / dm.ydpi, 2);double screenInches = Math.sqrt(x + y);厂商是通过system/build.prop来修改,你要修复也可以在这里下手。其中包含:qemu.sf.lcd_densityro.sf.lcd_density
■网友
好蛋疼,vivo的两款手机,一个5.2寸 一个5.7寸,两个手机的dpi竟然是一样的!搞什么啊


    推荐阅读