久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 JUST SO LAZY 2012-12-17

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

    

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

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

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

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

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

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

  

1、基本概念

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

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

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

density:密度,,指每平方英寸中的像素數(shù)。計算方式:density=分辨率/屏幕尺寸,。android中,,160dpi的密度為1.0120dpi的密度為0.75,,240dpi的密度為1.5,。它就是 DisplayMetrics類中屬性density的值

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

這就是我們不推薦不使用px的原因之一,因為px與手機的像素密度有直接的關(guān)系,。

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

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

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

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

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

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

2、android中的drawablelayout,。

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

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

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

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

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

對于所有版本的API2.2,,3.03.2,,4.0測試均是如下結(jié)果):

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

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

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

3.2以前的版本:

只有當(dāng)layout-axb完全匹配時,才去使用這個布局文件,,否則使用layout,。也就是說,我的屏幕是1280x800,,api版本是1.6-3.0,,那么此時如果布局文件中有layout-1280x750而沒有layou-1280x800,,也就說不能完全匹配,那么系統(tǒng)會選用layout這個布局文件來進行匹配,。

3.2以后的版本:

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

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

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

B,、使用相對布局(RelativeLayout

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

C,、使用FrameLayout,即幀布局可以在一定程度上消除屏幕尺寸帶來的問題,。

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

E,、使用最小寬度標識符,也就是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這種方式來進行屏幕自適應(yīng),。

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

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

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

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


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多