前言
众所周知,Android厂商非常多,各种尺寸的android手机、平板层出不穷。导致了Android生态环境的碎片化现象越来越严重。Google公司为了解决分辨率过多的问题,在Android的开发文档中定义了px、dp、sp,方便开发者适配不同分辨率的Android设备。对于初级程序员来说理解掌握适配的一些基础知识是必须的。

▲ 基础概念 :

px : 其实就是像素单位,比如我们通常说的手机分辨列表800*400都是px的单位
sp : 同dp相似,还会根据用户的字体大小偏好来缩放
dp : 虚拟像素,在不同的像素密度的设备上会自动适配
dip: 同dp

▲ 举个栗子 : px与dp
pixel,即像素,1px代表屏幕上的一个物理的像素点。但px单位不被建议使用。因为同样像素大小的图片在不同手机显示的实际大小可能不同。要用到px的情况是需要画1像素表格线或阴影线的时候,如果用其他单位画则会显得模糊。

要理解dp,首先要先引入dpi这个概念,dpi全称是dots per inch,对角线每英寸的像素点的个数,所以,它的计算公式如下:

比如height和width即为长宽的像素,平方和即为对角线的像素个数,size即我们常说的5寸手机、4寸手机中的5和4,即对角线的长度。
所以,一样是5寸的手机,分辨率越高,dpi越高。分辨率相同,屏幕对角线英寸数越小,dpi越高。

而dp也叫dip,是device independent pixels。设备不依赖像素的一个单位。在不同的像素密度的设备上会自动适配,比如:
在320x480分辨率,像素密度为160,1dp=1px
在480x800分辨率,像素密度为240,1dp=1.5px
计算公式:px = dp * (dpi/160)

我们做个简单的Sample验证一下,如下,一个布局代码

    

在480*800分辨率中,3.7屏幕对角线英寸数的设备效果图如下

在480*800分辨率中,5.1屏幕对角线英寸数的设备效果图如下

由此可以看出使用px作为单位的,在不同的设备中会显示不同的效果。使用dp作为单位的,会根据不同的设备进行转化,适配不同机型。所以建议在长度宽度的数值使用dp作为单位。

▲ 再举个栗子 : dp与sp
既然我们在上面说了,dp可以自动适配设备机型,那在字体里是否也同样可行?我们再做个简单的Sample验证一下,如下,一个布局代码

        

在480*800分辨率中,3.7屏幕对角线英寸数的设备效果图如下

在480*800分辨率中,3.7屏幕对角线英寸数的设备下,我们修改手机系统字体大小,得到效果图如下

由此可以看出使用sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会。所以建议在字体大小的数值要使用sp作为单位

▲ 拓展
提供一个工具类:dp与px值转换

public class DensityUtil {    /**     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)     */    public static int dp2px(Context context, float dpValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (dpValue * scale + 0.5f);    }    /**     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp     */    public static int px2dp(Context context, float pxValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (pxValue / scale + 0.5f);    }}

更多相关文章

  1. Android图像处理之熔铸特效
  2. Android图像处理之冰冻效果
  3. Android屏幕像素转换
  4. Android(安卓)LCD(三):Samsung LCD接口篇
  5. Android(安卓)UI
  6. Android(安卓)判断SD卡是否存在及容量查询
  7. Android正确获取屏幕像素和密度等
  8. Units of Measurement Supported by Android
  9. android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位

随机推荐

  1. 第一章 开始启程,你的第一行Android代码
  2. Android中的多线程
  3. 哪里可以下载Android的源代码
  4. Android的Media架构介绍
  5. Android源码下载断线
  6. Android应用程序添加自定义的property属
  7. Android(安卓)Studio引入.so文件的正确姿
  8. Activity的四种启动模式和onNewIntent()
  9. [置顶] Android(安卓)上如何移植live555
  10. Android刷Recovery