获取屏幕DPI的正确方法

今天有学习屏幕自适配的相关知识,发现如下问题,使我困惑了,发出来和大家一起讨论下。

        public static String getDisplayMetrics(Context cx) {
            String str = "";
            DisplayMetrics dm = new DisplayMetrics();
            dm = cx.getApplicationContext().getResources().getDisplayMetrics();
            int screenWidth = dm.widthPixels;
            int screenHeight = dm.heightPixels;
            float density = dm.density;
            float scaledDensity = dm.scaledDensity;
            int densityDpi = dm.densityDpi;
            float xdpi = dm.xdpi;
            float ydpi = dm.ydpi;
            str += "he absolute width of the display in pixels: " + String.valueOf(screenWidth) + "\n";
            str += "The absolute height of the display in pixels: " + String.valueOf(screenHeight)
                            + "\n";
            str += "The logical density of the display: " + String.valueOf(density)
                            + "\n";
            str += "A scaling factor for fonts displayed on the display: " + String.valueOf(scaledDensity)
                                            + "\n";
            str += "The screen density expressed as dots-per-inch: " + String.valueOf(densityDpi)
                                            + "\n";
            str += "The exact physical pixels per inch of the screen in the X dimension: " + String.valueOf(xdpi) + "\n";
            str += "The exact physical pixels per inch of the screen in the Y dimension: " + String.valueOf(ydpi) + "\n";
            return str;
        }

在不同模器下执行的效果如下:



320*480的屏幕 hw.lcd.density=80

此种情况的疑问如下:density = 0.75 (这里不应该是80/160=0.5才对吗?)
scaledDensity = 0.75(同上)
densityDpi = 120(明明hw.lcd.density=80为何这里是120)
xdpi = 120(同上)
ydpi = 120(同上)




320*480的屏幕 hw.lcd.density=240

这种情况下正常,是我可以理解的结果。



320*480的屏幕 hw.lcd.density=320

此种情况的疑问如下:density = 1.5 (这里不应该是320/160=2才对吗?)
scaledDensity = 1.5(同上)
densityDpi = 240(明明hw.lcd.density=320为何这里是240)
xdpi = 240(同上)
ydpi = 240(同上)





480*800的屏幕 hw.lcd.density=240


此种情况的疑问如下:density = 1 (这里不应该是240/160=1.5才对吗?)
scaledDensity = 1(同上)
densityDpi = 160(明明hw.lcd.density=240为何这里是160)
xdpi = 164.75(同上)
ydpi = 165.20(同上)


以上是我的不理。不知道大家是如何理解的。。。


弄明白了,应该是模拟器的问题。如果一次启动多个模拟器,数据会串掉。
所以最好一次启动一个模拟器。


注解:density = getResources().getDisplayMetrics().density

这个值在不同密度的设备中返回不同的值:

160dpi:1

240dpi: 1.5

120dpi: 0.75

….类推


转自:http://www.eoeandroid.com/thread-17947-1-1.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值