参考自: android屏幕适配最权威指南
地址:http://blog.csdn.net/skykingf/article/details/45536143
概念
ppi (pixels per inch):图像的采样率(在图像中,每英寸所包含的像素数目)
dpi (dots per inch):打印分辨率 (每英寸所能打印的点数,即打印精度)
android手机上dpi代表了屏幕的像素密度;
屏幕的尺寸:屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米
android手机适配原因:
android手机大小不一样,屏幕的分辨率不一样,导致同样的像素数在不同的手机上显示的大小不一样;
因此发明了dp(dip)这个单位,他是Density Independent Pixels的缩写,即密度无关像素;
规定160dpi(每一英寸160像素)的屏幕: 1dp = 1px; 举个例子:320dpi的 屏幕,1dp = 320/160 px即为 1dp = 2px
因此同样的1dp在两个不同密度屏幕上的大小显示一致;
问题就是:无法通过dp控制按钮等控件在屏幕中所占比例大小;
mdpi、hdpi、xdpi、xxdpi
其实之前还有个ldpi,但是随着移动设备配置的不断升级,这个像素密度的设备已经很罕见了,所在现在适配时不需考虑。
mdpi、hdpi、xdpi、xxdpi用来修饰Android中的drawable文件夹及values文件夹,用来区分不同像素密度下的图片和dimen值。
那么如何区分呢?Google官方指定按照下列标准进行区分:
名称 | 像素密度范围 |
---|---|
mdpi | 120dpi~160dpi |
hdpi | 160dpi~240dpi |
xhdpi | 240dpi~320dpi |
xxhdpi | 320dpi~480dpi |
xxxhdpi | 480dpi~640dpi |
在进行开发的时候,我们需要把合适大小的图片放在合适的文件夹里面。下面以图标设计为例进行介绍。
图标的适配方式:
在设计图标时,对于五种主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)应按照 2:3:4:6:8 的比例进行缩放。例如,一个启动图标的尺寸为48x48 dp,这表示在 MDPI 的屏幕上其实际尺寸应为 48x48 px,在 HDPI 的屏幕上其实际大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的屏幕上其实际大小是 MDPI 的 2 倍 (96x96 px),依此类推。
代码中获取屏幕像素和屏幕密度的方法:
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度因子(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
density的含义就是 1dp 代表的像素数,即: xxdpi / 160dpi的结果;
因此要通过dp 得到 像素数公式: px = xx dp * (xx dpi/ 160dpi) ;