Android屏幕適配總結(jié)

Android屏幕適配總結(jié)

前言

目錄

1

定義

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


相關(guān)重要概念

屏幕尺寸

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

Android手機(jī)常見(jiàn)的尺寸有5寸、5.5寸、6寸等等

屏幕分辨率

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

UI設(shè)計(jì)師的設(shè)計(jì)圖會(huì)以px作為統(tǒng)一的計(jì)量單位

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

屏幕像素密度

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

假設(shè)設(shè)備內(nèi)每英寸有160個(gè)像素,那么該設(shè)備的屏幕像素密度=160dpi

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

屏幕尺寸、分辨率、像素密度三者關(guān)系

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

2

密度無(wú)關(guān)像素(重點(diǎn))

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

因?yàn)閡i設(shè)計(jì)師給你的設(shè)計(jì)圖是以px為單位的,Android開(kāi)發(fā)則是使用dp作為單位的,那么我們需要進(jìn)行轉(zhuǎn)換:

密度類型 代表的分辨率(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中,規(guī)定以160dpi(即屏幕分辨率為320x480)為基準(zhǔn):1dp=1px

獨(dú)立比例像素

  • 含義:scale-independent pixel,叫sp或sip
  • 單位:sp
  1. Android開(kāi)發(fā)時(shí)用此單位設(shè)置文字大小,可根據(jù)用戶的偏好文字大小/字體大小首選項(xiàng)進(jìn)行縮放
  2. 推薦使用12sp、14sp、18sp、22sp作為字體設(shè)置的大小,不推薦使用奇數(shù)和小數(shù),容易造成精度的丟失問(wèn)題;小于12sp的字體會(huì)太小導(dǎo)致用戶看不清

結(jié)論

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

  • 使用dp來(lái)代替px作為控件長(zhǎng)度的統(tǒng)一度量單位
  • 使用sp作為文字的統(tǒng)一度量單位

可是,請(qǐng)看以下一種場(chǎng)景:

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

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

再次明確,屏幕寬度和像素密度沒(méi)有任何關(guān)聯(lián)關(guān)系

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

當(dāng)然,我們一開(kāi)始討論的就是屏幕尺寸匹配問(wèn)題,使用match_parent、wrap_content和weight,盡可能少用dp來(lái)指定控件的具體長(zhǎng)寬,大部分的情況我們都是可以做到適配的。

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

從上面可以看出:

  • 因?yàn)槠聊幻芏龋ǚ直媛剩┎灰粯?,所以不能用固定的px
  • 因?yàn)槠聊粚挾炔灰粯?,所以要小心的用dp

因?yàn)楸举|(zhì)上是希望使得布局組件在不同屏幕密度上顯示相同的像素效果,那么,之前是繞了個(gè)彎使用dp解決這個(gè)問(wèn)題,那么到底能不能直接用px解決呢?

即根據(jù)不同屏幕密度,控件選擇對(duì)應(yīng)的像素值大小

解決方案

  • 百分比適配方法
  • autoLayout

百分比適配方法

步驟:

  1. 以某一分辨率為基準(zhǔn),生成所有分辨率對(duì)應(yīng)像素?cái)?shù)列表
  2. 將生成像素?cái)?shù)列表存放在res目錄下對(duì)應(yīng)的values文件下
  3. 根據(jù)UI設(shè)計(jì)師給出設(shè)計(jì)圖上的尺寸,找到對(duì)應(yīng)像素?cái)?shù)的單位,然后設(shè)置給控件即可

詳細(xì)步驟請(qǐng)看: Android 屏幕適配方案

jar包下載地址: github

autoLayout

詳細(xì)步驟請(qǐng)看:github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容