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 版導入了全新的相容性縮放模式, 讓使用者能以全新方式在大型裝置上檢視固定大小的應用程式。對於不是為了在較大螢幕上執行 (例如平板電腦) 而設計的應用程式,新模式提供像素縮放替代方案,取代標準 UI 延展功能。如果應用程式需要相容性支援,使用者可以透過系統列中的選單圖示存取新模式。
- 從 SD 卡同步處理媒體
在支援 SD 卡的裝置上,使用者現在可以直接從 SD 卡將媒體檔案載入至使用這些檔案的應用程式。系統服務供應商 存取系統媒體商店的應用程式。
新開發人員功能
- 管理螢幕支援的擴充 API
Android 3.2 針對平台螢幕支援 API 推出了擴充功能, 為開發人員提供了更多樣的管理應用程式 UI 的方式, Android 裝置。API 包含新的資源限定詞和 資訊清單屬性,可讓您更精確地控制 應用程式會以不同大小顯示,而非一味追求一般化 大小類別。
為確保固定大小的應用程式和僅支援部分螢幕尺寸的應用程式能以最佳方式顯示,平台也提供新的縮放相容性模式,可在較小的螢幕區域中算繪 UI,然後將其縮放至填滿螢幕可用空間。如要進一步瞭解 螢幕支援 API 及其提供的控制項,請參閱以下各節。
API 總覽
螢幕支援 API
Android 3.2 推出了新的螢幕支援 API,為您提供更多功能 控管應用程式在不同螢幕大小上的顯示方式。 這個 API 以現有的螢幕支援 API 為基礎,包括平台的 整體螢幕密度模型,也進一步延伸; 依維度指定特定螢幕範圍,從 密度獨立像素單位 (例如 600dp 或 720dp 寬度),而非 根據概略螢幕大小 (例如大或超大)
設計應用程式 UI 時,您仍可依賴平台提供的密度抽象化,也就是說,應用程式不必針對不同裝置的實際像素密度差異進行補償。您可以根據可用的水平或垂直空間量來設計應用程式 UI。這個平台使用三個新 特性:smallestWidth、width 和 height。
- 螢幕的 smallestWidth 是基本大小下限 是以密度獨立像素 (「dp」) 單位為單位。螢幕的高度,或是 是兩者中較短的句子如果是直向的螢幕, smallestWidth 通常以寬度為依據,如果是橫向,則以橫向為準 測量出的高度無論螢幕方向為何,smallestWidth 一律會從螢幕的固定特性衍生,且值不會變更。smallestWidth 對應用程式的重要性十分重要 必須繪製應用程式 UI 的地方,不包括螢幕區域 由系統保留。
- 相較之下,螢幕的寬度和高度代表 應用程式版面配置目前可用的水平或垂直空間,測量單位為 以「dp」為單位單位,不含系統保留的螢幕區域。當使用者在橫向和直向之間切換螢幕方向時,螢幕的寬度和高度會有所變動。
新的螢幕支援 API 可讓您根據目前螢幕的最小寬度來管理應用程式 UI。您也可以視需要根據目前的寬度或高度管理 UI。基於上述目的 提供以下工具:
- 新的資源限定詞,可將版面配置和其他資源指定為最小寬度、寬度或高度,以及
- 新的資訊清單屬性,用於指定應用程式上限 螢幕相容性範圍
此外,應用程式仍可查詢系統,並在執行階段管理 UI 和資源載入作業,就像舊版平台一樣。
由於新的 API 可讓您直接透過 smallestWidth 指定畫面, 可協助您瞭解 以及不同螢幕類型的特性下表提供一些 範例,以「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 是常數,無論方向為何。範例:sw320dp
,sw720dp
,sw720dp
。wNNNdp
和hNNNdp
:指定資源應使用的最小寬度或高度,以「dp」為單位。如上所述,螢幕的寬度和高度會依螢幕方向而定,並會在方向變更時變更。例如:w320dp
、w720dp
、h1024dp
。
您也可以視需要建立多個重疊的資源設定。例如,您可以標記部分資源,以便在寬度超過 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"
:這項 屬性可指定應用程式在 這個 API 可以執行如果目前的螢幕小於指定的值,系統會認為應用程式與裝置不相容,但不會禁止安裝和執行應用程式。
注意: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 的初始儲存狀態。 - 新的
onViewCreated()
回呼方法會通知片段,onCreateView()
已傳回,但尚未將任何已儲存的狀態還原至 View。 isDetached()
方法可決定 Fragment 已明確從 UI 中卸離。- 新的
attach()
和detach()
方法可讓應用程式重新連結或分離 UI 中的片段。 - 新的
setCustomAnimations()
超載方法可讓您設定特定動畫 並特別針對進場/出場作業 彈出返回堆疊現有的導入方式沒有計入 針對片段的不同行為。
- 新的
- ActivityInfo 和 ApplicationInfo 中的螢幕大小資訊
ActivityInfo
新增了CONFIG_SCREEN_SIZE
和CONFIG_SMALLEST_SCREEN_SIZE
做為位元遮罩 位置:configChanges
。這些位元表示活動是否能 它會實際處理螢幕大小和最小螢幕尺寸。ApplicationInfo
會新增largestWidthLimitDp
、compatibleWidthLimitDp
和requiresSmallestWidthDp
欄位,這些欄位是從應用程式資訊清單檔案中的對應<supports-screens>
屬性衍生而來。
- 從 WindowManager 取得顯示大小的輔助程式
- 新的
getSize()
和getRectSize()
方法可讓應用程式取得顯示器的原始大小。
- 新的
- 全新公開「全像投影」樣式
- 平台現在會為文字、動作列小工具和分頁等提供各種公開的「全像」樣式。如需完整清單,請參閱
R.style
。
- 平台現在會為文字、動作列小工具和分頁等提供各種公開的「全像」樣式。如需完整清單,請參閱
LocalActivityManager
、ActivityGroup
和LocalActivityManager
現已淘汰- 新應用程式應使用 Fragment,而非這些類別。目的地: 仍可在舊版平台上運作 但您可以使用第 4 版支援服務 程式庫 (相容性程式庫),可在 Android SDK 中使用。第 4 版支援資料庫提供的 Fragment API 版本,可向下相容至 Android 1.6 (API 級別 4)。
- 如果應用程式是針對 Android 3.0 (API 級別 11) 以上版本開發,則通常會使用新的
ActionBar.newTab()
和相關 API 在 UI 中顯示分頁,以便在動作列區域中放置分頁。
媒體架構
- 使用平台媒體供應器 (
MediaStore
) 的應用程式,現在可以直接從可移除的 SD 卡讀取媒體資料 (如果裝置支援的話)。應用程式也可以 使用 MTP API 直接與 SD 卡檔案互動。
圖形
- Point 和 PointF 中的 Parcelable 公用程式
- 「
Point
」和「PointF
」 類別現在包含Parcelable
介面和公用程式方法describeContents()
、readFromParcel()
和writeToParcel()
。
- 「
IME 架構
- 新的
getModifiers()
方法: 擷取輔助鍵的目前狀態。
USB 架構
- 新的
getRawDescriptors()
方法: 擷取裝置的原始 USB 描述元。您可以使用這個方法,存取無法透過較高層級 API 直接存取的描述元。
網路
- 網路類型常數
電話通訊系統
- 新的
NETWORK_TYPE_HSPAP
網路類型常數。
核心公用程式
- 可分割的公用程式
- 新的介面
Parcelable.ClassLoaderCreator
可讓應用程式接收物件建立所在的 ClassLoader。 - 新的
adoptFd
、dup()
和fromFd()
可管理ParcelFileDescriptor
物件。
- 新的介面
- Binder 和 IBinder
Binder
和IBinder
中的新方法dumpAsync()
可讓應用程式轉儲至指定檔案,確保目標以非同步方式執行。- 新增
IBinder
通訊協定交易代碼TWEET_TRANSACTION
,可讓應用程式傳送推文 複製到目標物件
新功能常數
平台會新增硬體功能常數,您可以在應用程式資訊清單中宣告這些常數,以便告知 Google Play 等外部實體所需的硬體和軟體功能。您可以在 <uses-feature>
資訊清單元素中宣告這些和其他功能常數。
Google Play 會根據應用程式的 <uses-feature>
屬性篩選應用程式,確保應用程式只會在符合要求的裝置上顯示。
- 橫向或直向需求的特徵常數
Android 3.2 推出了新的功能常數,可讓應用程式指定是否需要以橫向或直向方向顯示,或同時以兩種方向顯示。宣告這些常數表示應用程式不得安裝在未提供相關螢幕方向的裝置上。相反地,如果未宣告一個或兩個常數,表示應用程式沒有未宣告的螢幕方向偏好設定,且可能安裝在未提供這些螢幕方向的裝置上。
android.hardware.screen.landscape
:應用程式要求顯示位置 橫向。android.hardware.screen.portrait
:應用程式必須以直向模式顯示。
一般應用程式在橫向和直向模式下都能正常運作,通常不需要宣告方向需求。相反地,如果應用程式主要針對單一螢幕方向設計 (例如針對電視設計的應用程式),則可以宣告其中一個常數,確保應用程式無法在未提供該螢幕方向的裝置上執行。
如果資訊清單要求中宣告的任何活動以特定方向執行, 使用
android:screenOrientation
屬性,這樣也會宣告應用程式 這項方向依舊相當實用 - 其他功能常數
android.hardware.faketouch.multitouch.distinct
:應用程式需要支援模擬多點觸控輸入,並追蹤兩個以上的觸控點。android.hardware.faketouch.multitouch.jazzhand
:應用程式必須支援模擬多點觸控輸入,並追蹤五個以上不同的觸控點。
API 差異報表
如需 Android 3.2 (API) 中所有 API 變更的詳細資料 等級 13),請參閱 API 差異報表:
API 級別
Android 3.2 平台提供 架構 APIAndroid 3.2 API 會指派一個整數 ID 13,也就是 儲存於系統本身這個識別碼稱為「API 級別」 系統才能正確判斷 系統進行更新。
如要在應用程式中使用 Android 3.2 中推出的 API,您必須根據 Android 3.2 SDK 平台提供的 Android 程式庫編譯應用程式。視需求而定,您可能還需要在應用程式資訊清單的 <uses-sdk>
元素中新增 android:minSdkVersion="13"
屬性。
詳情請參閱「什麼是 API 級別?」。