1.常見的單位 dip, dp, px, sp之間的區別:javascript
dip: device independent pixels(設備獨立像素). 不一樣設備有不一樣的顯示效果,這個和設備硬件有關,通常咱們爲了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。
px: pixels(像素). 不一樣設備顯示效果相同,通常咱們HVGA表明320x480像素,這個用的比較多。
pt: point,是一個標準的長度單位,1pt=1/72英寸,用於印刷業,很是簡單易用;
sp: scaled pixels(放大像素). 主要用於字體顯示best for textsize,根據 google 的建議,TextView 的字號最好使用 sp 作單位,
Android支持下列全部單位:
px(像素):屏幕上的點。
in(英寸):長度單位。
mm(毫米):長度單位。
pt(磅):1/72英寸。
dp(與密度無關的像素):一種基於屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp = 1px。
dip:與dp相同,多用於Android/ophone示例中。
sp(與刻度無關的像素):與dp相似,可是能夠根據用戶的字體大小首選項進行縮放。java
WQVGA:Wide Quarter VGA;即:擴大的QVGA,分辨率比QVGA高,比VGA低,通常是:400×240,480×272;android
2.術語和概念
屏幕尺寸
屏幕的物理尺寸,以屏幕的對角線長度做爲依據(好比2.8寸,3.5寸)。
簡而言之,Android把全部的屏幕尺寸簡化爲三大類:大,正常,和小。
程序能夠針對這三種尺寸的屏幕提供三種不一樣的佈局方案,而後系統會負責把你的佈局方案以合適的方式渲染到對應的屏幕上,這個過程是不須要程序員用代碼來干預的。
屏幕長寬比
屏幕的物理長度與物理寬度的比例。程序能夠爲制定長寬比的屏幕提供製定的素材,只須要用系統提供的資源分類符long和notlong。
分辨率
屏幕上擁有的像素的總數。注意,雖然大部分狀況下分辨率都被表示爲「寬度×長度」,但分辨率並不意味着屏幕長寬比。在Android系統中,程序通常並不直接處理分辨率。
密度
以屏幕分辨率爲基礎,沿屏幕長寬方向排列的像素。
密 度較低的屏幕,在長和寬方向都只有比較少的像素,而高密度的屏幕一般則會有不少——甚至會很是很是多——像素排列在同一區域。屏幕的密度是很是重要的,舉 個例子,長寬以像素爲單位定義的界面元素(好比一個按鈕),在低密度的屏幕上會顯得很大,但在高密度的屏幕上則會顯得很小。
密度無關的像素(DIP)
指一個抽象意義上的像素,程序用它來定義界面元素。它做爲一個與實際密度無關的單位,幫助程序員構建一個佈局方案(界面元素的寬度,高度,位置)。
一 個與密度無關的像素,在邏輯尺寸上,與一個位於像素密度爲160DPI的屏幕上的像素是一致的,這也是Android平臺所假定的默認顯示設備。在運行的 時候,平臺會以目標屏幕的密度做爲基準,「透明地」處理全部須要的DIP縮放操做。要把密度無關像素轉換爲屏幕像素,能夠用這樣一個簡單的公 式:pixels = dips * (density / 160)。舉個例子,在DPI爲240的屏幕上,1個DIP等於1.5個物理像素。咱們強烈推薦你用DIP來定義你程序的界面佈局,由於這樣能夠保證你的 UI在各類分辨率的屏幕上均可以正常顯示。
程序員
3.支持的屏幕分辨率範圍
1.5及更早版本的Android系統,在設計的時候假定系統只會運行在一種分辨率的設備上——HVGA(320×480)分辨率,尺寸爲3.2寸。因爲系統只能工做在一種屏幕上,開發人員就能夠針對那個屏幕來編寫本身的程序,而無需去考慮程序在其餘屏幕上的顯示問題。
但自從Android 1.6以來,系統引入了對多種尺寸、多種分辨率屏幕的支持,以此知足擁有各類配置的新平臺的運行需求。這就意味着開發人員在針對Android 1.6或更新版系統開發程序的時候,須要爲本身的程序在多種分辨率的屏幕上良好顯示做出額外的設計。
爲了簡化程序員面在對各類分辨率時的困擾,也爲了具有各類分辨率的平臺均可以直接運行這些程序,Android平臺將全部的屏幕以密度和分辨率爲分類方式,各自分紅了三類:
·三種主要的尺寸:大,正常,小;
·三種不一樣的密度:高(hdpi),中(mdpi)和低(ldpi)。
如 果須要的話,程序能夠爲各類尺寸的屏幕提供不一樣的資源(主要是佈局),也能夠爲各類密度的屏幕提供不一樣的資源(主要是位圖)。除此之外,程序不須要針對屏 幕的尺寸或者密度做出任何額外的處理。在執行的時候,平臺會根據屏幕自己的尺寸與密度特性,自動載入對應的資源,並把它們從邏輯像素(DIP,用於定義界 面佈局)轉換成屏幕上的物理像素。
下表列出了Android平臺支持的屏幕中一些比較經常使用的型號,並顯示了系統是如何把它們分類到不一樣的屏幕配置裏的。有些屏幕分辨率並不在下面的列表上,但系統仍會把它們納入下列的某一個類型中。iphone
首先,一塊屏幕有幾個參數,屏幕的物理尺寸,分辨率,像素密度(Density, DPI)。ide
其中佈局
這三個參數,任兩個肯定後,第三個量就是肯定了。公式爲:分辨率(總像素數)= 物理尺寸 × 像素密度。字體
4.判斷android版本,設置width、縮放比例,iphone不縮放只設置widthgoogle
(function(){ var phoneWidth = parseInt(window.screen.width), phoneScale = phoneWidth/640, ua = navigator.userAgent; if (/Android (\d+\.\d+)/.test(ua)){ var version = parseFloat(RegExp.$1); if(version > 2.3){ document.write('<meta name="viewport" content="width=640, minimum-scale = '+phoneScale+', maximum-scale = '+phoneScale+', target-densitydpi=device-dpi">'); }else{ document.write('<meta name="viewport" content="width=640, target-densitydpi=device-dpi">'); } } else { document.write('<meta name="viewport" content="width=640, user-scalable=no, target-densitydpi=device-dpi">'); } })();