android 屏幕适配之dp

来源:互联网 发布:淘宝宝贝描述低 编辑:程序博客网 时间:2024/04/28 15:53

参考自: 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官方指定按照下列标准进行区分:

名称像素密度范围mdpi120dpi~160dpihdpi160dpi~240dpixhdpi240dpi~320dpixxhdpi320dpi~480dpixxxhdpi480dpi~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),依此类推。

关于切图有几个建议:
第一,长宽最好是3的倍数(根据android的推荐logo图标的大小是48(mdpi),72(hdpi),96(xhdpi)得出的最小公约数)。
第二,长宽最好是偶数。因为奇数在进行等比压缩的时候可能有问题。
第三,根据上面两条,如果长宽是6的倍数最理想。
第四,如果可以拉伸而不改变设计意图的情况下,比如纯色背景,则使用android的9path工具制作成.9的图片

代码中获取屏幕像素和屏幕密度的方法:

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) ;




0 0
原创粉丝点击