Android屏幕適配總結

Android屏幕適配總結

前言

目錄

1

定義

使得某一元素在Android不同尺寸、不同分辨率的手機上具備相同的顯示效果


相關重要概念

屏幕尺寸

  • 含義:手機對角線的物理尺寸
  • 單位:英寸(inch),1英寸=2.54cm

Android手機常見的尺寸有5寸、5.5寸、6寸等等

屏幕分辨率

  • 含義:手機在橫向、縱向上的像素點數總和
  1. 一般描述成屏幕的"寬x高”=AxB
  2. 含義:屏幕在橫向方向(寬度)上有A個像素點,在縱向方向(高)有B個像素點
  3. 例子:1080x1920,即寬度方向上有1080個像素點,在高度方向上有1920個像素點
  • 單位:px(pixel),1px=1像素點

UI設計師的設計圖會以px作為統一的計量單位

  • Android手機常見的分辨率:320x480、480x800、720x1280、1080x1920(前兩者現在基本已經見不到了)

屏幕像素密度

  • 含義:每英寸的像素點數
  • 單位:dpi(dots per ich)

假設設備內每英寸有160個像素,那么該設備的屏幕像素密度=160dpi

  • 安卓手機對于每類手機屏幕大小都有一個相應的屏幕像素密度:
密度類型 代表的分辨率(px) 屏幕像素密度(dpi)
低密度(ldpi) 240x320 120
中密度(mdpi) 320x480 160
高密度(hdpi) 480x800 240
超高密度(xhdpi) 720x1280 320
超超高密度(xxhdpi) 1080x1920 480

屏幕尺寸、分辨率、像素密度三者關系

一部手機的分辨率是寬x高,屏幕大小是以寸為單位,那么三者的關系是:

2

密度無關像素(重點)

  • 含義:density-independentpixel,叫dp或dip,與終端上的實際物理像素點無關。
  • 單位:dp,可以保證在不同屏幕像素密度的設備上顯示相同的效果
  1. Android開發時用dp而不是px單位設置圖片大小,是Android特有的單位
  2. 場景:假如同樣都是畫一條長度是屏幕一半的線,如果使用px作為計量單位,那么在480x800分辨率手機上設置應為240px;在320x480的手機上應設置為160px,二者設置就不同了;如果使用dp為單位,在這兩種分辨率下,160dp都顯示為屏幕一半的長度。
  • dp與px的轉換

因為ui設計師給你的設計圖是以px為單位的,Android開發則是使用dp作為單位的,那么我們需要進行轉換:

密度類型 代表的分辨率(px) 屏幕密度(dpi) 換算(px/dp) 比例
低密度(ldpi) 240x320 120 1dp=0.75px 3
中密度(mdpi) 320x480 160 1dp=1px 4
高密度(hdpi) 480x800 240 1dp=1.5px 6
超高密度(xhdpi) 720x1280 320 1dp=2px 8
超超高密度(xxhdpi) 1080x1920 480 1dp=3px 12

在Android中,規定以160dpi(即屏幕分辨率為320x480)為基準:1dp=1px

獨立比例像素

  • 含義:scale-independent pixel,叫sp或sip
  • 單位:sp
  1. Android開發時用此單位設置文字大小,可根據用戶的偏好文字大小/字體大小首選項進行縮放
  2. 推薦使用12sp、14sp、18sp、22sp作為字體設置的大小,不推薦使用奇數和小數,容易造成精度的丟失問題;小于12sp的字體會太小導致用戶看不清

結論

所以,為了能夠進行不同屏幕像素密度的匹配,我們推薦:

  • 使用dp來代替px作為控件長度的統一度量單位
  • 使用sp作為文字的統一度量單位

可是,請看以下一種場景:

Nexus5的總寬度為360dp,我們現在在水平方向上放置兩個按鈕,一個是150dp左對齊,另外一個是200dp右對齊,那么中間留有10dp間隔;但假如同樣地設置在Nexus S(屏幕寬度是320dp),會發現,兩個按鈕會重疊,因為320dp<200+150dp

從上面可以看出,由于Android屏幕設備的多樣性,如果使用dp來作為度量單位,并不是所有的屏幕的寬度都具備相同的dp長度

再次明確,屏幕寬度和像素密度沒有任何關聯關系

所以說,dp解決了同一數值在不同分辨率中展示相同尺寸大小的問題(即屏幕像素密度匹配問題),但卻沒有解決設備尺寸大小匹配的問題。(即屏幕尺寸匹配問題)

當然,我們一開始討論的就是屏幕尺寸匹配問題,使用match_parent、wrap_content和weight,盡可能少用dp來指定控件的具體長寬,大部分的情況我們都是可以做到適配的。

那么該如何解決控件的屏幕尺寸和屏幕密度的適配問題呢?

從上面可以看出:

  • 因為屏幕密度(分辨率)不一樣,所以不能用固定的px
  • 因為屏幕寬度不一樣,所以要小心的用dp

因為本質上是希望使得布局組件在不同屏幕密度上顯示相同的像素效果,那么,之前是繞了個彎使用dp解決這個問題,那么到底能不能直接用px解決呢?

即根據不同屏幕密度,控件選擇對應的像素值大小

解決方案

  • 百分比適配方法
  • autoLayout

百分比適配方法

步驟:

  1. 以某一分辨率為基準,生成所有分辨率對應像素數列表
  2. 將生成像素數列表存放在res目錄下對應的values文件下
  3. 根據UI設計師給出設計圖上的尺寸,找到對應像素數的單位,然后設置給控件即可

詳細步驟請看: Android 屏幕適配方案

jar包下載地址: github

autoLayout

詳細步驟請看:github

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容