Android適配知識點-全面總結

支持多種屏幕

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

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

按照本文檔所述的作法,您能夠建立 正常顯示的應用,而後使用 一個 .apk 文件在全部支持的屏幕配置中提供優化的用戶體驗。編程

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

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

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

術語和概念

屏幕尺寸

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

屏幕密度

屏幕物理區域中的像素量;一般稱爲 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> — 只需使用短劃線分隔每一個 限定符。
複製代碼

將適當的配置特定資源保存在此新目錄下。這些資源 文件的名稱必須與默認資源文件徹底同樣。 例如,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	適用於使用縱橫比相似於基線屏幕 配置的屏幕的資源。
複製代碼

注:若是是爲 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
複製代碼

示例: 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 常常垂直滾動, 所以高度更彈性,而寬度更剛性。
複製代碼

雖然使用這些限定符彷佛比使用屏幕尺寸組更復雜,但 當您肯定 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 是指定 佈局可用於總體屏幕尺寸的簡便方法,它會忽略屏幕的方向。
複製代碼

但在某些狀況下,可能 必須肯定佈局當前可用的精確寬度或高度。例 如,若是是並排顯示兩個片斷的雙窗格佈局,則只要 屏幕提供至少 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 限定符。
複製代碼

聲明屏幕尺寸支持

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

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

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

<manifest ... >
    <supports-screens android:requiresSmallestWidthDp="600" />
    ...
</manifest>
複製代碼

可是,若是您的應用支持 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
複製代碼
  • 要模擬此配置,在 建立使用 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
複製代碼

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

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

相關文章
相關標籤/搜索