1. 程式人生 > >Android螢幕適配 - DP適配存在問題詳解

Android螢幕適配 - DP適配存在問題詳解

接下來我們針對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這個值是可被修改的,可以被各種人,通過各種途徑進行修改:

好奇的同學可以在自己的app埋點進行取樣對比,可以發現這個density多樣的難以想象,這裡不具體提供資料了~

我們不去細究這個值怎麼改的,誰改的~

提出了這麼多問題,既然DP適配這麼多問題,那麼,怎麼適配是合理的呢?

螢幕解析度百分比適配:

可以像web一樣按照百分比適配,但是百分比只要參考螢幕做百分比,計算控制元件的寬高就可以了。