android 分辨率及密度詳細

android 分辨率及密度詳細

屏幕密度 : 基礎密度 = px : dip

density :160 = px : dip

 

得到像素轉dip公式:

 public static int dip2px(float dipValue) {

      return (int) (dipValue * (DevConst.DENSITY / 160f));
 }

 public static int px2dip(float pxValue) {

      return (int) ((pxValue * 160) / DevConst.DENSITY);
 }

 

----------------------------------------------------------------------

 

AndroidManifest.xml中設置支持不同屏幕分辨率及密度 

<supports-screens android:resizeable="true" android:smallScreens="false"
                    android:normalScreens="true" android:largeScreens="true"
                    android:anyDensity="true" />

 

資源文件不同分辨率:

   drawable-hdpi  drawable-large-hdpi    drawable-ldpi drawable-mdpi  drawable-1280x800

 

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels;  // 屏幕寬度(像素)
int height = metric.heightPixels;  // 屏幕高度(像素)
float density = metric.density;  // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240

 

ps:需要注意的是,在一個低密度的小屏手機上,僅靠上面的代碼是不能獲取正確的尺寸的。比如說,一部240x320像素的低密度手機,如果運行上述代碼,獲取到的屏幕尺寸是320x427。因此,研究之後發現,若沒有設定多分辨率支持的話,Android系統會將240x320的低密度(120)尺寸轉換爲中等密度(160)對應的尺寸,這樣的話就大大影響了程序的編碼。所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens節點

 

-------------------------------------------------------------------------------------------------------------------------------

 

QVGA和WQVGA屏density=120;

HVGA屏density=160;

WVGA屏density=240;

 

當density=120時 屏幕實際分辨率爲240px*400px (兩個點對應一個分辨率)

狀態欄和標題欄高各19px或者25dip

橫屏是屏幕寬度400px 或者800dip,工作區域高度211px或者480dip

豎屏時屏幕寬度240px或者480dip,工作區域高度381px或者775dip


 

density=160時 屏幕實際分辨率爲320px*533px (3個點對應兩個分辨率)

狀態欄和標題欄高個25px或者25dip

橫屏是屏幕寬度533px 或者800dip,工作區域高度295px或者480dip

豎屏時屏幕寬度320px或者480dip,工作區域高度508px或者775dip


 

density=240時 屏幕實際分辨率爲480px*800px (一個點對於一個分辨率)

狀態欄和標題欄高個38px或者25dip

橫屏是屏幕寬度800px 或者800dip,工作區域高度442px或者480dip

豎屏時屏幕寬度480px或者480dip,工作區域高度762px或者775dip


 

device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬件有關,一般我們爲了支持WVGA、HVGA和QVGA 推薦使用這個,不依靠像素www.tuopu163.com。

apk的資源包中,當屏幕density=240時使用hdpi標籤的資源

當屏幕density=160時,使用mdpi標籤的資源

當屏幕density=120時,使用ldpi標籤的資源。

不加任何標籤的資源是各種分辨率情況下共用的

 

 

-------------------------------------------------------------------------------------------------------------------------------

 

術語和概念
屏幕尺寸
屏幕的物理尺寸,以屏幕的對角線長度作爲依據(比如2.8寸,3.5寸)。
簡而言之,Android把所有的屏幕尺寸簡化爲四類:超大、大、正常、小。 (small, normal, large, and extra large.)
程序可以針對這四種尺寸的屏幕提供三種不同的佈局方案,然後系統會負責把你的佈局方案以合適的方式渲染到對應的屏幕上,這個過程是不需要程序員用代碼來干預的。


屏幕密度

物理屏幕上的像素總數。與尺寸類似,也有四種: 低、中、高、超高。 ( low, medium, high, and extra high.) 密度較低的屏幕,在長和寬方向都只有比較少的像素,而高密度的屏幕通常則會有很多——甚至會非常非常多——像素排列在同一區域。屏幕的密度是非常重要的,舉個例子,長寬以像素爲單位定義的界面元素(比如一個按鈕),在低密度的屏幕上會顯得很大,但在高密度的屏幕上則會顯得很小。

屏幕長寬比
屏幕的物理長度與物理寬度的比例。程序可以爲制定長寬比的屏幕提供製定的素材,只需要用系統提供的資源分類符long和notlong。

分辨率
屏幕上擁有的像素的總數。注意,雖然大部分情況下分辨率都被表示爲“寬度×長度”,但分辨率並不意味着屏幕長寬比。在Android系統中,程序一般並不直接處理分辨率。


密度無關的像素(DIP)
指一個抽象意義上的像素,程序用它來定義界面元素。它作爲一個與實際密度無關的單位,幫助程序員構建一個佈局方案(界面元素的寬度,高度,位置)。
一個與密度無關的像素,在邏輯尺寸上,與一個位於像素密度爲160DPI的屏幕上的像素是一致的,這也是Android平臺所假定的默認顯示設備。在運行的時候,平臺會以目標屏幕的密度作爲基準,“透明地”處理所有需要的DIP縮放操作。要把密度無關像素轉換爲屏幕像素,可以用這樣一個簡單的公式:pixels = dips * (density / 160)。舉個例子,在DPI爲240的屏幕上,1個DIP等於1.5個物理像素。我們強烈推薦你用DIP來定義你程序的界面佈局,因爲這樣可以保證你的UI在各種分辨率的屏幕上都可以正常顯示。


支持的屏幕分辨率範圍
1.5及更早版本的Android系統,在設計的時候假定系統只會運行在一種分辨率的設備上——HVGA(320×480)分辨率,尺寸爲3.2寸。由於系統只能工作在一種屏幕上,開發人員就可以針對那個屏幕來編寫自己的程序,而無需去考慮程序在其他屏幕上的顯示問題。
但自從Android 1.6以來,系統引入了對多種尺寸、多種分辨率屏幕的支持,以此滿足擁有各種配置的新平臺的運行需求。這就意味着開發人員在針對Android 1.6或更新版系統開發程序的時候,需要爲自己的程序在多種分辨率的屏幕上良好顯示作出額外的設計。
爲了簡化程序員面在對各種分辨率時的困擾,也爲了具備各種分辨率的平臺都可以直接運行這些程序,Android平臺將所有的屏幕以密度和分辨率爲分類方式,各自分成了四類:
·四種主要的尺寸:超大、大,正常,小;
·四種不同的密度:超高、高(hdpi),中(mdpi)和低(ldpi)。
如果需要的話,程序可以爲各種尺寸的屏幕提供不同的資源(主要是佈局),也可以爲各種密度的屏幕提供不同的資源(主要是位圖)。除此以外,程序不需要針對屏幕的尺寸或者密度作出任何額外的處理。在執行的時候,平臺會根據屏幕本身的尺寸與密度特性,自動載入對應的資源,並把它們從邏輯像素(DIP,用於定義界面佈局)轉換成屏幕上的物理像素。

下表列出了Android平臺支持的屏幕中一些比較常用的型號,並顯示了系統是如何把它們分類到不同的屏幕配置裏的。有些屏幕分辨率並不在下面的列表上,但系統仍會把它們歸入下列的某一個類型中。




雖然系統支持上面多種不同配置的屏幕,但你並不一定需要爲它們都提供各自不同的資源。系統已經提供了足夠魯棒(就是在各種惡劣環境下正常工作,對環境變化不敏感)的兼容特性,用於在各種不同的屏幕上良好顯示你的程序

發佈了150 篇原創文章 · 獲贊 25 · 訪問量 64萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章