對Android中各個尺寸和屏幕適配的理解

Android中的尺寸爲何有這麼多參數?

px、dp、dpi、densityandroid

px 就不解釋了,下面解釋下其餘參數post

dpi

圖片來源 頭條

dpi:就是每英寸包含的像素的多少。爲何是英寸,不是釐米?由於是外國人定義的。設計

density & dp

爲何會出現density這個參數?

第一代andrid設備的dpi是160 cdn

可是隨着高分辨率的屏幕出現,每英寸中包含的像素遠遠不止160個,出現了240,320等屏幕。
爲了兼容這些高分辨率的屏幕,因而定義了density 和dp 這兩個參數。blog

用dpi=320舉例
以第一代android設備的dpi爲標準,density = 1
在dpi=320的設備上,density=2,即 density= 當前設備的dpi / 160(第一代android設備的dpi)圖片

density有啥用?

單獨的density 好像沒啥用,就是一個當前設別和第一代android設備dpi的比值。
因此,還有一個參數dp
dp,dp是android中與屏幕密度無關的單位,使用dp能夠不用關心當前設備的dpi究竟是多少。
爲何dp有這種功能?看看dp的定義: dp = px * densityget

因此,在dpi=160的設備上,density=1,1dp = 1px;
在dpi=320的設備上,density=2,1dp = 2px;it

這樣,使用dp作爲單位,就不用擔憂屏幕當前的dpi究竟是多少了io

關於屏幕適配

使用density+dp這種方式很好的解決的dpi不一致,沒法統一使用px去繪製各類UI的問題。可是卻沒有解決 UI設計圖和真實顯示不一致的問題。class

例如,如今市面上出現了各類奇奇怪怪的寬高比,16:9,4:3,22:19,23:19等等等等。
這些各類的寬高將會致使這樣的問題:
公司的UI基於480dp x 360dp 這樣的寬高的設計了交互圖,是4:3 。
可是若是遇到了 640dp x 360dp 這種16:9的分辨率,就有問題了,很明顯,原來設計圖的高度爲480dp,在4:3的手機上能夠鋪滿,在16:9的機子上就鋪不滿了。因此須要屏幕適配。

如何適配

通常來講,屏幕適配只能適配一個方向,豎直方向或者水平方向。 適配的方法有不少,介紹一種我比較喜歡的方法:今日頭條適配方法。juejin.im/post/5b7faf…

這種方案是經過動態修改density來實現的,簡單介紹一下。

例子 :設計圖 480dp x 360dp
適配方向:豎直適配,使得 480dp的顯示效果爲任意屏幕高度。

假設屏幕高度爲 h ,存在一個density 使得 480dp * density = h , density = h / 480。咱們只要把這個density設置到Resource的DisplayMetrics裏面就能夠完成豎直方向的適配了。

相關文章
相關標籤/搜索