android屏幕适配原理

来源:互联网 发布:淘宝网 无法购买 编辑:程序博客网 时间:2024/06/05 22:33

Android设备碎片化非常严重, 如图,每个小色块代表一种设备分辨率

 

各种分辨率的设备要想全部完美适配是不可能的,那么就可以理解,如上几个文件夹划分了一部分区间,拿过来一个机器,它的像素密度参数接近哪个就用哪个文件夹的图片

做测试:

              heightPixels   widthPixels    density   densityDpi

G35:            752            1280                1.0          160(baseLine)

G200:          723            1366               1.0           160

Huawei:   720            1280               2.0            320

比较huaWei与G200,一个是我的5英寸手机,一个是老平板,有我手机三个大,尺寸悬殊,但是分辨率却相差不大。

DensityDpi是什么:顾名思义 dpi就是dot per inch,也就是2.54厘米长度有多少个像素点

density是为了表征densityDpi的比例 系统提供的baseLine 也就是基准1是160,记为1,那么其他dpi的比例就可以计算出来了,比如320dpi的密度是320/160=2,有种120dpi的老爷机密度是120/160=0.75:

不过实际计算出来的dpi和Android系统定义的dpi之间是有区别的:

由勾股定理公式:

dpi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数


假如分辨率1280*700,计算dpi, 那么5英寸计算出来的是300,与displayMetrics显示的并不相同,这么多尺寸的安卓设备,这样计算出来的dpi应该也会有明显的碎片化倾向,但事实上,每部安卓手机屏幕都有一个初始的固定dpi值,这些数值固定为120、160、240、320、480,可以看作为“系统密度”。安卓对界面元素进行缩放的比例依据正是系统定义的dpi值,而不是实际计算出来的dpi。所以设备运行安卓程序寻找hdpi文件夹还是mdpi文件夹就是用的这个系统密度。

(图片来自http://blog.csdn.net/xiebudong/article/details/37040263/,单位ppi(pixels per inch)与dpi同义)


以我的华为手机为例,算出来的dpi为300,在图中最接近320dpi,那么就去xhdpi文件夹找图片,找不到,就去xxhdpi中找,找不到再往密度高的文件夹中去,如果到头了还找不到,就从hdpi中找,找不到就往下找,一直到找到为止。

1 0
原创粉丝点击