一:不同的layout
Android手機螢幕大小不一,有480x320, 640x360, 800x480,854x480.怎樣才能讓App自動適應不同的螢幕呢? 其實很簡單,只需要在res目錄下建立不同的layout檔案夾,比如layout-640x360,layout-800x480,所有的layout檔案在編譯之後都會寫入R.java裡,而系統會根據螢幕的大小自己選擇合適的layout進行使用。 但是需要注意的是根據解析度添加layout檔案時,layout這個原來的檔案夾及資源一定要存在,否則會出現錯誤。同時在命名layout檔案夾時,必須遵守這樣的規則. layout-640x360 大數放在小數的前面,否則會報錯!如:
即使這樣設定了,但是會發現手機沒有根據解析度來選擇layout問題,這是為什麼呢?經過多次測試,發現問題在這裡,看:
原來是螢幕尺寸選擇做作怪,只要將layout檔案夾下的XML布局檔案 全部設定成非custom選項就可以了,這個可以設定你需要的預設大小尺寸。
這裡我選擇2.7寸為預設。
這樣 程式啟動就能根據像素選擇layout檔案
原文地址:http://blog.csdn.net/chenlei1889/article/details/6291282
關於Android的nodpi,xhdpi,hdpi,mdpi,ldpi
作者:lizongbo 發表於:22:43. 星期三, 一月 12th, 2011
著作權聲明:可以任意轉載,轉載時請務必以超連結形式標明文章原始出處和作者資訊及本著作權聲明。
http://618119.com/archives/2011/01/12/205.html
關於Android的nodpi,xhdpi,hdpi,mdpi,ldpi
首先是幾個基本概念:
1.螢幕尺寸Screen size
即顯示螢幕的實際大小,按照螢幕的對角線進行測量。
為簡單起見,Android把所有的螢幕大小分為四種尺寸:小,普通,大,超大(分別對應:small, normal, large, and extra large).
應用程式可以為這四種尺寸分別提供不同的自訂螢幕布局-平台將根據螢幕實際尺寸選擇對應布局進行渲染,這種選擇對於程式側是透明的。
2.螢幕長寬比Aspect ratio
長寬比是螢幕的物理寬度與物理高度的比例關係。應用程式可以通過使用限定的資源來為指定的長寬比提供螢幕布局資源。
3.螢幕解析度Resolution
在螢幕上顯示的物理像素總和。需要注意的是:儘管解析度通常用寬x高表示,但解析度並不意味著具體的螢幕長寬比。
在Andorid系統中,應用程式不直接使用解析度。
4.密度Density
根據像素解析度,在螢幕指定物理寬高範圍內能顯示的像素數量。
在同樣的寬高地區,低密度的顯示屏能顯示的像素較少,而高密度的顯示屏則能顯示更多的像素。
螢幕密度非常重要,因為其它條件不變的情況下,一共寬高固定的UI組件(比如一個按鈕)在在低密度的顯示屏上顯得很大, 而在高密度顯示屏上看起來就很小。
為簡單起見,Android把所有的螢幕解析度也分為四種尺寸:小,普通,大,超大(分別對應:small, normal, large, and extra large).
應用程式可以為這四種尺寸分別提供不同的資源-平台將透明的對資源進行縮放以適配指定的螢幕解析度。
5.裝置獨立像素Density-independent pixel (dp)
應用程式可以用來定義UI組件的虛擬像素單元,通過密度無關的方式來描述布局尺寸和位置。
一個裝置獨立像素相當於一個160 dpi螢幕上的物理像素。
在程式運行時,系統根據螢幕的實際密度透明的處理任何需要縮放的裝置獨立像素單元,裝置獨立像素轉換成螢幕實際像素的換算很簡單:pixels = dps * (density / 160).
例如在240 dpi的螢幕上,1個裝置獨立像素等於1.5物理像素.為確保UI組件在不同的螢幕都能合適的展示,強烈建議使用裝置獨立像素單元來定義你的應用程式UI。
四種螢幕尺寸分類:: small, normal, large, and xlarge
四種密度分類: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
需要注意的是: xhdpi是從 Android 2.2 (API Level 8)才開始增加的分類.
xlarge是從Android 2.3 (API Level 9)才開始增加的分類.
DPI是“dot per inch”的縮寫,每英吋像素數。
一般情況下的普通螢幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
參考:http://developer.android.com/images/screens_support/screens-ranges.png
兩種擷取螢幕解析度資訊的方法:
DisplayMetrics metrics = new DisplayMetrics();
Display display = activity.getWindowManager().getDefaultDisplay();
display.getMetrics(metrics);
//這裡得到的像素值是裝置獨立像素dp
//DisplayMetrics metrics=activity.getResources().getDisplayMetrics(); 這樣獲得的參數資訊不正確,不要使用這種方式。
不能使用android.content.res.Resources.getSystem().getDisplayMetrics()。這個得到的寬和高是空的。
如果需要為Android pad定製資源檔,則res目錄下的目錄可能為:
drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-nodpi
drawable-nodpi-1024×600
drawable-nodpi-1280×800
drawable-nodpi-800×480
values
values-ldpi
values-mdpi
values-hdpi
values-xhdpi
values-nodpi
values-nodpi-1024×600
values-nodpi-1280×800
values-nodpi-800×480
參考:
http://developer.android.com/guide/practices/screens_support.html