我們很高興宣布,Android 在整合行動和電腦運算方面,達成了一項重大里程碑:Android 16 QPR3 版本正式發布,支援外接螢幕!
如 Google I/O 2025 所示,使用者可以將 Android 裝置連接到外接螢幕,立即存取電腦分割視窗環境。應用程式可在任意形式或最大化視窗中使用,使用者可以像在電腦 OS 上一樣執行多項工作。
Google 和 Samsung 攜手合作,為搭載 Android 16 的 Android 生態系統裝置,提供流暢強大的電腦分割視窗體驗,只要連接外接螢幕即可使用。
這項功能現已正式發布,支援的裝置* 使用者可將 Pixel 和 Samsung 手機連接至外接螢幕,打造更具吸引力、更有效率的應用程式體驗,並能適應各種板型規格。
運作方式
將支援的 Android 手機或摺疊式裝置連上外接螢幕後,外接螢幕會啟動新的電腦工作階段。
外接螢幕的使用體驗與電腦類似,包括顯示使用中應用程式的工作列,以及可讓使用者固定應用程式以便快速存取。使用者可以在外接螢幕上,同時執行多個應用程式,並自由調整視窗大小。
手機連接到外接螢幕,螢幕上顯示電腦工作階段,手機則維持自身狀態。
如果支援電腦分割視窗的裝置 (例如 Samsung Galaxy Tab S11 等平板電腦) 連接外接螢幕,電腦工作階段會延伸到兩個螢幕,提供更寬廣的工作區。兩個螢幕會像一個連續系統一樣運作,讓應用程式視窗、內容和游標在螢幕之間自由移動。
平板電腦連接外接螢幕,將桌面工作階段延伸至兩個螢幕。
又對使用者有哪些幫助?
在 Android 16 QPR3 版本中,我們完成了視窗行為、工作列互動和輸入相容性 (滑鼠和鍵盤),這些定義了連接螢幕體驗。我們也加入了相容性處理,可縮放視窗,並避免在切換螢幕時重新啟動應用程式。
如果應用程式是採用自動調整設計原則建構而成,就會自動呈現電腦版的外觀和風格,讓使用者感到熟悉。如果應用程式鎖定為直向模式,或假設使用者只會使用觸控介面,現在正是現代化的好時機。
請特別留意下列重要最佳做法,在智慧螢幕上提供最佳應用程式體驗:
- 請勿假設
Display物件不變:當應用程式視窗移至外接螢幕,或螢幕設定變更時,與應用程式內容相關聯的Display物件可能會變更。應用程式應妥善處理設定變更事件,並動態查詢螢幕指標,而非快取這些指標。 - 考量密度設定變更:外接螢幕的像素密度可能與主要裝置螢幕大不相同。請確保版面配置和資源能正確因應這些變更,維持 UI 清晰度和可用性。在版面配置中使用密度獨立像素 (dp)、提供特定密度的資源,並確保 UI 能適當縮放。
- 正確支援外部周邊裝置:使用者連接外接螢幕時,通常會建立更類似桌面的環境。這通常涉及使用外接鍵盤、滑鼠、觸控板、網路攝影機、麥克風和喇叭。改善對鍵盤和滑鼠互動的支援。
使用現代化工具打造未來電腦版
我們提供多項工具,協助您打造電腦版體驗。讓我們回顧核心自動調整程式庫的最新更新!
新的視窗大小類別:大型和特大型
Jetpack WindowManager 1.5.0 的最大更新,是新增了兩個寬度視窗大小類別:大型和超大型。
視窗大小類別是我們官方建議的可視區域中斷點組合,可協助您設計及開發自動調整式版面配置。在 1.5.0 版中,我們將這項指南擴充至大於一般平板電腦的螢幕。
以下是新的寬度中斷點:
- 大型:寬度介於 1200dp 至 1600dp
- 特大:寬度 ≥1600dp
根據螢幕寬度區分的視窗大小類別。
在超大螢幕上,單純放大平板電腦的展開版面配置,不一定能提供最佳使用者體驗。舉例來說,電子郵件用戶端在展開視窗大小類別中,可以輕鬆顯示兩個窗格 (信箱和郵件)。但在超大電腦螢幕上,電子郵件用戶端可以同時顯示三個甚至四個窗格,例如信箱、郵件清單、完整郵件內容和日曆/工作面板。
如要在專案中加入新的視窗大小類別,只要從 WindowSizeClass.BREAKPOINTS_V2 組合呼叫函式,而非 WindowSizeClass.BREAKPOINTS_V1:
val currentWindowMetrics =
WindowMetricsCalculator.getOrCreate()
.computeCurrentWindowMetrics(LocalContext.current)
val sizeClass = WindowSizeClass.BREAKPOINTS_V2
.computeWindowSizeClass(currentWindowMetrics)接著,在確定應用程式至少有足夠空間時,套用正確的版面配置:
if(sizeClass.isWidthAtLeastBreakpoint(
WindowSizeClass.WIDTH_DP_LARGE_LOWER_BOUND)){
...
// Window is at least 1200 dp wide.
}使用 Jetpack Navigation 3 建構自動調整式版面配置
Navigation 3 是 Jetpack 系列的最新成員。Navigation 3 剛推出第一個穩定版本,是專為 Compose 設計的強大導覽程式庫。
Navigation 3 也是建構自動調整版面配置的絕佳工具,可同時顯示多個目的地,並在這些版面配置之間流暢切換。
這個管理應用程式 UI 流程的系統是以場景為基礎。場景是一種版面配置,可同時顯示一或多個目的地。SceneStrategy 會決定是否能建立 Scene。將 SceneStrategy 例項鏈結在一起,即可針對不同螢幕大小和裝置設定建立及顯示不同場景。
如果是清單詳細資料和支援窗格等現成標準版面配置,您可以使用 Compose Material 3 Adaptive 程式庫中的場景 (適用於 1.3 以上版本)。
您也可以修改場景配方或從頭開始,輕鬆建構自訂場景。舉例來說,假設某個場景並排顯示三個窗格:
class ThreePaneScene<T : Any>(
override val key: Any,
override val previousEntries: List<NavEntry<T>>,
val firstEntry: NavEntry<T>,
val secondEntry: NavEntry<T>,
val thirdEntry: NavEntry<T>
) : Scene<T> {
override val entries: List<NavEntry<T>> = listOf(firstEntry, secondEntry, thirdEntry)
override val content: @Composable (() -> Unit) = {
Row(modifier = Modifier.fillMaxSize()) {
Column(modifier = Modifier.weight(1f)) {
firstEntry.Content()
}
Column(modifier = Modifier.weight(1f)) {
secondEntry.Content()
}
Column(modifier = Modifier.weight(1f)) {
thirdEntry.Content()
}
}
}在這種情況下,您可以定義 SceneStrategy,在視窗寬度足夠時顯示三個窗格,且返回堆疊中的項目已宣告支援在三窗格場景中顯示。
class ThreePaneSceneStrategy<T : Any>(val windowSizeClass: WindowSizeClass) : SceneStrategy<T> {
override fun SceneStrategyScope<T>.calculateScene(entries: List<NavEntry<T>>): Scene<T>? {
if (windowSizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_LARGE_LOWER_BOUND)) {
val lastThree = entries.takeLast(3)
if (lastThree.size == 3 && lastThree.all { it.metadata.containsKey(MULTI_PANE_KEY) }) {
val firstEntry = lastThree[0]
val secondEntry = lastThree[1]
val thirdEntry = lastThree[2]
return ThreePaneScene(
key = Triple(firstEntry.contentKey, secondEntry.contentKey, thirdEntry.contentKey),
previousEntries = entries.dropLast(3),
firstEntry = firstEntry,
secondEntry = secondEntry,
thirdEntry = thirdEntry
)
}
}
return null
}
}建立 NavDisplay 時,您可以將 ThreePaneSceneStrategy 與其他策略搭配使用。舉例來說,我們也可以新增 TwoPaneStrategy,在空間不足以顯示三個窗格時,並排顯示兩個窗格。
val strategy = ThreePaneSceneStrategy() then TwoPaneSceneStrategy()
NavDisplay(...,
sceneStrategy = strategy,
entryProvider = entryProvider {
entry<MyScreen>(metadata = mapOf(MULTI_PANE_KEY to true))) { ... }
... other entries...
}
)如果沒有足夠的空間顯示三個或兩個窗格,我們的自訂場景策略都會傳回 null。在這種情況下,NavDisplay 會改為使用 SinglePaneScene,在單一窗格中顯示返回堆疊中的最後一個項目。
只要使用場景和策略,就能在應用程式中加入一、二和三個窗格的版面配置!
自動調整式應用程式在寬螢幕上顯示三窗格導覽。
請參閱說明文件,進一步瞭解如何使用 Navigation 3 中的場景建立自訂版面配置。
獨立自動調整版面配置
如果您需要獨立版面配置,可以使用 Compose Material 3 Adaptive 程式庫建立自動調整式 UI,例如清單詳細資料和支援窗格版面配置,這些版面配置會根據視窗大小類別或裝置狀態,自動調整為視窗設定。
好消息是,程式庫已更新為新的中斷點!從 1.2 版開始,預設窗格 Scaffold 指令函式支援大型和超大型寬度視窗大小類別。
您只需在 Gradle 建構檔案中宣告要使用新的中斷點,即可選擇加入:
currentWindowAdaptiveInfo(supportLargeAndXLargeWidth = true)
開始使用
探索最新 Android 版本中的外接螢幕功能。在支援的裝置上安裝 Android 16 QPR3,然後連接外接螢幕,立即開始測試應用程式!
請參閱多螢幕支援和視窗管理的更新說明文件,進一步瞭解如何實作這些最佳做法。
意見回饋
我們會持續改善外接螢幕的桌面模式體驗,因此你的意見回饋至關重要。歡迎透過官方意見回饋管道分享想法或回報問題。
我們致力將 Android 打造為多功能平台,滿足使用者與應用程式和裝置互動的各種需求。我們對外接螢幕支援功能的改善,是朝這個方向邁出的另一步,相信使用者會喜歡您打造的桌面體驗!
*注意:本文撰寫時,Pixel 8、9、10 系列和多款 Samsung 裝置 (包括 S26、Fold7、Flip7 和 Tab S11) 支援外接螢幕。
-
產品最新消息我們很高興宣布 Jetpack WindowManager 1.5.0 已推出穩定版! 這個版本以 WindowManager 的強大自動調整功能為基礎,可讓您更輕鬆地建立精緻的自動調整式 UI,在所有螢幕大小上都能完美呈現。
Francesco Romano • 閱讀時間:2 分鐘 -
產品最新消息今天,我們在 Android 開發人員高峰會上宣布,將廣泛提供多項工具和 API,旨在消除日常摩擦,讓您更靈活地建構出色的 Android 應用程式。
Matthew McCullough • 閱讀時間:4 分鐘 -
產品最新消息Android Studio Rabbit 2 穩定版已推出,可供您在正式環境中使用。此版本包含多項重要功能,可提升開發效率,例如「自備代理」、全新 XR 模擬器功能、LeakCanary 更新、全新代理技能管理工具、AI 程式碼審查等。
Matthew Warner • 閱讀時間:3 分鐘
每週透過電子郵件接收 Android 開發的最新深入分析。