現(xiàn)象
首先說(shuō)現(xiàn)象,大家都知道移動(dòng)端設(shè)備屏幕尺寸非常多,碎片化嚴(yán)重。尤其是Android,你會(huì)聽到很多種分辨率:480x800, 480x854, 540x960, 720x1280, 1080x1920,而且還有傳說(shuō)中的2K屏。近年來(lái)iPhone的碎片化也加劇了:640x960, 640x1136, 750x1334, 1242x2208。
不要被這些尺寸嚇倒。實(shí)際上大部分的app和移動(dòng)端網(wǎng)頁(yè),在各種尺寸的屏幕上都能正常顯示。說(shuō)明尺寸的問(wèn)題一定有解決方法,而且有規(guī)律可循。
像素密度
要知道,屏幕是由很多像素點(diǎn)組成的。之前提到那么多種分辨率,都是手機(jī)屏幕的實(shí)際像素尺寸。比如480x800的屏幕,就是由800行、480列的像素點(diǎn)組成的。每個(gè)點(diǎn)發(fā)出不同顏色的光,構(gòu)成我們所看到的畫面。而手機(jī)屏幕的物理尺寸,和像素尺寸是不成比例的。*典型的例子,iPhone 3gs的屏幕像素是320x480,iPhone 4s的屏幕像素是640x960。剛好兩倍,然而兩款手機(jī)都是3.5英寸的。
所以,我們要引入*重要的一個(gè)概念:像素密度,也就是PPI(pixels per inch)。這項(xiàng)指標(biāo)是連接數(shù)字世界與物理世界的橋梁。
Pixels per inch,準(zhǔn)確的說(shuō)是每英寸的長(zhǎng)度上排列的像素點(diǎn)數(shù)量。1英寸是一個(gè)固定長(zhǎng)度,等于2.54厘米,大約是食指*末端那根指節(jié)的長(zhǎng)度。像素密度越高,代表屏幕顯示效果越精細(xì)。Retina屏比普通屏清晰很多,就是因?yàn)樗南袼孛芏确艘槐丁?br /> 倍率與邏輯像素
再用iPhone 3gs和4s來(lái)舉例。假設(shè)有個(gè)郵件列表界面,我們不妨按照PC端網(wǎng)頁(yè)設(shè)計(jì)的思維來(lái)想象。3gs上大概只能顯示4-5行,4s就能顯示9-10行,而且每行會(huì)變得特別寬。但兩款手機(jī)其實(shí)是一樣大的。如果照這種方式顯示,3gs上剛剛好的效果,在4s上就會(huì)小到根本看不清字。
在現(xiàn)實(shí)中,這兩者效果卻是一樣的。這是因?yàn)镽etina屏幕把2x2個(gè)像素當(dāng)1個(gè)像素使用。比如原本44像素高的頂部導(dǎo)航欄,在Retina屏上用了88個(gè)像素的高度來(lái)顯示。導(dǎo)致界面元素都變成2倍大小,反而和3gs效果一樣了。畫質(zhì)卻更清晰。
在以前,iOS應(yīng)用的資源圖片中,同一張圖通常有兩個(gè)尺寸。你會(huì)看到文件名有的帶@2x字樣,有的不帶。其中不帶@2x的用在普通屏上,帶@2x的用在Retina屏上。只要圖片準(zhǔn)備好,iOS會(huì)自己判斷用哪張,Android道理也一樣。
由此可以看出,蘋果以普通屏為基準(zhǔn),給Retina屏定義了一個(gè)2倍的倍率(iPhone 6plus除外,它達(dá)到了3倍)。實(shí)際像素除以倍率,就得到邏輯像素尺寸。只要兩個(gè)屏幕邏輯像素相同,它們的顯示效果就是相同的。
Android的解決方法類似,但更復(fù)雜一些。因?yàn)锳ndroid屏幕尺寸實(shí)在太多,分辨率高低跨度非常大,不像蘋果只有那么幾款固定設(shè)備、固定尺寸。所以Android把各種設(shè)備的像素密度劃成了好幾個(gè)范圍區(qū)間,給不同范圍的設(shè)備定義了不同的倍率,來(lái)保證顯示效果相近。像素密度概念雖然重要,但用不著我們自己算,iOS與Android都幫我們算好了。
如圖所示,像素密度在120左右的屏幕歸為ldpi,160左右的歸為mdpi,以此類推。這樣,所有的Android屏幕都找到了自己的位置,并賦予了相應(yīng)的倍率:
ldpi [0.75倍]
mdpi [1倍]
hdpi [1.5倍]
xhdpi [2倍]
xxhdpi [3倍]
xxxhdpi [4倍]
各型號(hào)iPhone的倍率比較簡(jiǎn)單,我們后面會(huì)講到。那么Android手機(jī)那么多,具體怎么分?哪些手機(jī)是幾倍的倍率呢?我們先看一張表,這是友盟2014年10月到2015年03月的數(shù)據(jù):
就目前市場(chǎng)狀況而言,各種手機(jī)的分辨率可以這樣粗略判斷。雖然不全面,但至少在1年內(nèi)都還有一定的參考意義:
ldpi 如今已絕跡,不用考慮
mdpi [320x480](市場(chǎng)份額不足5%,新手機(jī)不會(huì)有這種倍率,屏幕通常都特別小)
hdpi [480x800、480x854、540x960](早年的低端機(jī),屏幕在3.5英寸檔位;如今的低端機(jī),屏幕在4.7-5.0英寸檔位)
xhdpi [720x1280](早年的中端機(jī),屏幕在4.7-5.0英寸檔位;如今的中低端機(jī),屏幕在5.0-5.5英寸檔位)
xxhdpi [1080x1920](早年的高端機(jī),如今的中高端機(jī),屏幕通常都在5.0英寸以上)
xxxhdpi [1440x2560](極少數(shù)2K屏手機(jī),比如Google Nexus 6)
自然地,以1倍的mdpi作為基準(zhǔn)。像素密度更高或者更低的設(shè)備,只需乘以相應(yīng)的倍率,就能得到與基準(zhǔn)倍率近似的顯示效果。
不過(guò)需要注意的是,Android設(shè)備的邏輯像素尺寸并不統(tǒng)一。比如兩種常見的屏幕480x800和1080x1920,它們分別屬于hdpi和xxhdpi。除以各自倍率1.5倍和3倍,得到邏輯像素為320x533和360x640。很顯然,后者更寬更高,能顯示更多內(nèi)容。所以,即使有倍率的存在,各種Android設(shè)備的顯示效果仍然無(wú)法做到完全一致。
不難發(fā)現(xiàn),真正決定顯示效果的,是邏輯像素尺寸。為此,iOS和Android平臺(tái)都定義了各自的邏輯像素單位。iOS的尺寸單位為pt,Android的尺寸單位為dp。說(shuō)實(shí)話,兩者其實(shí)是一回事。
單位之間的換算關(guān)系隨倍率變化:
1倍:1pt=1dp=1px(mdpi、iPhone 3gs)
1.5倍:1pt=1dp=1.5px(hdpi)
2倍:1pt=1dp=2px(xhdpi、iPhone 4s/5/6)
3倍:1pt=1dp=3px(xxhdpi、iPhone 6)
4倍:1pt=1dp=4px(xxxhdpi)
單位決定了我們的思考方式。在設(shè)計(jì)和開發(fā)過(guò)程中,應(yīng)該盡量使用邏輯像素尺寸來(lái)思考界面。設(shè)計(jì)Android應(yīng)用時(shí),有的設(shè)計(jì)師喜歡把畫布設(shè)為1080x1920,有的喜歡設(shè)成720x1280。給出的界面元素尺寸就不統(tǒng)一了。Android的*小點(diǎn)擊區(qū)域尺寸是48x48dp,這就意味著在xhdpi的設(shè)備上,按鈕尺寸至少是96x96px。而在xxhdpi設(shè)備上,則是144x144px。
無(wú)論畫布設(shè)成多大,我們?cè)O(shè)計(jì)的是基準(zhǔn)倍率的界面樣式,而且開發(fā)人員需要的單位都是邏輯像素。所以為了保證準(zhǔn)確高效的溝通,雙方都需要以邏輯像素尺寸來(lái)描述和理解界面,無(wú)論是在標(biāo)注圖還是在日常溝通中。不要再說(shuō)“底部標(biāo)簽欄的高度是96像素,我是按照xhdpi做的”這樣的話了。