Android 屏幕分辨率和精度
1
多分辨率支持
在設計之初,Android系統就被設計為一個可以在多種不同分辨率的設備上運行的操作系統。對于應用程序來說,系統平臺向它們提供的是一個穩定的,跨平
臺的運行環境,而關于如何將程序以正確的方式顯示到它所運行的平臺上所需要的大部分技術細節,都由系統本身進行了處理,無需程序的干預。當然,系統本身也
為程序提供了一系列API,所以在目標平臺的分辨率是可以完全確定的情況下,程序也可以精確的控制自身在目標平臺上的界面顯示方式。
這個文檔會說明系統平臺究竟提供了哪些分辨率支持特性,與它們如何在程序中使用的信息。如果你遵循文檔中列出的方法,就很容易讓你的程序在所有支持的分辨率下都能完美顯示。這樣你就可以用一個單獨的.apk文件,將你的程序發布到所有的平臺上。
如果你已經發布過針對Android
1.5或更早版本平臺的程序,你應該仔細閱讀這篇文檔,然后考慮一下到底如何讓自己的老程序可以在擁有各種不同分辨率,并且運行著Android
1.6或更新平臺上正常顯示。在絕大部分情況下,只需要對程序作出小小的修改就可以達到目的,但你仍然需要盡可能地在各種分辨率的平臺上進行測試。
特別的,如果你有一個已經完成的程序,又想讓它可以在超低分辨率的設備(比如320×240)上正確運行,你需要閱讀“老程序的更新策略”,那篇文檔會告訴你應該怎么做。
術語和概念
屏幕尺寸 - 屏幕的物理尺寸,以屏幕的對角線長度作為依據(比如2.8寸,3.5寸)。
簡而言之,Android把所有的屏幕尺寸簡化為三大類:大,正常,和小。
程序可以針對這三種尺寸的屏幕提供三種不同的布局方案,然后系統會負責把你的布局方案以合適的方式渲染到對應的屏幕上,這個過程是不需要程序員用代碼來干預的。
屏幕長寬比
屏幕的物理長度與物理寬度的比例。程序可以為制定長寬比的屏幕提供制定的素材,只需要用系統提供的資源分類符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平臺支持的屏幕中一些比較常用的型號,并顯示了系統是如何把它們分類到不同的屏幕配置里的。有些屏幕分辨率并不在下面的列表上,但系統仍會把它們歸入下列的某一個類型中。
|
低分辨率(120),ldpi |
中等分辨率(160),mdpi |
高分辨率(240),hdpi |
超高分辨率(320),xhdpi |
小屏幕 |
QVGA(240 × 320) |
|
480 × 640 |
|
正常屏幕 |
|
HVGA(320 × 480) |
|
640 × 960 |
大屏幕 |
|
|
|
|
超大屏幕 |
600 × 1024 |
|
|
1536 × 2048 |
*為了模擬此配置中,指定一個自定義的160精度時創建的AVD,使用WVGA800或WVGA854皮膚。
**為了模擬此配置中,指定120個自定義的精度,當創建的AVD,使用WVGA800或WVGA854皮膚。