Android屏幕大小适配问题解决
轉(zhuǎn)載:
一、一些基本概念
1、長(zhǎng)度(真實(shí)長(zhǎng)度):英寸、inch
2、分辨率:density 每英寸像素?cái)?shù) dpi(密度)
3、像素:px
4、dip的公式:px /dip=dpi/160 所以 dip 類似于英寸、長(zhǎng)度(dp=dip,sp類似于dip) dip=160*inch
5、相對(duì)分辨率=長(zhǎng)px*寬px
二、平時(shí)我們一些概念的混淆
1、平時(shí)我們說(shuō) 手機(jī)的分辨率是 320*480的,其實(shí)的這里的分辨率是相對(duì)分辨率
意思是:水平方向上的像素?cái)?shù)是320,垂直方向上像素?cái)?shù)是480,
分辨率是160(默認(rèn)是160,意思是每英寸像素?cái)?shù)160)
那么水平方向:320 /160=2英寸
垂直方向:480/160=3英寸
于是乎 屏幕對(duì)角線 是根號(hào)下4*9=3.6(這就是常說(shuō)的3.6英寸屏幕)
2、說(shuō)一個(gè)手機(jī)的屏幕參數(shù)有三個(gè):長(zhǎng)寬像素之積(相對(duì)分辨率)、真實(shí)分辨率、對(duì)角線長(zhǎng)度(真實(shí)分辨率默認(rèn)是160所以不常說(shuō),如果不是160你可以通過另外兩個(gè)參數(shù)求出真實(shí)分辨率)
3、模擬器的分辨率都是160,所以像素越大,屏越大
4、l、m、h 三個(gè)文件夾是按 真是分辨率dpi 來(lái)對(duì)應(yīng)找文件的。
5、有三種方案解決屏幕適配
(1)按像素比 y/開發(fā)時(shí)用的屏幕像素=x/用戶設(shè)備像素
(2)按長(zhǎng)度 用dip(假設(shè)屏幕尺寸基本不變)
(3)按密度 放在l、m、h文件夾(假設(shè)屏幕尺寸基本不變,dpi越大 px越大)
6、如果手機(jī)是hdpi,但hdpi里沒有東西,l里有東西,程序就會(huì)去l里找圖片并且把它按比例放大。
7、最全的辦法:?jiǎn)为?dú)適配
屏幕分辨率:1024x600
density:1(160)
文件夾:values-mdpi-1024x600
屏幕分辨率:1024x600
density:1.5(240)
文件夾:values-hdpi-683x400由1024/1.5 600/1.5得到,需要四舍五入。
屏幕分辨率:800x480
density:1(160)
文件夾:values-mdpi-800x480
屏幕分辨率:800x480
density:1.5(240)
文件夾:values-hdpi-533x320由800/1.5 480/1.5得到,需要四舍五入。
以此類推
一般情況下需要?jiǎng)?chuàng)建出values 、values-mdpi 、 values-hdpi文件夾,以備在一些沒有規(guī)定的尺寸屏幕上找不到資源的情況。
8、我的原則,能用拉伸圖片的就拉伸、能用相對(duì)布局的就用相對(duì)布局、能用代碼計(jì)算寬度就代碼計(jì)算。
0.75 _1_ 1.5_ 2_ 2.4 3
240_ 320_ 480_ (xhdpi)640*960_ (xlarge)768*1280 (xlarge)
res/drawable下的文件會(huì)做失真壓縮
res/drawable-nodpi下的文件不做任何處理
我的處理是:
drawable-xhdpi是適應(yīng)現(xiàn)在的大屏手機(jī),三星9250就是320dpi(但它確是1280*720的)
drawable-xlarge是適配平板的
版權(quán)聲明:轉(zhuǎn)載時(shí)請(qǐng)以超鏈接形式標(biāo)明文章原始出處和作者信息
本文鏈接:http://www.penddy.com/a-variety-of-screen-adaptation-of-android.html
嚴(yán)格來(lái)說(shuō),作為讀者,你應(yīng)該帶著批判性質(zhì)的眼光來(lái)看這篇文章,此文章依據(jù)本人對(duì)Android官方開發(fā)資料《Supporting Multiple Screens》的閱讀、實(shí)踐以及和開發(fā)人員的溝通形成,內(nèi)容更多為目前盆地個(gè)人理解的總結(jié)。
一、Android支持的多種屏幕
傳統(tǒng)意義上,一般是是這么認(rèn)為的:
ldpi: 對(duì)應(yīng)分辨率240×320
mdpi: 對(duì)應(yīng)分辨率320×480
hdpi:對(duì)應(yīng)分辨率480×800或480×854
但實(shí)際上沒有這么簡(jiǎn)單,直接看官方資料的下標(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?我的理解,是為了要在不同的屏幕密度下取得最好的顯示效果。
從上一段來(lái)看,通過分辨率來(lái)看并不是很靠譜,那怎么樣才靠譜?其實(shí),只要我們知道屏幕分辨率、屏幕尺寸(對(duì)角線長(zhǎng)度),就可以算出相應(yīng)的屏幕密度,從而根據(jù)其范圍得出屬于那種屏幕密度。
我們可以根據(jù)長(zhǎng)或者根據(jù)寬來(lái)計(jì)算出dpi,計(jì)算公式為:
dpi=寬/((尺寸^2 * 寬^2)/(寬^2 + 高^2))^(1/2)
= 長(zhǎng)/((尺寸^2 * 長(zhǎng)^2)/(寬^2 + 高^2))^(1/2)
此計(jì)算公式可以在excel中予以計(jì)算。
大概計(jì)算方法如下,以寬為例:
1.比如分辨率為320×480,則長(zhǎng)寬比為1:1.5
2.比如屏幕尺寸為3.6”,則根據(jù)勾股定理,”長(zhǎng)^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: 對(duì)應(yīng)分辨率240×320
mdpi: 對(duì)應(yīng)分辨率320×480
hdpi:對(duì)應(yīng)分辨率480×800或480×854
為什么呢?因?yàn)閘dpi如果要是320×480,則需要4.8寸的屏幕,如果是480×800,則需要7.8寸的屏幕,如果mdpi是480×800,則需要5.2寸的屏幕,一般的手機(jī)屏幕不會(huì)這么大,所以還算靠譜。
當(dāng)然,如果是分辨android pad的dpi,建議還是算一下吧。
四、如何適配之9-patch?
官方資料:http://developer.android.com/guide/developing/tools/draw9patch.html
簡(jiǎn)單來(lái)說(shuō),如果你的圖片資源是可以拉伸的而不會(huì)變形或者模糊的,則完全可以使用9-patch的格式,而不用為不同的dpi提供不同的圖片資源。
此格式經(jīng)常用在背景性質(zhì)的圖片資源中。
android開發(fā)包提供了9-patch的制作工具,上方的劃線指明橫向可以拉伸的區(qū)域,左方的劃線指明縱向可以拉伸的區(qū)域,下方的劃線指明水平居中的區(qū)域,右方的劃線指明垂直居中的區(qū)域。
在盆地的理解中,一般提供hdpi大小的圖片,并制作為9-patch格式,此時(shí)的拉伸在mdpi、ldpi上基本都不會(huì)帶來(lái)問題。
這部分網(wǎng)上有不少資料,這里就不再贅述了,上述的描述是為了盆地日后便于想起和理解。
五、如何適配指圖標(biāo)和其他圖片
除了指明拉伸區(qū)域拉伸不變形的圖片外,類似圖標(biāo)或者其他會(huì)變形的圖片資源,最佳情況下需要分別針對(duì)不同的dpi提供不同的圖片。
此處特別需要注意的是,假設(shè)不考慮xhdpi的支持,hdpi、mdpi、ldpi的支持,需要考慮相應(yīng)的比例,即1.5:1:0.75,需要在相應(yīng)比例關(guān)系下保持整數(shù)的像素值,否則可能會(huì)產(chǎn)生模糊的情況。
舉個(gè)具體例子,某個(gè)圖標(biāo)在hdpi下大小為48×48,則mdpi和ldpi下分別為32×32和24×24,如果此圖標(biāo)在hdpi設(shè)定為
50×50,則mdpi下50無(wú)法整除1.5,因此mdpi下圖標(biāo)不論圖標(biāo)設(shè)定為33×33還是34×34都會(huì)模糊(可能獨(dú)立指定可以避免此情況,此部分
不太了解)。
六、菜單圖標(biāo)和應(yīng)用圖標(biāo)
這一部分在官方資料中描述的很全面,只是不少應(yīng)用開發(fā)者沒有按照規(guī)范來(lái),比如桌面圖標(biāo)的在hdpi上分辨率雖然定義的是72×72,但實(shí)際上應(yīng)該只
占60×60(如果是正方形,則應(yīng)該是56×56),而不少應(yīng)用直接把圖標(biāo)設(shè)定為72×72,所以會(huì)發(fā)現(xiàn)android中很多圖標(biāo)比系統(tǒng)的圖標(biāo)大一些,就
是這個(gè)緣故。
這一部分就直接參照官方文檔吧,做法上也就是做三份,只是需要遵照文檔來(lái)。
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)品人員,還是了解下吧。
上述描述中錯(cuò)誤的地方,請(qǐng)不吝賜教。
總結(jié)
以上是生活随笔為你收集整理的Android屏幕大小适配问题解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡额度太低怎么办?这几个提额技巧不可
- 下一篇: 程序员教你清理干净办公电脑中个人帐号及信