中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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

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

    

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

    最近公司做的項(xiàng)目中涉及到屏幕自適應(yīng)的問題。由于做的是電視版的項(xià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,而且我們平時所說的尺寸是指可視屏幕的對角線的長度,并不是屏幕面積。因此,比如我們說一個手機(jī)是3.2英尺,也就 是說,它的可視區(qū)域的對角線的長度是:3.2*2.54 = 8.128cm。

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

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

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

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

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

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

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

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

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

解決第一個問題:還是三個480x320的手機(jī),它的dpi 分別為:120,160,180。我們將 一個按鈕的寬度設(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。它主要用于字體的顯示,他會根據(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í)際設(shè)備的轉(zhuǎn)換關(guān)系如下圖:

Android系統(tǒng)對drawable,drawable-hdpidrawable-ldpi,drawable-mdpidrawable-xdpi中存放的圖片進(jìn)行選擇的規(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-small,layoutlayout-sw500dp,layout-1280x800layout-1280x888,layout-1280x750layout-sw1280dp,layout-sw1dp

對于所有版本的API2.2,3.0,3.24.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這個布局文件來進(jìn)行匹配。

3.2以后的版本:

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

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

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

B、使用相對布局(RelativeLayout

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

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

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

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

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

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

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

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


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Contacts源代碼詳解
DPI/PPI/dp/sp/px/pt 移動設(shè)計(jì)手冊 | 人人都是產(chǎn)品經(jīng)理
分辨率、尺寸、分辨率密度的關(guān)系
Andriod界面設(shè)計(jì)適配和Android Studio中的資源
移動開發(fā)需要知道的像素知識『多圖』
android中px、dp和sp,這些單位有什么區(qū)別?
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服