一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

android屏幕自適應(yīng)研究

 JUST SO LAZY 2012-12-17

android屏幕自適應(yīng)研究

    

本文原創(chuàng)http://blog.csdn.net/yanbin1079415046,轉(zhuǎn)載請(qǐng)注明出處。

    最近公司做的項(xiàng)目中涉及到屏幕自適應(yīng)的問(wèn)題。由于做的是電視版的項(xiàng)目,因此屏幕自適應(yīng)問(wèn)題更為突出。想起之前曾經(jīng)寫過(guò)一篇這樣的文章作為備忘。今天特意在 電腦上翻了一下,把它找了出來(lái),順便也把當(dāng)時(shí)參考過(guò)的文章給找了出來(lái)。這里分享給大家,希望對(duì)大家有所幫助,有錯(cuò)誤的地方還忘各位指正。

   參考的文章地址如下,在此對(duì)兩位作者表示感謝。

http://blog.csdn.net/beihai1212/article/details/7026327  

http://blog.csdn.net/moruite/article/details/6028547

     首先我們了解一下屏幕分辨率,像素密度,drawablelayout的匹配規(guī)則等問(wèn)題,然后會(huì)給出屏幕自適應(yīng)的解決方案(官方文檔上也有)。

  

1、基本概念

in:即英寸,它表示的是屏幕的物理尺寸。1in = 2.54cm,而且我們平時(shí)所說(shuō)的尺寸是指可視屏幕的對(duì)角線的長(zhǎng)度,并不是屏幕面積。因此,比如我們說(shuō)一個(gè)手機(jī)是3.2英尺,也就 是說(shuō),它的可視區(qū)域的對(duì)角線的長(zhǎng)度是:3.2*2.54 = 8.128cm。

分辨率:它指的是屏幕垂直方向和水平方向的像素個(gè)數(shù)。比如分辨率是:480*320,也就是說(shuō): 水平方向(寬)有320個(gè)像素點(diǎn)。豎直方向(高)有480個(gè)像素點(diǎn)。

dpi:像素密度,即dots per inch,指的是每英寸的像素?cái)?shù)。160dpi指手機(jī)水平或垂直方向 上每英寸距離有160個(gè)像素點(diǎn)。假定設(shè)備分辨率為320*240,屏幕長(zhǎng)2英寸寬1.5 寸,dpi=320/2=240/1.5=160。Android中主要有三種像素密度:120,160240。它就是 DisplayMetrics類中屬性densityDpi的值

density:密度,指每平方英寸中的像素?cái)?shù)。計(jì)算方式:density=分辨率/屏幕尺寸。android中,160dpi的密度為1.0,120dpi的密度為0.75240dpi的密度為1.5。它就是 DisplayMetrics類中屬性density的值

px:即pixel,像素。它在不同設(shè)備上的顯示效果相同。這里的“相同”指的是像素不會(huì)變。第一個(gè)問(wèn)題:比如一個(gè)button的寬是100px,那么無(wú)論是在120,160,還是240像素密度 的設(shè)備上,它的寬都應(yīng)該顯示100px。,比如我們有三個(gè)480x320的手機(jī),它的dpi 分 別為:120,160,180。那么此時(shí),如果它在160dpi的手機(jī)上顯示3厘米,在120dpi 手機(jī)上就會(huì)顯示(4/3)*3厘米,就比160dpi上顯示的要大了,同理,在240dpi上顯示的 按鈕看起來(lái)就更窄了。而這里我們的手機(jī)是一樣大的,這就出現(xiàn)了不適應(yīng)屏幕的問(wèn)題。

這就是我們不推薦不使用px的原因之一,因?yàn)?/span>px與手機(jī)的像素密度有直接的關(guān)系。

第二個(gè)問(wèn)題:比如我們有三個(gè)手機(jī),它的dpi都為120,而屏幕尺寸分別為【寬度為更 小的那個(gè)值】:320*240,480*320,640*480。我們需要在屏幕的第一行放一個(gè)按 鈕,讓它 占滿屏幕。設(shè)計(jì)的時(shí)候,我們?cè)?span style="font-family:Times New Roman">480*320的手機(jī)上設(shè)置好了大小,比如為180px,當(dāng)把 這個(gè)程序運(yùn)行在320*240的手機(jī)上時(shí),而明顯,這個(gè)按鈕是顯示不全的,而在640*480 的手機(jī)上它又是占不滿的。這就是我們不推薦不使用px的原因之二,因?yàn)?/span>px與手機(jī)的屏幕有直接的關(guān)系。

由于有上面的問(wèn)題,android中我們一般就推薦使用dip,而不使用px。

dpdpdip的縮寫,它是device-independent pixel,即設(shè)備獨(dú)立像素。它是一個(gè)與像素密 度和屏幕尺寸都無(wú)關(guān)的單位。在不同的屏幕上有不同的顯示效果。它與像素px的換算 公式為:px = (像素密度/160)*dp。

上面已經(jīng)說(shuō)過(guò),android中常用的像素密度有120,160,240。那么在160dpi的設(shè)備上, 1px=1dp。

解決第一個(gè)問(wèn)題:還是三個(gè)480x320的手機(jī),它的dpi 分別為:120,160,180。我們將 一個(gè)按鈕的寬度設(shè)置為:100dp。根據(jù)上面的換算單位,它在160dpi的手機(jī)上顯示的像 素為100px,即上面的3cm。那么在120dpi的手機(jī)上它顯示的像素就為(3/4)*100px,換 算成厘米為:(4/3)*(3/4),還是相當(dāng)于在160dpi上的顯示寬度,即3cm。同理可得到在 240dpi的設(shè)備上,它的顯示寬度也為3厘米。

sp放大像素,即ScaledPixels。它主要用于字體的顯示,他會(huì)根據(jù)像素密度來(lái)放大或者縮 寫字體。

2、android中的drawablelayout

對(duì)于API 1.6及以上版本的應(yīng)用程序中,可以使用drawable,drawable-hdpidrawable-ldpi,drawable-mdpi,drawable-xdpi的文件夾來(lái)在不同的像素密度下使用的圖片。使用layout-small,layout-normal,layout-large,layout-xlarge來(lái)存放不同屏幕尺寸下使用的布局文件。其在android應(yīng)用程序中所對(duì)應(yīng)的實(shí)際設(shè)備的轉(zhuǎn)換關(guān)系如下圖:

Android系統(tǒng)對(duì)drawabledrawable-hdpi,drawable-ldpi,drawable-mdpi,drawable-xdpi中存放的圖片進(jìn)行選擇的規(guī)則是:先去匹配此密度下對(duì)應(yīng)的圖片資源,如果沒(méi)有,就去使用drawable目錄下的圖片資源。比如,有一個(gè)設(shè)備像素密度是240dpi,那么此時(shí)它將優(yōu)先使用drawable-hdpi目錄下的圖片資源,但是如果drawable-hdpi目錄不存在,它就會(huì)去使用drawable目錄下的資源文件。

android中除了使用上面的五種布局外,還可以使用layout-axblayout-swadp的方式來(lái)存放布局文件。比如layout-480x360layout-sw600dp。經(jīng)過(guò)測(cè)試,總結(jié)出如下的匹配規(guī)則:

假設(shè)在某個(gè)應(yīng)用程序中存在如下的布局文件:

Layout-xlarge,layout-large,layout-normal,layout-smalllayout,layout-sw500dp,layout-1280x800layout-1280x888,layout-1280x750,layout-sw1280dplayout-sw1dp。

對(duì)于所有版本的API2.2,3.0,3.24.0測(cè)試均是如下結(jié)果):

A、首先去匹配layout-xlarge,接著是layout-large,然后是layout-normal,最后是layout-small。上述中的任一一個(gè)可以匹配成功,布局文件就匹配成功。

B、如果匹配未成功,就會(huì)去找layout-swadp這個(gè)文件,如果可以找到adp能比屏幕寬度小的,就匹配成功。即使你的屏幕是:1280x800,如果layout中有layout-sw1dp,且第一個(gè)條件未被匹配,而layout-swadp又只有這一個(gè),那么此時(shí),不管其他還有什么布局文件,layout-sw1dp都會(huì)去匹配,即使你的布局文件中有layout-1280x800。

C、如果上面兩中情況都未匹配到,此時(shí)就要分版本來(lái)匹配layout-axb文件了:

3.2以前的版本:

只有當(dāng)layout-axb完全匹配時(shí),才去使用這個(gè)布局文件,否則使用layout。也就是說(shuō),我的屏幕是1280x800api版本是1.6-3.0,那么此時(shí)如果布局文件中有layout-1280x750而沒(méi)有layou-1280x800,也就說(shuō)不能完全匹配,那么系統(tǒng)會(huì)選用layout這個(gè)布局文件來(lái)進(jìn)行匹配。

3.2以后的版本:

如果layout-axb能完全匹配,就使用這個(gè)布局文件,如果不能匹配,就去找ab都要比它的屏幕小,并且最接近的那個(gè)布局文件。但是前提條件是:如果是大屏幕,你給的布局文件尺寸比normal的大,如果是小屏幕,你給的布局文件比normal的小。

3、屏幕自適應(yīng)解決方法

A、使用wrap-contentmatch-parentapi2.2之前使用fill-parent),即寬高根據(jù)內(nèi)容調(diào)整以及伸展至父控件一致。而不是硬編碼寫死控件的大小。

B、使用相對(duì)布局(RelativeLayout

使用相對(duì)的布局方式來(lái)進(jìn)行控件的擺放,這種方式靈活性大,但是也相對(duì)復(fù)雜。

C、使用FrameLayout,即幀布局可以在一定程度上消除屏幕尺寸帶來(lái)的問(wèn)題。

D、使用layout-xlarge,layout-large,layout-small這種方式來(lái)建立多個(gè)布局文件。使用這種方式可以僅用四個(gè)布局文件就匹配所有高于1.6版本的應(yīng)用。并且效果比只用一個(gè)layout要好很多。

E、使用最小寬度標(biāo)識(shí)符,也就是layout-swaaaadp的方式。官方在3.2的新特性中特別申明了如下四種方式用于使用3.2版本的平板建議使用的布局方式,如下:

res/layout-sw600dp/main_activity.xml  // 7英寸平板

res/layout-sw720dp/main_activity.xml  //10英寸平板
res/layout-w600dp/main_activity.xml   //根據(jù)寬度自適應(yīng)
res/layout-sw600dp-w720dp/main_activity.xml  //超寬的布局

F、使用layout-axb這種方式來(lái)進(jìn)行屏幕自適應(yīng)。

由于在3.2版本之前只有當(dāng)layout-axb完全匹配時(shí),才會(huì)去使用這個(gè)布局文件,但是在3.2以后可以最接近匹配,所有在電視版中可以使用這種方式進(jìn)行布局。

G、一些重要的圖片,比如logo,主頁(yè)面的那些圖片可以使用9.png圖片,因?yàn)檫@種圖片拉伸后不會(huì)出現(xiàn)很嚴(yán)重的失真,所以顯示效果會(huì)相比于普通的png圖片要好。

9.png圖片的更多信息可以看這里:http://www./android-game/321.html

H、使用drawable-hdpi,drawable-mdpi這種方式來(lái)定義不同的圖片,可以幫助我們適應(yīng)不同的屏幕密度。使用dpsp可以幫助我們更好的進(jìn)行布局。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    一本久道久久综合中文字幕| 最近最新中文字幕免费| 欧美色婷婷综合狠狠爱| 黑鬼糟蹋少妇资源在线观看| 亚洲一区二区三区日韩91| 国产又色又粗又黄又爽| 亚洲深夜精品福利一区| 91福利免费一区二区三区| 国产成人精品一区二三区在线观看| 人妻乱近亲奸中文字幕| 一区二区日韩欧美精品| 免费观看一级欧美大片| 日韩中文字幕视频在线高清版| 国产一级二级三级观看| 日韩人妻中文字幕精品| 亚洲a码一区二区三区| 老司机精品国产在线视频| 福利视频一区二区三区| 日韩国产亚洲一区二区三区| 91亚洲精品综合久久| 在线日本不卡一区二区| 亚洲欧美日韩国产成人| 在线免费国产一区二区三区| 精品一区二区三区三级视频| 亚洲午夜福利不卡片在线| 欧美黑人在线精品极品| 亚洲一区二区亚洲日本| 高清一区二区三区大伊香蕉| 中国美女草逼一级黄片视频| 国产福利一区二区久久| 中文字幕亚洲精品在线播放| 欧美黄色成人真人视频| 国产精品人妻熟女毛片av久久| 亚洲妇女黄色三级视频| 国产二级一级内射视频播放| 欧美日韩精品综合在线| 日韩中文字幕视频在线高清版| 97人摸人人澡人人人超碰| 粗暴蹂躏中文一区二区三区| 深夜福利欲求不满的人妻| 日韩中文字幕有码午夜美女|