Android屏幕適配-基礎(chǔ)篇
Android屏幕適配-應(yīng)用篇
重要概念
什么是屏幕尺寸、屏幕分辨率(px)、屏幕像素密度(dpi)?
什么是dp、dip、sp?dp與px的轉(zhuǎn)換?
在下面的內(nèi)容中我們將介紹這些概念。
一、什么是屏幕尺寸、屏幕分辨率(px)、屏幕像素密度(dpi)以及三者關(guān)系?
1、屏幕尺寸
含義:手機(jī)對(duì)角線的物理尺寸
單位:英寸(inch),1英寸=2.54cm
Android手機(jī)常見(jiàn)的尺寸有5寸、5.5寸、6寸等等
2、屏幕分辨率(px)
含義:手機(jī)在橫向、縱向上的像素點(diǎn)數(shù)總和,一般描述成屏幕的"寬x高”=AxB
單位:px(pixel),1px=1像素點(diǎn)
UI設(shè)計(jì)師的設(shè)計(jì)圖會(huì)以px作為統(tǒng)一的計(jì)量單位
Android手機(jī)常見(jiàn)的分辨率:320x480、480x800、720x1280、1080x1920、2560x1440
3、屏幕像素密度(dpi)
屏幕像素密度是指每英寸上的像素點(diǎn)數(shù),單位是dpi,即“dot per inch”的縮寫(xiě)。屏幕像素密度與屏幕尺寸和屏幕分辨率有關(guān),在單一變化條件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
4、三者關(guān)系
一部手機(jī)的分辨率是寬x高,屏幕大小是以寸為單位,那么三者的關(guān)系是:

例如:假設(shè)一部手機(jī)的分辨率是1080x1920(px),屏幕大小是5寸,問(wèn)該手機(jī)的像素密度是多少?

二、什么是dp、dip、sp?dp與px的轉(zhuǎn)換?
1、密度無(wú)關(guān)像素(dp、dpi)
含義:density-independent pixel,叫dp或dip,與終端上的實(shí)際物理像素點(diǎn)無(wú)關(guān)。Android開(kāi)發(fā)時(shí)用dp而不是px單位設(shè)置控件大小,是Android特有的單位
單位:dp,可以保證在不同屏幕像素密度的設(shè)備上顯示相同的效果
場(chǎng)景:假如同樣都是畫(huà)一條長(zhǎng)度是屏幕一半的線,如果使用px作為計(jì)量單位,那么在480x800分辨率手機(jī)上設(shè)置應(yīng)為240px;在320x480的手機(jī)上應(yīng)設(shè)置為160px,二者設(shè)置就不同了;如果使用dp為單位,在這兩種分辨率下,160dp都顯示為屏幕一半的長(zhǎng)度。
2、獨(dú)立比例像素(sp)
含義:scale-independent pixel,叫sp或sip
單位:sp
Android開(kāi)發(fā)時(shí)用此單位設(shè)置文字大小,可根據(jù)字體大小首選項(xiàng)進(jìn)行縮放
推薦使用12sp、14sp、18sp、22sp作為字體設(shè)置的大小,不推薦使用奇數(shù)和小數(shù),容易造成精度的丟失問(wèn)題;小于12sp的字體會(huì)太小導(dǎo)致用戶(hù)看不清
3、dp與px的轉(zhuǎn)換
android中的dp在渲染前會(huì)將dp轉(zhuǎn)為px,計(jì)算公式:
density = dpi / 160;
px = density * dp;
px = dp * (dpi / 160);
dp=px / (dpi / 160)
而dpi是根據(jù)屏幕真實(shí)的分辨率和尺寸來(lái)計(jì)算的,每個(gè)設(shè)備都可能不一樣的。
因?yàn)閡i設(shè)計(jì)師給你的設(shè)計(jì)圖是以px為單位的,Android開(kāi)發(fā)則是使用dp作為單位的,那么我們需要進(jìn)行轉(zhuǎn)換:
| 密度類(lèi)型 | 代表的分辨率(px) | 屏幕密度(dpi) | 換算(px/dp) | 密度(density) |
|---|---|---|---|---|
| 低密度(ldpi) | 240x320 | 120 | 1dp=0.75px | 0.75 |
| 中密度(mdpi) | 320x480 | 160 | 1dp=1px | 1 |
| 高密度(hdpi) | 480x800 | 240 | 1dp=1.5px | 1.5 |
| 超高密度(xhdpi) | 720x1280 | 320 | 1dp=2px | 2 |
| 超超高密度(xxhdpi) | 1080x1920 | 480 | 1dp=3px | 3 |
| 超超超高密度(xxxhdpi) | 3840*2160 | 640 | 1dp=4px | 4 |
在Android中,規(guī)定以160dpi(即屏幕分辨率為320x480)為基準(zhǔn):1dp=1px,比如設(shè)計(jì)圖是以720x1280 dpi:320為基準(zhǔn),某控件標(biāo)注寬為500px,那么我們?cè)趚ml文件中設(shè)置該控件的寬時(shí),應(yīng)設(shè)置為:500/(320/160) = 250dp。
三、關(guān)于ldpi,mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi
比如設(shè)計(jì)圖是以720x1280px,dpi:320為基準(zhǔn),標(biāo)注的某圖片大小為200*200px,那么應(yīng)獲取如下大小的圖片(如獲取最好的顯示效果,所有的尺寸都需要獲?。?/p>
| Android手機(jī)屏幕標(biāo)準(zhǔn) | 對(duì)應(yīng)圖片尺寸標(biāo)準(zhǔn) |
|---|---|
| xxxhdpi 3840*2160 | 400*400 |
| xxhdpi 1920*1080 | 300*300 |
| xhdpi 1280*720 | 200*200(設(shè)計(jì)圖基準(zhǔn)) |
| hdpi 480*800 | 150*150 |
| mdpi 480*320 | 100*100 |