Android屏幕适配 - DP适配存在问题详解

针对Android严重碎片化的问题,google官方推出了一系列的适配方案:https://developer.android.com/training/multiscreen/screensizes.html?hl=zh-cn https://developer.android.com/training/multiscreen/screendensities.html?hl=zh-cn

接下来我们针对google官方提供的DP适配具体分析一下:

分析之前我们先补充一下一些基础知识:

基本概念:

1. 屏幕尺寸手机对角线的物理尺寸,单位:英寸(inch)。 eg:5.5寸。

2. resolution(屏幕分辨率)手机横向像素点总和 X 手机纵向像素点总和, 单位:px。eg: 1080X1920。

3. ppi (Pixels-Per-Inch 每英寸物理显示像素点的总和)

长宽各自平方之和开方,除以对角线长度(单位英寸)。eg: √ (1080^2 + 1920^2) / 5.5 = 400。

4. dpi (Dots-Per-Inch 每英寸物理显示点的个数)

    若1dot = 1px,且dpi是系统屏幕对应的值,没有修改过,

        (1). dpi为160时,1inch有160个像素, 每像素是1/160 inch, 即 1px=1/160inch.

        (2). dpi为320时,1inch有320个像素, 每像素是1/320 inch,即 1px=1/320inch.

5. dp/dip (Device-independent pixel, 密度无关像素  android用于开发的单位)

        在Android中,规定以160dpi为基准,1dip=1px,如果密度是320dpi,则1dip=2px,以此类推。

了解了上面的基础概念,我们具体分析dp适配到底适配了什么?

DP适配适配了什么?

      当dpi为160时,1dp=1px=1/160inch.

        dpi为320时,1dp=320/160px=2px=2*1/320inch=1/160inch

由此推出,1dp 约等于 1/160inch,dp和手机物理尺寸是正相关的,当dpi=ppi的屏幕上,显示的尺寸大小是一致的。

例如:对某个view的宽和高写160dp X 160dp,这个view再任何屏幕中尺寸大约都是1inch * 1inch。

但当,dpi不等于ppi,

dots和px不在对应,1dp 不等于 1/160inch,具体的对应关系不可控制,我们按照dp设置的宽高,也不可控制了。

上面有提到dp适配实质解决的问题是在不同屏幕显示的尺寸大小大约一致,但是这个是我们想要适配的效果么?

显然不是的,我们做APP应用开发适配的效果目标是要在各个屏幕上做到布局占百分比相同,即在不同屏幕上相对大小一致。

那dp适配存在的问题有哪些呢?

DP适配存在的问题:

1. 适配的效果不满足我们想要的不同屏幕相对屏幕大小一致,而是去适配的大小尺寸的绝对上的一致。

2. 对不同的物理尺寸的屏幕是没有做到适配效果的。

3. dp的值依赖于density


但density这个值是可被修改的,可以被各种人,通过各种途径进行修改:

http://blog.csdn.net/huangyabin001/article/details/40401279


好奇的同学可以在自己的app埋点进行采样对比,可以发现这个density多样的难以想象,这里不具体提供数据了~


我们不去细究这个值怎么改的,谁改的~


提出了这么多问题,既然DP适配这么多问题,那么,怎么适配是合理的呢?


屏幕分辨率百分比适配:

可以像web一样按照百分比适配,但是百分比只要参考屏幕做百分比,计算控件的宽高就可以了。


下一篇:Android屏幕适配 - 百分比(一)