Android手機(jī)的多種屏幕適配

2011-09-26 21:07:24來源:作者:

嚴(yán)格來說,作為讀者,你應(yīng)該帶著批判性質(zhì)的眼光來看這篇文章,因?yàn)檫@篇文章是一個(gè)尚未通讀Android官方開發(fā)資料《Supporting Multiple Screens》的純產(chǎn)品人員所寫,相關(guān)理解來源于零星的資料、實(shí)踐以及和開發(fā)人員的溝

嚴(yán)格來說,作為讀者,你應(yīng)該帶著批判性質(zhì)的眼光來看這篇文章,因?yàn)檫@篇文章是一個(gè)尚未通讀Android官方開發(fā)資料《Supporting Multiple Screens》的純產(chǎn)品人員所寫,相關(guān)理解來源于零星的資料、實(shí)踐以及和開發(fā)人員的溝通,此文章更多為目前盆地個(gè)人理解的總結(jié)。我會給自己定下目標(biāo),早日通讀官方資料,此文中的相關(guān)錯(cuò)誤,也請予以指正。

一、Android支持的多種屏幕

傳統(tǒng)意義上,一般是是這么認(rèn)為的:

ldpi: 對應(yīng)分辨率240×320

mdpi: 對應(yīng)分辨率320×480

hdpi:對應(yīng)分辨率480×800或480×854

但實(shí)際上沒有這么簡單,直接看官方資料的下標(biāo),可以看到其實(shí)ldpi一樣由480×800,甚至還有1024×600

  低密度(ldpi 120) 中密度(mdpi 160) 高密度(hdpi 240) 超高密度(320 xhdpi)
小屏幕 QVGA (240×320)   480×640  
中屏幕 WQVGA400 (240×400)
WQVGA432 (240×432)
HVGA (320×480) WVGA800 (480×800)
WVGA854 (480×854)
600×1024
640×960
大屏幕 WVGA800** (480×800)
WVGA854** (480×854)
WVGA800* (480×800)
WVGA854* (480×854)
600×1024
   
超大屏幕 1024×600 WXGA (1280×800)
1024×768
1280×768
1536×1152
1920×1152
1920×1200
2048×1536
2560×1536
2560×1600

二、如何分辨是ldpi、mdpi、hdpi?

為什么要分辨率ldpi、mdpi、hdpi?我的理解,是為了要在不同的屏幕密度下取得最好的顯示效果。

從上一段來看,通過分辨率來看并不是很靠譜,那怎么樣才靠譜?其實(shí),只要我們知道屏幕分辨率、屏幕尺寸(對角線長度),就可以算出相應(yīng)的屏幕密度,從而根據(jù)其范圍得出屬于那種屏幕密度。

我們可以根據(jù)長或者根據(jù)寬來計(jì)算出dpi,計(jì)算公式為:

dpi=寬/((尺寸^2 * 寬^2)/(寬^2 + 高^2))^(1/2)

= 長/((尺寸^2 * 長^2)/(寬^2 + 高^2))^(1/2)

此計(jì)算公式可以在excel中予以計(jì)算。

大概計(jì)算方法如下,以寬為例:

1.比如分辨率為320×480,則長寬比為1:1.5

2.比如屏幕尺寸為3.6”,則根據(jù)勾股定理,”長^2+寬^2=3.6^2″,即”寬^2+2.25*寬^2=12.96″,得出”寬^2=12.96/3.25″,則”寬=(12.96/3.25)^(1/2)= 1.9969″

3.寬為320px,分布在1.9969”上,因此密度為320/1.9969=160.2467

4.因此此密度為mdpi的密度

注:

1.此部分參考文章為:http://blog.sina.com.cn/s/blog_7377a8a20100qydh.html

2.兩款計(jì)算dpi的應(yīng)用

https://market.android.com/details?id=appinventor.ai_wenjiun1024.DPICalculato

https://market.android.com/details?id=com.andy.dpi

三、粗略的分辨率ldpi 、mdpi、hdpi

套用老資料,其實(shí)傳統(tǒng)意義上的通過分辨率判斷手機(jī)dpi,還是比較靠譜的:

ldpi: 對應(yīng)分辨率240×320

mdpi: 對應(yīng)分辨率320×480

hdpi:對應(yīng)分辨率480×800或480×854

為什么呢?因?yàn)閘dpi如果要是320×480,則需要4.8寸的屏幕,如果是480×800,則需要7.8寸的屏幕,如果mdpi是480×800,則需要5.2寸的屏幕,一般的手機(jī)屏幕不會這么大,所以還算靠譜。

當(dāng)然,如果是分辨android pad的dpi,建議還是算一下吧。

四、如何適配之9-patch?

官方資料:http://developer.android.com/guide/developing/tools/draw9patch.html

簡單來說,如果你的圖片資源是可以拉伸的而不會變形或者模糊的,則完全可以使用9-patch的格式,而不用為不同的dpi提供不同的圖片資源。

此格式經(jīng)常用在背景性質(zhì)的圖片資源中。

android開發(fā)包提供了9-patch的制作工具,上方的劃線指明橫向可以拉伸的區(qū)域,左方的劃線指明縱向可以拉伸的區(qū)域,下方的劃線指明水平居中的區(qū)域,右方的劃線指明垂直居中的區(qū)域。

在盆地的理解中,一般提供hdpi大小的圖片,并制作為9-patch格式,此時(shí)的拉伸在mdpi、ldpi上基本都不會帶來問題。

這部分網(wǎng)上有不少資料,這里就不再贅述了,上述的描述是為了盆地日后便于想起和理解。

五、如何適配指圖標(biāo)和其他圖片

除了指明拉伸區(qū)域拉伸不變形的圖片外,類似圖標(biāo)或者其他會變形的圖片資源,最佳情況下需要分別針對不同的dpi提供不同的圖片。

此處特別需要注意的是,假設(shè)不考慮xhdpi的支持,hdpi、mdpi、ldpi的支持,需要考慮相應(yīng)的比例,即1.5:1:0.75,需要在相應(yīng)比例關(guān)系下保持整數(shù)的像素值,否則可能會產(chǎn)生模糊的情況。

舉個(gè)具體例子,某個(gè)圖標(biāo)在hdpi下大小為48×48,則mdpi和ldpi下分別為32×32和24×24,如果此圖標(biāo)在hdpi設(shè)定為 50×50,則mdpi下50無法整除1.5,因此mdpi下圖標(biāo)不論圖標(biāo)設(shè)定為33×33還是34×34都會模糊(可能獨(dú)立指定可以避免此情況,此部分不太了解)。

六、菜單圖標(biāo)和應(yīng)用圖標(biāo)

這一部分在官方資料中描述的很全面,只是不少應(yīng)用開發(fā)者沒有按照規(guī)范來,比如桌面圖標(biāo)的在hdpi上分辨率雖然定義的是72×72,但實(shí)際上應(yīng)該只占60×60(如果是正方形,則應(yīng)該是56×56),而不少應(yīng)用直接把圖標(biāo)設(shè)定為72×72,所以會發(fā)現(xiàn)android中很多圖標(biāo)比系統(tǒng)的圖標(biāo)大一些,就是這個(gè)緣故。

這一部分就直接參照官方文檔吧,做法上也就是做三份,只是需要遵照文檔來。http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

七、小結(jié)

作為產(chǎn)品人員,了解這個(gè)的目的,是為了向UI人員協(xié)調(diào)相應(yīng)的UI資源,以及和開發(fā)保持順暢的溝通,如果不了解這個(gè),可能事倍功半,所以,作為產(chǎn)品人員,還是了解下吧。

恩,暫時(shí)就這些了,等俺通讀了官方文檔后,再來補(bǔ)充吧。上述描述中錯(cuò)誤的地方,也請不吝賜教。

(完)

版權(quán)聲明:轉(zhuǎn)載時(shí)請以超鏈接形式標(biāo)明文章原始出處和作者信息
本文鏈接:http://www.penddy.com/a-variety-of-screen-adaptation-of-android.html

關(guān)鍵詞:Android手機(jī)

贊助商鏈接: