Android不同手机设置相同dp的图片显示大小不一致(记录)

项目开发中UI设计经常会问开发一个问题。比喻我现在有三款手机分别是A手机(1920*1080)B手机(2244*1080)C手机(2340*1080)这三款手机都是用的同一代码,都是使用1080p的设计方案开发的。出现了一种现象A手机和B手机显示的图片大小是一样的而C手机显示的图片要比A手机和B手机小一些。设置为什么

我们可以通过代码获取到这三部手机的dpi大小。代码如下:

public static String getScreenResolution() {
        if (dm == null) {
            dm = new DisplayMetrics();
            WindowManager windowManager = 
                    (WindowManager) TTApplication.getAppContext().getSystemService(Context.WINDOW_SERVICE);
            windowManager.getDefaultDisplay().getMetrics(dm);
        }
        return dm.heightPixels + "*" + dm.widthPixels + 
            "[ppi:"+dm.densityDpi+"]"+ "[dpi:"+dm.density+"]"+ "[X:"+dm.xdpi+"]"+ "[Y:"+dm.ydpi+"]";
    }

获得的结果是:

A手机:dpi为480;B手机:dpi为480;C手机:dpi为440

而Google官网给我们提供了一个如何将dp转换为px的公式:px = dp * (dpi / 160)

这样我们就可以算出实际图片在手机上显示的像素大小。比如说在开发中一个ImageView控件我们设置了宽高都是100dp那么通过公式我们可以得到三款手机实际的像素如下:

A手机:300px;B手机:300px;C手机:270px

这样就不难看出为什么有些手机像素不一致能够显示一样,有些就显示不一样。

再换一个思考方向如果我们想让这三款手机屏幕上都显示100px那应该为ImageView控件多少dp。通过公式我们可以得出

A手机:33.3dp;B手机:33.3dp;C手机:36.36dp

通过以上描述应该就能明白如果我们显示一个控件的宽高在其他手机也要展示一样大小就需要设置不同的dp值。而这些值Google给我们提供了一种方式进行设置。在res文件夹中添加例如这样的文件夹:values-xxhdpi-宽*高  

注:宽和高都是实际使用的屏幕宽高。并不是手机关于中提供的。获取方法可以查看上面的方法。

猜你喜欢

转载自blog.csdn.net/laowu119119/article/details/106281872