android 屏幕适配之dp

参考自: 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),依此类推。

关于切图有几个建议:
第一,长宽最好是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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值