android屏幕适配理解

来源:互联网 发布:ubuntu 改用户名 编辑:程序博客网 时间:2024/05/22 09:01

基本概念:

· in:inches,英寸,屏幕物理尺寸,平时说的多少寸是指对角线长度,1英寸=2.54厘米

· px:pixel,像素,一般的如720*1280表示横向720像素点,纵向1280像素点

· dpi:Dots Per Inch,屏幕像素密度,即屏幕每英寸像素点数

· dp和dip:Density Independent Pixels,dp是dip的简写,别的文章里称为“密度无关像素”,个人感觉与密度关系挺大的- -,以160dpi的屏幕为基准,1dp=1px,也就是说在1英寸内有160个像素点的时候,1dp=1px;那么在一英寸内有320个像素点的时候,1dp=2px。 

那么可以这么理解,把屏幕的1英寸分为160格,每一格包含像素数 n px, 就是在这个屏幕上1dp = n px。 

推导:比如屏幕密度为m,表明一英寸有m个像素;然后我们把一英寸分为160格,那么每一格的像素数就是 m/160,也就是说这个屏幕内1dp = (m/160) px。

· sp:一般在设置字体大小时用到


使用:


也就是说,比如我们开发使用的手机是720*1280的屏幕,那么在这个屏幕上:1dp=320/160=2px。如果UI标注为80px,那么我们就要设置为40dp

 

40dp运行在480*800的屏幕上的时候,会自动进行缩放:这个屏幕上1dp=240/160=1.5px,那么40dp=40*1.5=60px。也就是缩放到了60px。但是在屏幕上所占物理距离是一致的

 

(比例这一行可以忽略掉,mdpi这一行的值就是这个屏幕上1dp=多少px

适配:

再说适配,如果是上面标准的屏幕像素和密度,那么适配的话我们设置dp应该就可以了(还没深入研究)

 

如果不标准的话,情况就比较多了:比如我的屏幕分辨率为720*1280,但是尺寸比标准尺寸大,那么我的屏幕像素密度肯定是小于320的,那么我的1dp就是小于2px的。

 

如果需要强行适配的话,我们需要自己获取屏幕密度,然后进行计算

屏幕密度获取可以使用:

DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);float density = dm.densityDpi;      //屏幕像素密度float m = dm.density;               //1dp=mpx


问题:

前面提到我们写成dp的时候,在屏幕上所占距离是一致的。那么屏幕大小不同的时候,占一样的物理距离,那么比例可能就不对了,UI肯定不满意。UI的要求是控件所占比例相同,比如都是横向的10%.


参考博客:

http://www.jianshu.com/p/6319e43572fa

http://www.jianshu.com/p/ec5a1a30694b

0 0