Android 3.2 API

API 級別13

Android 3.2 (HONEYCOMB_MR2) 是漸進式平台版本,為使用者和開發人員新增功能。以下各節概略介紹新功能和開發人員 API。

對開發人員而言,Android 3.2 平台可做為 Android SDK 的可下載元件使用。可下載的平台包含 Android 程式庫和系統映像檔,以及一組模擬器外觀等。如要開始針對 Android 3.2 開發或測試,請使用 Android SDK Manager 將平台下載至您的 SDK。

平台特點

新使用者功能

  • 針對更多種平板電腦進行最佳化調整

    Android 3.2 版包含整個系統的最佳化項目,確保在各種平板電腦裝置上提供優質的使用者體驗。

  • 適用於固定大小應用程式的相容性縮放功能

    Android 3.2 版導入了新的相容性縮放模式,可讓使用者在大型裝置上查看固定大小的應用程式。對於未設計為在較大螢幕 (例如在平板電腦) 上運作的應用程式,新模式提供像素縮放的替代 API 延展選項。如果應用程式需要相容性支援,使用者可以透過系統列中的選單圖示存取新模式。

  • 從 SD 卡同步處理媒體

    在支援 SD 卡的裝置上,使用者現在可以直接從 SD 卡將媒體檔案載入使用的應用程式。系統設施可讓應用程式透過系統媒體儲存區存取檔案。

新的開發人員功能

  • 用於管理螢幕的擴充 API

    Android 3.2 為平台的螢幕支援 API 推出擴充功能,讓開發人員能透過更多方式在各種 Android 裝置上管理應用程式 UI。這個 API 包含新的資源限定詞和新的資訊清單屬性,可讓您更精確地控管應用程式在不同大小的顯示方式,而不必依賴一般大小類別。

    為確保固定大小應用程式和應用程式 (且對各種螢幕大小有限) 能呈現最佳顯示效果,平台也提供新的縮放相容性模式,可在較小的螢幕區域算繪 UI,然後放大畫面來填滿螢幕上的可用空間。如要進一步瞭解螢幕支援 API 及其提供的控制項,請參閱以下各節。

API 總覽

Screens Support API

Android 3.2 版導入了新的螢幕支援 API,可讓您進一步掌控應用程式在不同大小的螢幕中的顯示方式。API 建構於現有的螢幕支援 API (包括平台的通用螢幕密度模型),但擴展的功能可依據密度獨立像素單位 (例如 600dp 或 720dp 寬度) 精確指定特定螢幕範圍,而非以一般螢幕尺寸 (例如大型或特大尺寸)

設計應用程式的 UI 時,您仍可仰賴該平台提供密度抽象化機制,也就是說,應用程式不需要補償不同裝置上的實際像素密度差異。您可以根據可用的水平或垂直空間設計應用程式 UI。平台會使用三種新的特性表示可用的空間大小:smallestWidthwidthheight

  • 螢幕的 smallestWidth 是基本大小的下限,以密度獨立像素 (「dp」) 為單位。則螢幕的高度或寬度較短。對於直向螢幕,最小寬度通常會以其寬度為基準,而在橫向模式中則會以其高度為依據。在所有情況下, smallestWidth 都會衍生自螢幕的固定特性,無論方向為何,這個值都不會改變。smallestWidth 對應用程式而言相當重要,因為這代表需要繪製應用程式 UI 的最短寬度,不含系統保留的螢幕區域。
  • 相反地,螢幕的「寬度」和「高度」代表應用程式版面配置目前可用的水平或垂直空間,以「dp」為單位,不包含系統保留的螢幕區域。當使用者在橫向和直向之間切換時,螢幕的寬度和高度也會隨之變更。

新版螢幕支援 API 旨在協助您根據目前畫面的 smallestWidth 管理應用程式 UI。您也可以視需要根據目前的寬度或高度管理 UI。為此,API 提供下列工具:

  • 新增用於指定目標版面配置和其他資源的資源限定詞,使其小於最小寬度、寬度或高度,
  • 新增資訊清單屬性,用於指定應用程式的螢幕相容性上限範圍

此外,應用程式仍可查詢系統,以及在執行階段管理 UI 和資源載入,就像在舊版平台中一樣。

由於新的 API 可讓您透過 smallestWidth、寬度和高度直接指定螢幕,因此瞭解不同螢幕類型常見的特性對您很有幫助。下表提供部分範例,以「dp」為單位。

表 1. 密度和大小以 dp 為單位的一般裝置

類型 密度 (通用) 尺寸 (dp) smallestWidth (dp)
基準手機 mdpi 320x480 320
小型平板電腦/大型手機 mdpi 480x800 480
7 吋平板電腦 mdpi 600x1024 600
10 吋平板電腦 mdpi 800x1280 800

以下各節將進一步說明新的螢幕限定詞和資訊清單屬性。如需如何使用螢幕支援 API 的完整資訊,請參閱「支援多螢幕」。

支援新的螢幕資源限定詞

Android 3.2 版提供全新的資源限定詞,可讓您更準確地針對螢幕大小範圍指定版面配置。您可以使用限定詞建立專為特定的最小 smallestWidth、目前寬度或目前高度 (以密度獨立像素為單位) 設計的資源設定。

新的限定詞如下:

  • swNNNdp:指定應使用資源的最小 smallestWidth (以「dp」為單位)。如上所述,無論螢幕方向為何,螢幕的 smallestWidth 仍保持不變。範例:sw320dpsw720dpsw720dp
  • wNNNdphNNNdp — 指定應使用資源的最小寬度或高度 (以「dp」為單位)。如上所述,螢幕的寬度和高度會與螢幕方向相關,且會在螢幕方向變更時改變。範例:w320dpw720dph1024dp

您也可以視需要建立多個重疊的資源設定。例如,您可以標記部分資源,用於寬度超過 480 dp 的螢幕,有些則在寬度超過 600 dp 的螢幕,其他資源則可在寬度超過 720 dp 時使用。如果特定畫面有多個資源設定符合條件,系統會選取最相符的設定。如要精確控制特定畫面上要載入的資源,您可以使用一個限定詞標記資源,或結合多個全新或現有的限定詞。

根據先前列出的一般維度,以下提供幾個使用新限定詞的範例:

res/layout/main_activity.xml   # For phones
res/layout-sw600dp/main_activity.xml   # For 7” tablets
res/layout-sw720dp/main_activity.xml   # For 10” tablets
res/layout-w600dp/main_activity.xml   # Multi-pane when enough width
res/layout-sw600dp-w720dp/main_activity.xml   # For large width

舊版平台會忽略新限定詞,因此您可以視需要混合使用,確保應用程式在任何裝置上都能正常顯示。以下列舉幾個範例:

res/layout/main_activity.xml   # For phones
res/layout-xlarge/main_activity.xml   # For pre-3.2 tablets
res/layout-sw600dp/main_activity.xml   # For 3.2 and up tablets

如需如何使用新限定詞的完整資訊,請參閱「使用新的大小限定詞」。

新的螢幕尺寸相容性資訊清單屬性

這個架構提供一組新的 <supports-screens> 資訊清單屬性,可讓您管理應用程式對不同螢幕大小的支援。具體來說,您可以指定應用程式執行時適用的最大和最小螢幕,以及指定執行應用程式的最大螢幕,無需使用系統全新的螢幕相容模式。如同上述的資源限定詞,新的資訊清單屬性會指定應用程式支援的螢幕範圍,如 smallestWidth 指定。

螢幕支援的新資訊清單屬性如下:

  • android:compatibleWidthLimitDp="numDp":這個屬性可讓您指定應用程式在不需相容性模式的情況下,能執行的應用程式最大 smallestWidth。如果目前的螢幕大於指定的值,系統會顯示應用程式以一般模式顯示,但允許使用者透過系統列中的設定,選擇切換至相容模式。
  • android:largestWidthLimitDp="numDp":這個屬性可讓您指定執行應用程式所需的最小 smallestWidth。如果目前畫面大於指定的值,系統會強制應用程式進入螢幕相容模式,確保在目前螢幕上以最佳效果顯示。
  • android:requiresSmallestWidthDp="numDp":這個屬性可讓您指定應用程式可執行的最小 smallestWidth。如果目前的畫面小於指定值,系統會認為應用程式與裝置不相容,但不會阻止使用者安裝及執行。

注意:Google Play 目前不會根據上述任何屬性篩選應用程式。日後的平台版本將新增篩選功能。如果應用程式需要根據螢幕大小篩選,可以使用現有的 <supports-screens> 屬性。

如需如何使用新屬性的完整資訊,請參閱「宣告支援螢幕大小」一文。

螢幕相容模式

Android 3.2 版為應用程式明確提供新的螢幕相容模式,並明確宣告其支援的螢幕尺寸與執行中的螢幕大不相同。這個新的「縮放」模式是一種像素縮放模式,它會在較小的螢幕區域中算繪應用程式,然後縮放像素以填滿目前螢幕。

對於需要螢幕相容模式的應用程式,系統預設會提供螢幕相容模式。使用者可以透過系統列中的控制項開啟或關閉縮放模式。

由於新的螢幕相容性模式可能不適合所有應用程式,因此平台允許應用程式使用資訊清單屬性將其停用。應用程式停用時,系統不會在應用程式執行時為使用者提供「縮放」相容性模式。

注意:如需瞭解在應用程式中控制相容性模式的重要資訊,請參閱 Android 開發人員網誌的「大螢幕上的應用程式新模式」一文。

適用於 720p 的電視和其他類似裝置的全新螢幕密度

為了滿足在 720p 電視或具備中等密度螢幕執行類似的應用程式的需求,Android 3.2 推出了全新的概略密度 (tvdpi,dpi 為 213)。應用程式可以在 densityDpi 中查詢新密度,也可以使用新的 tvdpi 限定詞為電視和類似裝置標記資源。例如:

res/drawable-tvdpi/my_icon.png   # Bitmap for tv density

一般來說,應用程式不需要搭配這個密度運作。如果 720p 螢幕需要輸出,平台可以自動縮放 UI 元素。

UI 架構

  • 片段
    • 新的 Fragment.SavedState 類別會保留透過 saveFragmentInstanceState() 從片段執行個體擷取的狀態資訊。
    • 新方法 saveFragmentInstanceState() 會儲存指定片段的目前例項狀態。之後在建立符合目前狀態的 Fragment 新執行個體時,可以使用這個狀態。
    • 新方法 setInitialSavedState() 會在首次建構 Fragment 時設定 Fragment 的初始儲存狀態。
    • 新的 onViewCreated() 回呼方法會通知 Fragment 已傳回 onCreateView(),但在將任何已儲存狀態還原至檢視畫面之前。
    • isDetached() 方法會決定 Fragment 是否已從 UI 明確卸離。
    • 新的 attach()detach() 方法可讓應用程式在 UI 中重新附加或卸離片段。
    • 新的 setCustomAnimations() 超載方法可讓您設定要執行進入/結束作業的特定動畫資源,特別是在彈出返回堆疊時。現有的實作在彈出返回堆疊時,不會考慮片段的不同行為。
  • ActivityInfo 和 ApplicationInfo 中的螢幕大小資訊
  • 從 WindowManager 取得顯示大小的輔助程式
  • 新的公開「全像」樣式
    • 這個平台現在提供適用於文字、動作列小工具和分頁等多種公開「全像圖」樣式。如需完整清單,請參閱 R.style
  • LocalActivityManagerActivityGroupLocalActivityManager 現已淘汰
    • 新應用程式應使用 Fragment,而不是這些類別。如要繼續在舊版平台中執行,您可以使用 Android SDK 中的 v4 支援資料庫 (相容性程式庫)。v4 支援資料庫提供與 Android 1.6 (API 級別 4) 相容的 Fragment API 版本。
    • 針對針對 Android 3.0 (API 級別 11) 以上版本開發的應用程式,分頁通常會使用新的 ActionBar.newTab() 和相關 API,在動作列區域放置分頁。

媒體架構

  • 使用平台媒體供應商 (MediaStore) 的應用程式現在可以直接從裝置支援的卸除式 SD 卡讀取媒體資料。應用程式也可以透過 MTP API 直接與 SD 卡檔案互動。

顯示卡

IME 架構

  • 新增 getModifiers() 方法,用於擷取輔助鍵的目前狀態。

USB 架構

  • 新增 getRawDescriptors() 方法,用於擷取裝置的原始 USB 描述元。您可以使用方法,存取較高層級 API 無法直接支援的描述元。

網路

電話通訊系統

核心公用程式

新功能常數

這個平台會新增硬體功能常數,您可以在應用程式資訊清單中宣告這個常數,以便向 Google Play 等外部實體告知必要的硬體和軟體功能。您可以在 <uses-feature> 資訊清單元素中宣告這些常數和其他功能常數。

Google Play 會根據應用程式的 <uses-feature> 屬性篩選應用程式,確保只有符合應用程式需求的裝置才能使用這些應用程式。

  • 適用於橫向或直向需求的功能常數

    Android 3.2 版導入了新的功能常數,可讓應用程式指定需要以橫向和/或直向顯示螢幕。如果宣告這些常數,表示應用程式不得安裝在未提供相關方向的裝置上。反之,如果其中一個常數未宣告,表示應用程式對未宣告的螢幕方向沒有偏好,且可能安裝在不提供這些常數的裝置上。

    一般而言,如果在橫向和直向螢幕上都能正常運作,通常不需要宣告方向要求。反之,專為單一螢幕方向設計的應用程式 (例如專為電視設計的應用程式) 可以宣告其中一個常數,以確保未提供該螢幕方向的裝置無法使用該應用程式。

    如果資訊清單要求中宣告的任何活動使用 android:screenOrientation 屬性,以特定螢幕方向執行,這也會宣告應用程式需要該螢幕方向。

  • 其他功能常數

API 差異報表

如要進一步瞭解 Android 3.2 (API 級別 13) 中的所有 API 變更,請參閱 API 差異報表

API 級別

Android 3.2 平台提供新版架構 API。Android 3.2 API 會指派一個儲存在系統本身中的整數 ID (13)。這個 ID 稱為「API 級別」,可讓系統在安裝應用程式前,正確判斷應用程式是否與系統相容。

如要在應用程式中使用 Android 3.2 中導入的 API,您必須針對 Android 3.2 SDK 平台提供的 Android 程式庫編譯應用程式。視您的需求而定,您可能還需要在應用程式資訊清單中的 <uses-sdk> 元素中加入 android:minSdkVersion="13" 屬性。

詳情請參閱「什麼是 API 級別?」一節。