Android適配難題全面總結

此文章轉載至http://blog.csdn.net/lpjishu/article/details/53465996點擊打開鏈接



支持多種屏幕

Android 可在各種具有不同屏幕尺寸和密度的設備上運行。對於 應用,Android 系統在不同設備中提供一致的開發環境, 可以處理大多數工作,將每個應用的用戶界面調整爲適應其顯示的 屏幕。同時,系統提供 API,可用於控制 應用適用於特定屏幕尺寸和密度的 UI,以針對 不同屏幕配置優化 UI 設計。例如,您可能想要不同於手機 UI 的 平板電腦 UI。

雖然系統爲使您的應用適用於不同的屏幕, 會進行縮放和大小調整,但您應針對不同的屏幕尺寸和密度優化 應用。這樣可以最大程度優化所有設備上的用戶體驗,用戶會 認爲您的應用實際上是專爲他們的設備而設計,而不是 簡單地拉伸以適應其設備屏幕。

按照本文檔所述的做法,您可以創建 正常顯示的應用,然後使用 一個 .apk 文件在所有支持的屏幕配置中提供優化的用戶體驗。

:本文檔中的信息假設您的 應用設計用於 Android 1.6(API 級別 4)或更高級別。

另請注意,Android 3.2 引入了新的 API,可用於更 精確地控制應用用於不同屏幕尺寸的佈局資源。如果您要開發針對平板電腦優化的應用,這些新 功能特別重要。

屏幕支持概覽

本節概述 Android 對多種屏幕的支持,包括: 本文檔和 API 中所用術語和概述的簡介、 系統支持的屏幕配置摘要,以及 API 和基本 屏幕兼容性功能的概述。

術語和概念

屏幕尺寸

按屏幕對角測量的實際物理尺寸。 
爲簡便起見,Android 將所有實際屏幕尺寸分組爲四種通用尺寸:小、 正常、大和超大。

屏幕密度

屏幕物理區域中的像素量;通常稱爲 dpi(每英寸 點數)。例如, 與“正常”或“高”密度屏幕相比,“低”密度屏幕在給定物理區域的像素較少。 
爲簡便起見,Android 將所有屏幕密度分組爲六種通用密度: 低、中、高、超高、超超高和超超超高。

方向

從用戶視角看屏幕的方向,即橫屏還是 豎屏,分別表示屏幕的縱橫比是寬還是高。請注意, 不僅不同的設備默認以不同的方向操作,而且 方向在運行時可隨着用戶旋轉設備而改變。

分辨率

屏幕上物理像素的總數。添加對多種屏幕的支持時, 應用不會直接使用分辨率;而只應關注通用尺寸和密度組指定的屏幕 尺寸及密度。

密度無關像素 (dp)

在定義 UI 佈局時應使用的虛擬像素單位,用於以密度無關方式表示佈局維度 或位置。 
密度無關像素等於 160 dpi 屏幕上的一個物理像素,這是 系統爲“中”密度屏幕假設的基線密度。在運行時,系統 根據使用中屏幕的實際密度按需要以透明方式處理 dp 單位的任何縮放 。dp 單位轉換爲屏幕像素很簡單: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等於 1.5 物理像素。在定義應用的 UI 時應始終使用 dp 單位 ,以確保在不同密度的屏幕上正常顯示 UI。

支持的屏幕範圍

從 Android 1.6(API 級別 4)開始,Android 支持多種屏幕尺寸和密度,反映設備可能具有的多種不同屏幕配置。 您可以使用 Android 系統的功能優化應用在各種屏幕配置下的用戶界面 ,確保應用不僅正常渲染,而且在每個屏幕上提供 最佳的用戶體驗。

爲簡化您爲多種屏幕設計用戶界面的方式,Android 將實際屏幕尺寸和密度的範圍 分爲:

四種通用尺寸:小、正常、 大 和超大

注:從 Android 3.2(API 級別 13)開始,這些尺寸組 已棄用,而採用根據可用屏幕寬度管理屏幕尺寸的 新技術。如果爲 Android 3.2 和更高版本開發,請參閱聲明適用於 Android 3.2 的平板電腦佈局以瞭解更多信息。

六種通用的密度:

ldpi(低)~120dpi 
mdpi(中)~160dpi 
hdpi(高)~240dpi 
xhdpi(超高)~320dpi 
xxhdpi(超超高)~480dpi 
xxxhdpi(超超超高)~640dpi 
通用的尺寸和密度按照基線配置(即正常尺寸和 mdpi(中)密度)排列。 此基線基於第一代 Android 設備 (T-Mobile G1) 的屏幕配置,該設備採用 HVGA 屏幕(在 Android 1.6 之前,這是 Android 支持的唯一屏幕配置)。

每種通用的尺寸和密度都涵蓋一個實際屏幕尺寸和密度範圍。例如, 兩部都報告正常屏幕尺寸的設備在手動測量時,實際屏幕尺寸和 高寬比可能略有不同。類似地,對於兩臺報告 hdpi 屏幕密度的設備,其實際像素密度可能略有不同。 Android 將這些差異抽象概括到應用,使您可以提供爲通用尺寸和密度設計的 UI,讓系統按需要處理任何最終調整。 圖 1 說明不同的尺寸和密度如何粗略歸類爲不同的尺寸 和密度組。 
這裏寫圖片描述

圖 1. 說明 Android 如何將實際尺寸和密度粗略地 對應到通用的尺寸和密度(數據並不精確)。

在爲不同的屏幕尺寸設計 UI 時,您會發現每種設計都需要 最小空間。因此,上述每種通用的屏幕尺寸都關聯了系統定義的最低 分辨率。這些最小尺寸以“dp”單位表示 — 在定義佈局時應使用相同的單位 — 這樣系統無需擔心屏幕密度的變化。

超大屏幕至少爲 960dp x 720dp 
大屏幕至少爲 640dp x 480dp 
正常屏幕至少爲 470dp x 320dp 
小屏幕至少爲 426dp x 320dp 
注:這些最小屏幕尺寸在 Android 3.0 之前未正確定義,因此某些設備在正常屏幕與大屏幕之間變換時可能會出現分類錯誤的情況。 這些尺寸還基於屏幕的物理分辨率,因此設備之間可能不同 — 例如,具有系統狀態欄的 1024x720 平板電腦因系統狀態欄要佔用空間,所以可供 應用使用的空間要小一點。

要針對不同的屏幕尺寸和密度優化應用的 UI,可爲任何通用的尺寸和密度提供 替代 資源。通常,應爲某些不同的屏幕尺寸提供替代佈局,爲不同的屏幕密度提供替代位圖圖像。 在運行時,系統會根據當前設備屏幕的通用 尺寸或密度對應用使用適當的資源。

無需爲屏幕尺寸和 密度的每個組合提供替代資源。系統提供強大的兼容性功能,可處理在任何設備屏幕上 渲染應用的大多數工作,前提是您已經使用 可以適當調整大小的技術實現 UI(如下面的最佳做法所述)。

注:定義設備通用屏幕 尺寸和密度的特性相互獨立。例如,WVGA 高密度屏幕 被視爲正常尺寸屏幕,因爲其物理尺寸與 T-Mobile G1 (Android 的第一代設備和基線屏幕配置)大約相同。另一方面,WVGA 中密度 屏幕被視爲大尺寸屏幕。雖然它提供相同的分辨率(相同的 像素數),但 WVGA 中密度屏幕的屏幕密度更低,意味着每個像素 實際上更大,因此整個屏幕大於基線(正常尺寸)屏幕。

密度獨立性

應用顯示在密度不同的屏幕上時,如果它保持用戶界面元素的物理尺寸(從 用戶的視角),便可實現“密度獨立性” 。

保持密度獨立性很重要,因爲如果沒有此功能,UI 元素(例如 按鈕)在低密度屏幕上看起來較大,在高密度屏幕上看起來較小。這些 密度相關的大小變化可能給應用佈局和易用性帶來問題。圖 2 和 3 分別顯示了應用不提供密度獨立性和 提供密度獨立性時的差異。

這裏寫圖片描述 
圖 2. 不支持不同密度的示例應用在低、中、高密度屏幕上的顯示情況。

這裏寫圖片描述 
圖 3. 良好支持不同密度(密度獨立)的示例應用在低、中、高密度屏幕上的顯示情況。

Android 系統可幫助您的應用以兩種方式實現密度獨立性:

系統根據當前屏幕密度擴展 dp 單位數 
系統在必要時可根據當前屏幕 密度將可繪製對象資源擴展到適當的大小 
在圖 2 中,文本視圖和位圖可繪製對象具有以像素(px 單位)指定的尺寸,因此視圖的物理尺寸在低密度屏幕上更大,在高密度 屏幕上更小。這是因爲,雖然實際屏幕尺寸可能相同,但高密度屏幕 的每英寸像素更多(同樣多的像素在一個更小的區域內)。在圖 3 中,佈局 尺寸以密度獨立的像素(dp 單位)指定。由於 密度獨立像素的基線是中密度屏幕,因此具有中密度屏幕的設備看起來 與圖 2 一樣。但對於低密度和高密度屏幕,系統 將分別增加和減少密度獨立像素值,以適應 屏幕。

大多數情況下,確保應用中的屏幕獨立性很簡單,只需以適當的密度獨立像素(dp 單位)或 “wrap_content” 指定所有 佈局尺寸值。系統然後根據適用於當前屏幕密度的縮放比例適當地縮放位圖可繪製對象,以 適當的大小顯示。

但位圖縮放可能導致模糊或像素化位圖,您或許已經在上面的屏幕截圖中 發現了這些問題。爲避免這些僞影,應爲 不同的密度提供替代的位圖資源。例如,應爲高密度 屏幕提供分辨率較高的位圖,然後系統對中密度 屏幕將使用這些位圖,而無需調整位圖大小。下一節詳細說明如何爲 不同的屏幕配置提供替代資源。

如何支持多種屏幕

Android 支持多種屏幕的基礎是它能夠管理針對當前屏幕配置 以適當方式渲染應用的佈局和位圖 可繪製對象。系統可處理大多數工作,通過適當地 縮放佈局以適應屏幕尺寸/密度和根據屏幕密度縮放位圖可繪製對象 ,在每種屏幕配置中渲染您的應用。但是,爲了更適當地處理不同的屏幕配置 ,還應該:

在清單中顯式聲明您的應用 支持哪些屏幕尺寸 
通過聲明您的應用支持哪些屏幕尺寸,可確保只有 其屏幕受支持的設備才能下載您的應用。聲明對 不同屏幕尺寸的支持也可影響系統如何在較大 屏幕上繪製您的應用 — 特別是,您的應用是否在屏幕兼容模式中運行。 
要聲明應用支持的屏幕尺寸,應在清單文件中包含 supports-screens 元素。 
爲不同屏幕尺寸提供不同的佈局 
默認情況下,Android 會調整應用佈局的大小以適應當前設備屏幕。大多數 情況下效果很好。但有時 UI 可能看起來不太好,需要針對 不同的屏幕尺寸進行調整。例如,在較大屏幕上,您可能要調整 某些元素的位置和大小,以利用其他屏幕空間,或者在較小屏幕上, 可能需要調整大小以使所有內容納入屏幕。 
可用於提供尺寸特定資源的配置限定符包括 small、normal、large 和 xlarge。例如,超大屏幕的佈局應使用 layout-xlarge/。 
從 Android 3.2(API 級別 13)開始,以上尺寸組已棄用,您 應改爲使用 swdp 配置限定符來定義佈局資源 可用的最小寬度。例如,如果多窗格平板電腦佈局 需要至少 600dp 的屏幕寬度,應將其放在 layout-sw600dp/ 中。聲明適用於 Android 3.2 的平板電腦佈局一節將進一步討論如何使用新技術聲明佈局資源。 
爲不同屏幕密度提供不同的位圖可繪製對象 
默認情況下,Android 會縮放位圖可繪製對象(.png、.jpg 和 .gif 文件)和九宮格可繪製對象(.9.png 文件),使它們以適當的 物理尺寸顯示在每部設備上。例如,如果您的應用只爲 基線中密度屏幕 (mdpi) 提供位圖可繪製對象,則在高密度 屏幕上會增大位圖,在低密度屏幕上會縮小位圖。這種縮放可能在 位圖中造成僞影。爲確保位圖的最佳顯示效果,應針對 不同屏幕密度加入不同分辨率的替代版本。 
可用於密度特定資源的配置限定符(在下面詳述) 包括 ldpi(低)、mdpi(中)、 hdpi(高)、xhdpi(超高)、xxhdpi (超超高)和 xxxhdpi(超超超高)。例如,高密度屏幕的位圖應使用 drawable-hdpi/。 
注:僅當要在 xxhdpi 設備上提供比正常位圖大的啓動器圖標時才需要提供 mipmap-xxxhdpi 限定符。無需爲所有應用的圖像提供 xxxhdpi 資源。

有些設備會將啓動器圖標增大 25%。例如,如果您的最高 密度啓動器圖標已是超超高密度,縮放處理會降低其 清晰度。因此應在 mipmap-xxxhdpi 目錄中提供更高密度的啓動器圖標,系統將改爲增大較小 的圖標。 
請參閱提供 xxx-高密度啓動器圖標以瞭解詳細信息。對啓動程序圖標以外的 UI 元素不應使用 xxxhdpi 限定符。 
注:將您的所有啓動器圖標放在 res/mipmap-[density]/ 文件夾中,而非 res/drawable-[density]/ 文件夾中。無論安裝應用的設備屏幕分辨率如何,Android 系統都會將資源保留在這些密度特定的文件夾中,例如 mipmap-xxxhdpi。此 行爲可讓啓動器應用爲您的應用選擇要顯示在主 屏幕上的最佳分辨率圖標。如需瞭解有關使用 mipmap 文件夾的詳細信息,請參閱管理項目概覽。

尺寸和密度配置限定符對應於 前面支持的屏幕範圍中所述的通用尺寸和密度。

在運行時,系統通過 以下程序確保任何給定資源在當前屏幕上都能保持儘可能最佳的顯示效果:

系統使用適當的替代資源

根據當前屏幕的尺寸和密度,系統將使用您的應用中提供的任何尺寸和 密度特定資源。例如,如果設備有 高密度屏幕,並且應用請求可繪製對象資源,系統將查找 與設備配置最匹配的可繪製對象資源目錄。根據可用的其他 替代資源,包含 hdpi 限定符(例如 drawable-hdpi/)的資源目錄可能是最佳匹配項,因此係統將使用此 目錄中的可繪製對象資源。 
如果沒有匹配的資源,系統將使用默認資源,並按需要向上 或向下擴展,以匹配當前的屏幕尺寸和密度。 
“默認”資源是指未標記配置限定符的資源。例如,drawable/ 中的資源是默認可繪製資源。 系統假設默認資源設計用於基線屏幕尺寸和密度,即 正常屏幕尺寸和中密度。 因此,系統對於高密度屏幕向上擴展默認密度 資源,對於低密度屏幕向下擴展。 
當系統查找密度特定的資源但在 密度特定目錄中未找到時,不一定會使用默認資源。系統在縮放時可能 改用其他密度特定資源提供更好的 效果。例如,查找低密度資源但該資源不可用時, 系統會縮小資源的高密度版本,因爲 系統可輕鬆以 0.5 爲係數將高密度資源縮小至低密度資源,與以 0.75 爲係數 縮小中密度資源相比,僞影更少。 
如需有關 Android 如何通過使配置 限定符與設備配置匹配來選擇替代資源的更多信息,請參閱 Android 如何 查找最佳匹配資源。

使用配置限定符

Android 支持多種配置限定符,可讓您控制系統 如何根據當前設備屏幕的特性選擇替代資源。配置限定符是可以附加到 Android 項目中資源目錄的字符串,用於指定在其中設計資源的配置。

要使用配置限定符:

在項目的 res/ 目錄中新建一個目錄,並使用以下 格式命名: <resources_name>-<qualifier>
<resources_name> 是標準資源名稱(例如 drawable 或 layout)。
<qualifier> 是下表 1 中的配置限定符,用於指定 要使用這些資源的屏幕配置(例如 hdpi 或 xlarge)。
您可以一次使用多個 <qualifier> — 只需使用短劃線分隔每個 限定符。
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

將適當的配置特定資源保存在此新目錄下。這些資源 文件的名稱必須與默認資源文件完全一樣。 
例如,xlarge 是超大屏幕的配置限定符。將 此字符串附加到資源目錄名稱(例如 layout-xlarge)時,它指向 要在具有超大屏幕的設備上使用這些資源的系統。

表 1. 可用於爲 不同屏幕配置提供特殊資源的配置限定符。

屏幕特性    限定符 說明
尺寸  small   適用於小尺寸屏幕的資源。
normal  適用於正常尺寸屏幕的資源。(這是基線尺寸。)
large   適用於大尺寸屏幕的資源。
xlarge  適用於超大尺寸屏幕的資源。
密度  ldpi    適用於低密度 (ldpi) 屏幕 (~120dpi) 的資源。
mdpi    適用於中密度 (mdpi) 屏幕 (~160dpi) 的資源。(這是基線 密度。)
hdpi    適用於高密度 (hdpi) 屏幕 (~240dpi) 的資源。
xhdpi   適用於超高密度 (xhdpi) 屏幕 (~320dpi) 的資源。
xxhdpi  適用於超超高密度 (xxhdpi) 屏幕 (~480dpi) 的資源。
xxxhdpi 適用於超超超高密度 (xxxhdpi) 屏幕 (~640dpi) 的資源。此限定符僅適用於 啓動器圖標,請參閱上面的注。
nodpi   適用於所有密度的資源。這些是密度獨立的資源。不管當前屏幕的密度如何,系統都不會 縮放以此限定符標記的資源。
tvdpi   適用於密度介於 mdpi 和 hdpi 之間屏幕(約爲 213dpi)的資源。它並不是 “主要”密度組,主要用於電視,而大多數應用都不 需要它 — 對於大多數應用而言,提供 mdpi 和 hdpi 資源便已足夠,系統將根據需要對其進行 縮放。如果發現必須提供 tvdpi 資源,應以 1.33*mdpi 的係數 調整其大小。例如,mdpi 屏幕的 100px x 100px 圖像應該相當於 tvdpi 的 133px x 133px。
方向  land    適用於橫屏(長寬比)的資源。
方向port  適用於豎屏(高寬比)的資源。
縱橫比 long    適用於縱橫比明顯高於或寬於(分別在豎屏 或橫屏時)基線屏幕配置的屏幕的資源。
notlong 適用於使用縱橫比類似於基線屏幕 配置的屏幕的資源。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

注:如果是爲 Android 3.2 和 更高版本開發應用,請參閱有關聲明適用於 Android 3.2 的平板電腦佈局的章節,瞭解 在爲特定屏幕尺寸聲明佈局資源時應使用的 新配置限定符(而不是使用表 1 中的尺寸限定符)。

如需瞭解有關這些限定符如何粗略地對應於實際屏幕 尺寸和密度的更多信息,請參閱本文檔前面的支持的屏幕範圍 。

例如,以下應用資源目錄 爲不同屏幕尺寸和不同可繪製對象提供不同的佈局設計。使用 mipmap/ 文件夾放置 啓動器圖標。

res/layout/my_layout.xml // layout for normal screen size (“default”) 
res/layout-large/my_layout.xml // layout for large screen size 
res/layout-xlarge/my_layout.xml // layout for extra-large screen size 
res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation

res/drawable-mdpi/graphic.png // bitmap for medium-density 
res/drawable-hdpi/graphic.png // bitmap for high-density 
res/drawable-xhdpi/graphic.png // bitmap for extra-high-density 
res/drawable-xxhdpi/graphic.png // bitmap for extra-extra-high-density

res/mipmap-mdpi/my_icon.png // launcher icon for medium-density 
res/mipmap-hdpi/my_icon.png // launcher icon for high-density 
res/mipmap-xhdpi/my_icon.png // launcher icon for extra-high-density 
res/mipmap-xxhdpi/my_icon.png // launcher icon for extra-extra-high-density 
res/mipmap-xxxhdpi/my_icon.png // launcher icon for extra-extra-extra-high-density

請注意,當 Android 系統在運行時選擇使用哪些資源時,它會使用 特定邏輯確定“最佳匹配”資源。也就是說,您使用的限定符無 需在所有情況下精確匹配當前屏幕配置,系統也可 使用它們。特別是,根據屏幕尺寸限定符選擇資源時,如果沒有更好的匹配資源,則系統將 使用專爲小於當前屏幕的屏幕而設計的 資源(例如,如有必要,大尺寸屏幕將使用標準尺寸的屏幕 資源)。但是,如果唯一可用的資源大於當前屏幕, 則系統不會使用這些資源,並且如果沒有其他資源與設備 配置匹配,應用將會崩潰(例如,如果所有佈局資源均用 xlarge 限定符標記, 但設備是標準尺寸的屏幕)。 
提示:如果您有一些系統 應該永遠不會縮放(或許是因爲您在 運行時親自對圖像做一些調整)的可繪製對象資源,則應將它們放在有 nodpi 配置限定符的目錄中。 使用此限定符的資源被視爲與密度無關,系統不會縮放 它們。

設計替代佈局和可繪製對象

您應該創建的替代資源類型取決於應用的需求。 通常,您應該使用尺寸和方向限定符提供替代佈局資源 ,並且使用密度限定符提供替代位圖可繪製對象資源。

以下各節摘要說明您可能要如何使用尺寸和密度限定符 來分別提供替代佈局和可繪製對象。

替代佈局

一般而言,在不同的屏幕配置上測試應用後,您會知道 是否需要用於不同屏幕尺寸的替代佈局。例如:

在小屏幕上測試時,可能會發現您的佈局不太適合 屏幕。例如,小屏幕設備的屏幕寬度可能無法容納一排 按鈕。在此情況下,您應該爲小屏幕提供調整 按鈕大小或位置的替代佈局。 
在超大屏幕上測試時,可能會發現您的佈局無法 有效地利用大屏幕,並且明顯拉伸填滿屏幕。 在此情況下,您應該爲超大屏幕提供替代佈局,以提供 針對大屏幕(例如平板電腦)優化、重新設計的 UI。 
雖然您的應用不使用替代佈局也能在大屏幕上正常運行,但 必須讓用戶感覺您的應用看起來像是專爲其 設備而設計。如果 UI 明顯拉伸,用戶很可能對 應用體驗不滿意。 
而且,對比橫屏測試和豎屏測試時 可能會發現,豎屏時置於底部的 UI 在橫屏時應位於屏幕右側。 
簡而言之,您應確保應用佈局:

適應小屏幕(讓用戶能實際使用您的應用) 
已針對大屏幕優化,可以利用其他屏幕空間 
已同時針對橫屏和豎屏方向優化 
如果 UI 使用的位圖即使在系統縮放 佈局後也需要適應視圖大小(例如按鈕的背景圖片),則應使用九宮格位圖文件。九宮格文件基本上是一個指定可拉伸的二維區域的 PNG 文件。 當系統需要縮放使用位圖的視圖時,系統 會拉伸九宮格位圖,但只拉伸指定的區域。因此,您無 需爲不同的屏幕尺寸提供不同的可繪製對象,因爲九宮格位圖可 調整至任何大小。但您應該爲不同的屏幕密度提供 九宮格文件的替代版本。

替代可繪製對象

這裏寫圖片描述 
圖 4. 支持每種密度的 位圖可繪製對象的相對大小。

基本上每個應用都應該具有不同密度的替代可繪製對象 資源,因爲基本上每個應用都有啓動器圖標,而且該圖標應該在 所有屏幕密度中看起來都很好。同樣,如果您的應用中包含其他位圖可繪製對象(例如 應用中的菜單圖標或其他圖形),則應該爲不同密度提供替代版本或 每種密度一個版本。

注:您只需要爲 位圖文件(.png、.jpg 或 .gif)和九宮格文件 (.9.png) 提供密度特定的可繪製對象。如果您使用 XML 文件定義形狀、顏色或其他可繪製對象資源,應該 將一個副本放在默認可繪製對象目錄中 (drawable/)。

要爲不同的密度創建替代位圖可繪製對象,應遵循六種通用密度之間的 3:4:6:8:12:16 縮放比率。例如,如果您的 位圖可繪製對象是對中密度屏幕使用 48x48 像素,則所有不同的尺寸應爲:

36x36 (0.75x) 用於低密度 
48x48(1.0x 基線)用於中密度 
72x72 (1.5x) 用於高密度 
96x96 (2.0x) 用於超高密度 
144x144 (3.0x) 用於超超高密度 
192x192 (4.0x) 用於超超超高密度(僅限啓動器圖標;請參閱上面的 注) 
如需瞭解有關設計圖標的更多信息,請參閱圖標設計指南, 其中包含各種位圖可繪製對象(例如啓動器圖標、菜單 圖標、狀態欄圖標、選項卡圖標等)的大小信息。

聲明適用於 Android 3.2 的平板電腦佈局 
對於第一代運行 Android 3.0 的平板電腦,聲明平板電腦 的正確方式是將它們放在有 xlarge 配置限定符的目錄(例如 res/layout-xlarge/)中。爲適應其他類型的平板電腦和屏幕 尺寸 — 特別是 7 英寸平板電腦 — Android 3.2 引入了爲更具體的屏幕尺寸指定資源 的新方式。新技術基於佈局需要的空間量 (例如 600dp 寬),而不是嘗試讓您的佈局容納通用化的尺寸組 (例如大或超大)。

使用通用化的尺寸組時,爲 7 英寸平板電腦設計很棘手的原因在於, 7 英寸平板電腦在技術上與 5 英寸手機屬於同一個組(大組)。雖然 這兩種設備在尺寸上似乎很接近,但用於 應用 UI 的空間量明顯不同,用戶交互的方式也是如此。因此,7 英寸和 5 英寸 屏幕不一定使用相同的佈局。爲便於您爲這兩種屏幕提供不同的 佈局,Android 現在允許您 根據實際適用於應用佈局的寬度和/或高度指定佈局資源( 以 dp 單位數指定)。

例如,在設計要用於平板電腦樣式設備的佈局之後,您可能 發現該佈局在屏幕寬度小於 600dp 時不適用。此閾值 於是變成平板電腦佈局需要的最小尺寸。因此,您現在可以指定應僅當至少有 600dp 寬度供應用的 UI 使用時才使用這些佈局資源。

應選擇一個寬度並將其設計爲最小尺寸,或者在佈局設計完成後測試 其支持的最小寬度。

注:請記住,這些新尺寸 API 使用的所有數據是密度獨立的像素 (dp) 值,您的佈局尺寸也應始終 使用 dp 單位定義,因爲您關注的是系統 考慮屏幕密度後可用的屏幕空間量(與使用原始像素分辨率相反)。如需瞭解 密度獨立像素的更多信息,請參閱本文檔前面的術語和概念 。

使用新尺寸限定符

表 2 摘要列出了您可以根據 佈局可用空間指定的不同資源配置。與傳統的屏幕尺寸組(小、 正常、大和超大)相比,這些新的限定符可用於更多地控制 應用支持的屏幕尺寸。

注:您使用這些限定符指定的尺寸 不是實際屏幕尺寸。更確切地說,尺寸是 可用於 Activity 窗口的寬度或高度(dp 單位)。Android 系統 可能將某些屏幕用於系統 UI(例如屏幕底部的系統欄或 頂部的狀態欄),因此有些屏幕可能不適用於您的佈局。因此, 您聲明的尺寸應與 Activity 需要的尺寸具體相關 — 系統 在聲明向您的佈局提供的空間量時會計算系統 UI 使用的任何空間。 另請注意,操作欄被視爲 應用的窗口空間的一部分,但您的佈局未聲明此事,因此會減少 您的佈局可用的空間,您在設計時必須考慮進去。

表 2. 屏幕尺寸的新配置限定符 (在 Android 3.2 中引入)。 
屏幕配置 限定符值 說明

smallestWidth   sw<N>dp
  • 1
  • 1

示例: 
sw600dp 
sw720dp

屏幕的基本尺寸,由可用屏幕區域的最小尺寸指定。 具體來說,設備的 smallestWidth 是屏幕可用高度和寬度的最小尺寸(您也可以將其視爲屏幕的“最小可能寬度”)。無論屏幕的當前方向如何,您均可使用此限定符確保應用 UI 的可用寬度至少爲 <N>dp。

例如,如果佈局要求屏幕區域的最小尺寸始終至少爲 600 dp,則可使用此限定符創建佈局資源 res/layout-sw600dp/。僅當可用屏幕的最小尺寸至少爲 600dp 時,系統纔會使用這些資源,而不考慮 600dp 所代表的邊是用戶所認爲的高度還是寬度。smallestWidth 是設備的固定屏幕尺寸特性;設備的 smallestWidth 不會隨屏幕方向的變化而改變。

設備的 smallestWidth 將屏幕裝飾元素和系統 UI 考慮在內。例如,如果設備的屏幕上有一些永久性 UI 元素佔據沿 smallestWidth 軸的空間,則系統會聲明 smallestWidth 小於實際屏幕尺寸,因爲這些屏幕像素不適用於您的 UI。

這可替代通用化的屏幕尺寸限定符(小、正常、大、超大), 可讓您爲 UI 可用的有效尺寸定義不連續的數值。 使用 smallestWidth 定義一般屏幕尺寸很有用,因爲寬度 通常是設計佈局時的驅動因素。UI 經常會垂直滾動,但 對其水平需要的最小空間具有非常硬性的限制。可用的寬度也是 確定是否對手機使用單窗格佈局或是對平板電腦使用多窗格佈局 的關鍵因素。因此,您可能最關注每部 設備上的最小可能寬度。
可用屏幕寬度  w<N>dp

示例:
w720dp
w1024dp
指定資源應該使用的最小可用寬度(dp 單位) — 由 <N> 值定義。當屏幕的方向在橫屏與豎屏之間切換時,系統對應的 寬度值將會變化,以 反映 UI 可用的當前實際寬度。

這對於確定是否使用多窗格佈局往往很有用,因爲即使是在 平板電腦設備上,您也通常不希望豎屏像橫屏一樣 使用多窗格佈局。因此,您可以使用此功能指定佈局需要的最小寬度,而 無需同時使用屏幕尺寸和方向限定符。
可用屏幕高度  h<N>dp

示例:
h720dp
h1024dp
等等  
指定資源應該使用的最小屏幕高度(dp 單位) — 由 <N> 值定義。當屏幕的方向在橫屏與豎屏之間切換時,系統 對應的高度值將會變化,以 反映 UI 可用的當前實際高度。

使用此方式定義 佈局需要的高度很有用,它與使用 w<N>dp 定義 所需寬度的方式相同,無需同時使用屏幕尺寸和方向限定符。 但大多數應用不需要此限定符,考慮到 UI 經常垂直滾動, 因此高度更彈性,而寬度更剛性。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

雖然使用這些限定符似乎比使用屏幕尺寸組更復雜,但 當您確定 UI 的要求後,它實際上應該更簡單。在設計 UI 時, 您主要關注的可能是應用在 手機樣式 UI 與使用多窗格的平板電腦樣式 UI 之間切換時的實際尺寸。此確切的精確時間 取決於特定設計 — 可能平板電腦佈局需要 720dp 寬度, 但 600dp、480dp 或這兩者之間的某個值就夠了。使用表 2 中的這些限定符 可以控制佈局切換時的精確尺寸。

如需有關這些尺寸配置限定符的更多討論,請參閱 提供資源文檔。

配置示例

爲幫助您針對不同的設備類型確定某些設計,下面提供了一些 常見的屏幕寬度值:

320dp:常見手機屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。 
480dp:中間平板電腦,例如 Streak (480x800 mdpi)。 
600dp:7 英寸平板電腦 (600x1024 mdpi)。 
720dp:10 英寸平板電腦(720x1280 mdpi、800x1280 mdpi 等)。 
利用表 2 中的尺寸限定符,您的應用可以使用要用於寬度和/或高度的 的任何值,在用於手機和平板電腦的不同佈局資源之間切換。例如, 如果 600dp 是平板電腦佈局支持的最小可用寬度,您可以提供以下兩 組佈局:

res/layout/main_activity.xml # For handsets 
res/layout-sw600dp/main_activity.xml # For tablets 
在此情況下,可用屏幕空間的最小寬度必須是 600dp,纔可 應用平板電腦佈局。

對於要進一步自定義 UI 以區分不同尺寸 (例如 7 英寸和 10 英寸平板電腦)的其他情況,您可以定義其他最小寬度佈局:

res/layout/main_activity.xml # For handsets (smaller than 600dp available width) 
res/layout-sw600dp/main_activity.xml # For 7” tablets (600dp wide and bigger) 
res/layout-sw720dp/main_activity.xml # For 10” tablets (720dp wide and bigger) 
請注意,上面兩組示例資源使用“最小寬度”限定符 swdp,用於指定屏幕兩邊的最小值,而不管設備 當前的方向如何。

因此,使用 sw<N>dp 是指定 佈局可用於整體屏幕尺寸的簡便方法,它會忽略屏幕的方向。
  • 1
  • 1

但在某些情況下,可能 必須確定佈局當前可用的精確寬度或高度。例 如,如果是並排顯示兩個片段的雙窗格佈局,則只要 屏幕提供至少 600dp 的寬度(無論設備是橫屏還是豎屏), 您可能就要使用該佈局。在此情況下,您的資源可能與以下所示類似:

res/layout/main_activity.xml         # For handsets (smaller than 600dp available width)
res/layout-w600dp/main_activity.xml  # Multi-pane (any screen with 600dp available width or more)
請注意,第二組使用“可用寬度”限定符 w<N>dp。這 樣,一部設備可能實際使用兩種佈局,具體取決於屏幕的方向(如果 可用的寬度在一個方向上至少爲 600dp,而在另一個方向上小於 600dp)。

如果您關注可用高度,便可使用 h<N>dp 限定符執行同樣的操作。或者,如果您需要很具體,甚至可以結合 w<N>dp 與 h<N>dp 限定符。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

聲明屏幕尺寸支持

在對不同的屏幕尺寸實現您的佈局後,在 清單文件中聲明您的應用支持哪些屏幕相當重要。

與用於屏幕尺寸的新配置限定符一起,Android 3.2 爲 supports-screens>清單元素引入了新的屬性:

android:requiresSmallestWidthDp 
指定需要的最小 smallestWidth。smallestWidth 是必須爲您的應用 UI 提供的 屏幕空間的最短尺寸(dp 單位)—即 可用屏幕的兩個尺寸中的最短者。因此,爲使設備 與您的應用兼容,設備的 smallestWidth 必須等於或大於此 值。(通常,無論屏幕的當前方向如何, 此值都是佈局支持的“最小寬度”。) 
例如,如果您的應用只用於最小可用寬度爲 600dp 的平板電腦樣式設備:

<manifest ... >
    <supports-screens android:requiresSmallestWidthDp="600" />
    ...
</manifest>
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

但是,如果您的應用支持 Android 支持的所有屏幕尺寸(小至 426dp x 320dp),則無需聲明此屬性,因爲應用 需要的最小寬度就是任何設備上可以實現的最小寬度。

注意:Android 系統不關注此 屬性,因爲它不影響應用在運行時的行爲,而是被用於 在服務(例如 Google Play)上過濾您的應用。但是, Google Play 目前不支持此屬性用於過濾(在 Android 3.2 上),因此如果您的應用不支持 小屏幕,您應繼續使用其他尺寸屬性。

android:compatibleWidthLimitDp 
此屬性可讓您指定用戶支持的最大“最小寬度”,將屏幕兼容性模式用作 用戶可選的功能 。如果設備可用屏幕的最小邊大於您在這裏的值, 用戶仍可安裝您的應用,但提議在屏幕兼容性模式下運行。默認 情況下,屏幕兼容性模式會停用,並且您的佈局照例會調整大小以 適應屏幕,但按鈕會顯示在系統欄中,可讓用戶打開和關閉屏幕兼容性 模式。 
注:如果您的應用可針對大 屏幕正確調整大小,則無需使用此屬性。建議不要使用此 屬性,而是按照本文檔的 建議,確保您的佈局針對較大屏幕調整大小。

android:largestWidthLimitDp 
此屬性可讓您指定應用支持的最大“最小寬度”來強制啓用屏幕兼容性模式。 如果設備可用屏幕的最小 邊大於您在這裏的值,應用將在屏幕 兼容性模式下運行,且用戶無法停用該模式。 
注:如果您的應用可針對大 屏幕正確調整大小,則無需使用此屬性。建議不要使用此 屬性,而是按照本文檔的 建議,確保您的佈局針對較大屏幕調整大小。

注意:針對 Android 3.2 及更高版本開發時,您 應改爲將舊屏幕尺寸屬性與上列 屬性結合使用。同時使用新屬性和舊尺寸屬性可能導致 非預期的行爲。

如需瞭解每個屬性的更多信息,請跟隨上面各自的鏈接。

最佳做法

支持多種屏幕的目標是創建一款在 Android 系統支持的通用屏幕尺寸上都可以 正常運行且顯示良好的應用。本文檔 前面各節內容介紹了 Android 系統如何使您的 應用適應屏幕配置,以及如何在不同的 屏幕配置上自定義應用的外觀。本節提供另外一些提示以及有助於 確保應用針對不同屏幕配置正確縮放的 技巧概覽。

下面是有關如何確保應用在 不同屏幕上正常顯示的快速檢查清單:

在 XML 佈局文件中指定尺寸時使用 wrap_content、match_parent 或 dp 單位 。 
不要在應用代碼中使用硬編碼的像素值 
不要使用 AbsoluteLayout(已棄用) 
爲不同屏幕密度提供替代位圖可繪製對象 
下文將提供更詳細的信息。

  1. 對佈局尺寸使用 wrap_content、match_parent 或 dp 單位 
    爲 XML 佈局文件中的視圖定義 android:layout_width 和 android:layout_height 時,使用 “wrap_content”、 “match_parent” 或 dp 單位可確保在當前設備屏幕上爲 視圖提供適當的尺寸。

例如,layout_width=”100dp” 的視圖在 中密度屏幕上測出寬度爲 100 像素,在高密度屏幕上系統會將其擴展至 150 像素寬, 因此視圖在屏幕上佔用的物理空間大約相同。

類似地,您應選擇 sp(縮放獨立的像素)來定義文本 大小。sp 縮放係數取決於用戶設置,系統 會像處理 dp 一樣縮放大小。

  1. 不要在應用代碼中使用硬編碼的像素值 
    由於性能的原因和簡化代碼的需要,Android 系統使用像素作爲 表示尺寸或座標值的標準單位。這意味着, 視圖的尺寸在代碼中始終以像素表示,但始終基於當前的屏幕密度。 例如,如果 myView.getWidth() 返回 10,則表示視圖在 當前屏幕上爲 10 像素寬,但在更高密度的屏幕上,返回的值可能是 15。如果 在應用代碼中使用像素值來處理預先未針對 當前屏幕密度縮放的位圖,您可能需要縮放代碼中使用的像素值,以與 未縮放的位圖來源匹配。

如果應用在運行時操作位圖或處理像素值,請參閱 下面有關其他密度注意事項的一節。

  1. 不要使用 AbsoluteLayout 
    與其他佈局小工具不同,AbsoluteLayout 會強制 使用固定位置放置其子視圖,很容易導致 在不同顯示屏上顯示效果不好的用戶界面。因此,AbsoluteLayout 在 Android 1.5(API 級別 3)上便已棄用。

您應改用 RelativeLayout,它會使用相對定位 來放置其子視圖。例如,您可以指定按鈕小部件顯示在文本小工具的“右邊”。

  1. 使用尺寸和密度特定資源 
    雖然系統會根據當前屏幕 配置擴展布局,但您在不同的屏幕尺寸上可能要調整 UI,以及提供 針對不同密度優化的可繪製對象。這基本上是重申 本文檔前面的信息。

如果需要精確控制應用在不同 屏幕配置上的外觀,請在配置特定的 資源目錄中調整您的佈局和位圖可繪製對象。例如,考慮要顯示在 中密度和高密度屏幕上的圖標。只需創建兩種不同大小的圖標 (例如中密度使用 100x100,高密度使用 150x150),然後使用適當的限定符 以適當的方向放置兩個 變體:

res/drawable-mdpi/icon.png //for medium-density screens 
res/drawable-hdpi/icon.png //for high-density screens 
注:如果密度限定符在目錄名稱中未定義, 系統會假設該目錄中的資源是針對基線中 密度而設計,對於其他密度將會適當地縮放。

其他密度注意事項

本節詳細說明 Android 如何在不同 屏幕密度上對位圖可繪製對象執行縮放,以及如何進一步控制在不同密度屏幕上位圖的繪製。 本節信息對大多數應用應該不怎麼重要,除非您的 應用在不同屏幕密度上運行或 操控圖形時遇到了問題。

爲更好地瞭解在運行時 操控圖形時如何支持多種密度,您應該先了解,系統通過以下方式幫助確保正確 縮放位圖:

資源(例如位圖可繪製對象)的預縮放

根據當前屏幕的密度,系統將使用您的應用中提供的任何尺寸或 密度特定資源,並且不加縮放而顯示它們。如果沒有可用於正確密度 的資源,系統將加載默認資源,並按需要向上或向下擴展,以 匹配當前屏幕的密度。系統假設默認資源( 沒有配置限定符的目錄中的資源)針對基線屏幕密度 (mdpi) 而設計, 除非它們加載自密度特定的資源目錄。因此,系統 會執行預縮放,以將位圖調整至適應當前屏幕 密度的大小。 
如果您請求預縮放的資源的尺寸,系統將返回 代表縮放後尺寸的值。例如,針對 mdpi 屏幕以 50x50 像素 設計的位圖在 hdpi 屏幕上將擴展至 75x75 像素(如果沒有 用於 hdpi 的替代資源),並且系統會這樣報告大小。 
有時您可能不希望 Android 預縮放 資源。避免預縮放最簡單的方法是將資源放在 有 nodpi 配置限定符的資源目錄中。例如: 
res/drawable-nodpi/icon.png 
當系統使用此文件夾中的 icon.png 位圖時,不會 根據當前設備密度縮放。

像素尺寸和座標的自動縮放

應用可通過在清單中將 android:anyDensity 設置爲 “false” 或者通過將 inScaled 設置爲 “false” 對 Bitmap 編程來停用預縮放。在此情況下,系統在繪製時會自動縮放任何絕對的像素座標和像素 尺寸值。縮放的目的是確保像素定義的屏幕元素仍 以它們在基線屏幕密度 (mdpi) 下的大致相同物理尺寸顯示。系統會對應用透明地處理此縮放,並且 嚮應用報告縮放後的像素尺寸,而不是物理像素尺寸。 
例如,假設設備具有 480x800 的 WVGA 高密度屏幕,大約 與傳統 HVGA 屏幕的尺寸一樣,但它運行的應用停用了 預縮放。在此情況下,系統在查詢屏幕尺寸時會對應用“撒謊” ,報告 320x533(屏幕密度的近似 mdpi 轉換值)。然後,當 應用執行繪製操作時,例如作廢從 (10,10) 到 (100, 100) 的矩形,系統會將它們縮放適當的量以轉變座標,並且實際 作廢區域 (15,15) 到 (150, 150)。如果應用直接操控縮放的位圖, 此差異可能會導致非預期的行爲,但這被視爲 確保應用最佳性能所需的合理權衡。如果遇到此 情況,請參閱將 dp 單位轉換爲像素 單位一節。 
通常,不應停用預縮放。支持多種 屏幕的最佳方法是採用上面如何支持 多種屏幕中所述的基本技術。 
如果您的應用操控位圖或以某種其他方式直接與 屏幕上的像素交互,您可能需要採取其他步驟支持不同的屏幕密度。例 如,如果您通過計算手指滑過的像素數 來響應觸控手勢,則需使用適當的密度獨立像素值,而不是實際 像素。

縮放運行時創建的位圖對象

這裏寫圖片描述 
圖 5. 預縮放的位圖與自動縮放的 位圖比較。

如果您的應用創建內存中位圖(Bitmap 對象), 系統在默認情況下假設位圖是針對基線中密度屏幕而設計,然後 在繪製時自動縮放位圖。當位圖具有不明的密度屬性時,系統會對 Bitmap 應用“自動縮放”。如果未正確 考慮當前設備的屏幕密度和指定位圖的密度屬性, 自動縮放可能導致縮放僞影,就像未提供替代 資源一樣。

要控制是否縮放運行時創建的 Bitmap,可以 使用 setDensity() 指定位圖的密度, 從 DisplayMetrics 傳遞密度常量,例如 DENSITY_HIGH 或 DENSITY_LOW。

如果使用 BitmapFactory 創建 Bitmap,例如從文件或流創建,可以使用 BitmapFactory.Options 定義位圖的屬性(因爲 它已經存在),確定系統是否要縮放或者如何縮放。例如,您可以使用 inDensity 字段定義 位圖設計時的密度,使用 inScaled 字段指定位圖是否應縮放以 匹配當前設備的屏幕密度。

如果將 inScaled 字段設置爲 false,然後停用 系統可能應用到位圖的預縮放,則系統在繪製時將自動 縮放它。使用自動縮放代替預縮放可能耗用的 CPU 更多,但耗用的內存 更少。

圖 5 所示爲在高密度屏幕上加載低 (120)、中 (160) 和高 (240) 密度位圖時預縮放和自動縮放機制產生的效果。差異 很小,因爲所有位圖都針對當前屏幕密度而縮放,但根據在繪製時 是預縮放還是自動縮放, 縮放後位圖的外觀略有不同。

注:在 Android 3.0 的更高版本中,由於圖形框架的改進,應該覺察不出預縮放的位圖 與自動縮放的位圖之間 的差異。

將 dp 單位轉換爲像素單位

在某些情況下,您需要以 dp 表示尺寸,然後將它們轉換爲 像素。設想一個在用戶 手指移動至少 16 像素之後可以識別滾動或滑動手勢的應用。在基線屏幕上,用戶必須移動 16 pixels / 160 dpi(等於一英寸的 1/10 或 2.5 毫米),然後纔會識別該手勢。在 具有高密度顯示屏 (240dpi) 的設備上,用戶必須移動 16 pixels / 240 dpi(等於 一英寸的 1/15 或 1.7 毫米)。此距離更短,應用因此 似乎對用戶更靈敏。

要修復此問題,手勢閾值必須在代碼中以 dp 表示,然後 轉換爲實際像素。例如:

// The gesture threshold expressed in dp 
private static final float GESTURE_THRESHOLD_DP = 16.0f;

// Get the screen’s density scale 
final float scale = getResources().getDisplayMetrics().density; 
// Convert the dps to pixels, based on density scale 
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);

// Use mGestureThreshold as a distance in pixels… 
DisplayMetrics.density 字段根據當前屏幕密度指定 將 dp 單位轉換爲像素必須使用的縮放係數。 在中密度屏幕上,DisplayMetrics.density 等於 1.0;在高密度屏幕上,它等於 1.5;在超高密度屏幕上,等於 2.0; 在低密度屏幕上,等於 0.75。此數字是一個係數,應用其乘以 dp 單位以獲取用於當前屏幕的實際像素數。(然後在轉換時加上 0.5f,將該數字四捨五入到最接近的整數。)如需瞭解 詳細信息,請參閱 DisplayMetrics 類。

但是,不能爲此類事件定義任意閾值,而應 使用 ViewConfiguration 中的預縮放配置值。.

使用預縮放的配置值 
您可以使用 ViewConfiguration 類訪問 Android 系統使用的通常距離、 速度和時間。例如, 使用 getScaledTouchSlop() 可獲取框架用作滾動閾值的距離(像素):

private static final int GESTURE_THRESHOLD_DP = ViewConfiguration.get(myContext).getScaledTouchSlop(); 
ViewConfiguration 中以 getScaled 前綴 開頭的方法確定會返回不管當前屏幕密度爲何都會正常顯示的 像素值。

如何在多個屏幕上測試您的應用

這裏寫圖片描述 
圖 6. 一組用於測試屏幕支持的 AVD。

在發佈應用之前,應在所有支持的屏幕 尺寸和密度中全面測試。Android SDK 包含可以使用的模擬器皮膚, 它們會複製您的應用可能要在其中運行的常見屏幕配置的 尺寸和密度。也可修改模擬器皮膚的默認尺寸、密度和分辨率, 以複製任何特定屏幕的特性。使用模擬器皮膚和其他 自定義配置可測試任何可能的屏幕配置,因此您無 需僅僅爲了測試應用的屏幕支持而購買不同的設備。

要設置環境以測試應用的屏幕支持,應使用能模擬您希望應用支持的 屏幕尺寸和密度的模擬器皮膚和屏幕配置創建 一系列 AVD (Android Virtual Devices)。要執行此操作,可以使用 AVD Manager 創建 AVD 並使用圖形界面啓動它們。

要啓動 Android SDK Manager,從您的 Android SDK 目錄執行 SDK Manager.exe(僅在 Windows 上),或者從 /tools/ 目錄執行 android(在所有平臺上)。圖 6 所示爲用於測試不同屏幕配置的 AVD Manager(選擇了 AVD)。

表 3 所示爲 Android SDK 中可用的各種模擬器皮膚,可用 以模擬某些最常見的屏幕配置。

如需瞭解有關創建和使用 AVD 測試應用的詳細信息,請參閱使用 AVD Manager 管理 AVD。

表 3. Android SDK(粗體表示)及其他 代表性解決方案中模擬器皮膚提供的 各種屏幕配置

低密度 (120),ldpi  中密度 (160),mdpi  高密度 (240),hdpi  超高密度 (320),xhdpi
小屏幕 QVGA (240x320)      480x640 
正常屏幕    WQVGA400 (240x400) 
WQVGA432 (240x432)  HVGA (320x480)  WVGA800 (480x800) 
WVGA854 (480x854) 
600x1024    640x960
大屏幕 WVGA800** (480x800) 
WVGA854** (480x854) WVGA800* (480x800) 
WVGA854* (480x854) 
600x1024        
超大屏幕    1024x600    WXGA (1280x800)†
1024x768
1280x768    1536x1152
1920x1152 
1920x1200   2048x1536
2560x1536 
2560x1600
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 要模擬此配置,在 創建使用 WVGA800 或 WVGA854 皮膚的 AVD 時請指定自定義密度 160。 
    ** 要模擬此配置,在創建 使用 WVGA800 或 WVGA854 皮膚的 AVD 時請指定自定義密度 120。 
    † 此皮膚可用於 Android 3.0 平臺 
    要查看支持任何指定屏幕配置的活動設備的相對數量,請參閱 屏幕尺寸和密度 儀表板。

這裏寫圖片描述 
圖 7. 從 AVD Manager 啓動 AVD 時可以設置的尺寸和密度選項。

我們還建議您在 設置爲以接近實際設備的物理尺寸運行的模擬器中測試應用。這樣 更容易比較不同尺寸和密度時的結果。要 完成此操作,需要知道計算機顯示器的大約密度 (dpi), 例如 30 英寸 Dell 顯示器的密度約爲 96 dpi。從 AVD Manager 啓動 AVD 時,可在 Launch Options 中指定用於模擬器和您的 顯示器的屏幕尺寸 (dpi),如圖 7 所示。

如果要在使用內置皮膚 不支持的分辨率或密度的屏幕上測試應用,可以創建使用自定義分辨率或密度的 AVD。從 AVD Manager 創建 AVD 時,指定 Resolution, 而不要選擇 Built-in Skin。

從命令行啓動 AVD 時,可以使用 -scale 選項指定用於 模擬器的縮放比例。例如:

emulator -avd <avd_name> -scale 96dpi
  • 1
  • 1

要調整模擬器的大小,可使用 -scale 選項指定代表所需縮放係數的 0.1 至 3。

如需瞭解從命令行創建 AVD 的更多信息,請參閱從命令行管理 AVD。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章