各種Android作業系統的手機簡直就是琳琅滿目,螢幕解析度的差異可想而知。目前比較主流的有WVGA=800x480,HVGA=480x320,另外的還有QVGA=320x240。當然還有魅族M9的DVGA=960x640,還有蛋疼的摩托羅拉的FWVGA=854x480。
其實,在你layout的xml檔案中,編寫的時候是不是用了許多的padding呢?如果是,那你就蛋疼了。因為這樣的布局永遠是無法適應所有手機螢幕的。
正確的做法應該是使用的是weight屬性。將你控制項的layout中的width、height設定為fill-parent,不要使用wrap——content。因為wrap-content的大小是不固定的。而weight(權重)這個屬性很好的解決了這個問題。
當包裹在控制項外面的Layout的width、height屬性都設定為fill-parent時,可以利用weight的反位元性。即如果控制項A設定weight為5,控制項B設定weight為7,那麼A所佔的空間為5/(5+7),B所佔的空間為7/(5+7)。這樣的反比屬性對任何解析度下的手機都是合適的。
當然,字型就不行了。那怎麼保證字型能夠跟布局一樣能夠自適應呢?
呵呵,很簡單,就是在你的res檔案夾中建立一個檔案夾,叫做values-320x240。其中320x240是你手機螢幕的解析度,根據你手機螢幕的情況做不同的命名,例如values- 800x480。在該檔案夾下建立一個dimens.xml檔案,定義各種字型的大小。那麼系統就會自動根據你手機螢幕的解析度去調用響應的檔案夾。
另外,值得提醒的是,記得在你預設的values檔案下的dimens.xml檔案中也要寫上相應的字型大小哦,因為當系統無法認識你手機螢幕大小的時候,它會自動去找你預設檔案中的
東西,沒有寫的話程式會崩潰。
************************************************************分割線************************************************************
在看下面內容之前首先請看你SDK文檔中以下這篇文章
其實google在解析度適應性的東西已經寫的很清楚了,只是我們很多人沒去看而已
以下是結論:
螢幕解析度: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得到,需要四捨五入。
以此類推
一般情況下需要建立出values 、values-mdpi 、 values-hdpi檔案夾,以備在一些沒有規定的尺寸螢幕上找不到資源的情況。
然後在裡面使用不同的dimens檔案,Layout中不要使用顯示的數字,所有的尺寸定義全都援引dimens裡面的內容。
這樣能夠保證深度UI定製的情況
另外在工程的default.properties中如果split.density=false,則解析度適配的時候檔案夾命名不需要與scale相除
例
螢幕解析度:800x480
density:1.5(240)
檔案夾:values-hdpi-800x480
************************************************************分割線************************************************************
關於dimens
位置:res\values
單位:px Pixel 以畫面的像素為單位;
in Inches以畫面的多少英寸為單位;
mm Millimeter以畫面的多少毫米為單位;
pt Points 一點為1/72英寸;
dp或dip Density-indepentdent 為160dpi螢幕的一個pixel;
ap Scale-independent Pixels 隨螢幕尺寸改變的一個pixel;
最後總結就是要想不求人 ,英語得過關!!!