0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Jetpack WindowManager 1.1 穩(wěn)定版

谷歌開發(fā)者 ? 來源:未知 ? 2023-10-18 19:10 ? 次閱讀
作者 / Android 開發(fā)者關系工程師 Francesco Romano

自 Jetpack WindowManager 1.0 穩(wěn)定版發(fā)布的一年多以來,可折疊設備和大屏設備領域發(fā)生了諸多變化。許多新款設備都已進入市場,大量新用例也已解鎖! Jetpack WindowManager 庫在幫助您優(yōu)化您的 Android 應用上發(fā)揮重要作用,使其能夠適用于不同的設備類型。并且此版本還包含多項新功能和改進,是一個重大的里程碑式進展。 讓我們來回顧一下 Jetpack WindowManager 庫涵蓋的所有用例。

獲取窗口指標 (和大小類別!)

過去,開發(fā)者通過設備顯示尺寸來決定其應用布局,但隨著不同設備類型 (如可折疊設備) 和顯示模式 (如多窗口模式和多顯示屏模式) 的出現(xiàn),了解應用窗口的大小而不是設備的顯示尺寸變得至關重要。 Jetpack WindowManager WindowMetricsCalculator 界面可以提供可靠的數(shù)據(jù)來源,以幫助您衡量當前可用于顯示您應用的屏幕空間。

  • WindowMetricsCalculator

    https://developer.android.google.cn/reference/kotlin/androidx/window/layout/WindowMetricsCalculator

在此基礎上,窗口大小類別是一組視口劃分點,有助于您設計、開發(fā)和測試響應式和自適應應用布局。此類劃分點專門用于平衡布局的簡單性和靈活性,以便針對特殊情況優(yōu)化您的應用。

  • 窗口大小類別

    https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes#window_size_classes

對于基于 View 的應用,您可以使用以下代碼段來計算窗口大小類別:

privatefuncomputeWindowSizeClasses(){
        val metrics = WindowMetricsCalculator.getOrCreate()
            .computeCurrentWindowMetrics(this)
        val width = metrics.bounds.width()
        val height = metrics.bounds.height()
        val density = resources.displayMetrics.density
        val windowSizeClass = WindowSizeClass.compute(width/density, height/density)


        // use windowSizeClass.windowHeightSizeClass and windowSizeClass.windowWidthSizeClass
}

您可以參閱 "支持不同屏幕尺寸"開發(fā)者指南了解詳細信息。

  • 支持不同屏幕尺寸

    https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes

讓應用能夠感知折疊

Jetpack WindowManager 還提供優(yōu)化可折疊設備布局所需的所有 API。 具體而言,您可以使用 WindowInfoTracker 查詢 FoldingFeature 信息,如
  • 狀態(tài): 設備的折疊狀態(tài): FLATHALF_OPENED

  • 方向:折疊或設備合頁的方向:HORIZONTALVERTICAL
  • 遮擋類型: 折疊或合頁是否遮擋部分顯示屏:NONEFULL
  • 是否分離:折疊或合頁是否創(chuàng)建了兩個邏輯顯示區(qū)域:true 或 false
  • 邊界:應用窗口內(nèi)功能的邊界矩形 (繼承自 DisplayFeature)
  • WindowInfoTrackerhttps://developer.android.google.cn/reference/kotlin/androidx/window/layout/WindowInfoTracker
  • FoldingFeaturehttps://developer.android.google.cn/reference/androidx/window/layout/FoldingFeature
  • DisplayFeaturehttps://developer.android.google.cn/reference/androidx/window/layout/DisplayFeature#getBounds%28%29

您可以通過 Flow 訪問這些數(shù)據(jù):

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    lifecycleScope.launch(Dispatchers.Main) {
        lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
            WindowInfoTracker.getOrCreate(this@MainActivity)
                .windowLayoutInfo(this@MainActivity)
                .collect { layoutInfo ->
                    // New posture information
                    val foldingFeature = layoutInfo.displayFeatures
                    // use the folding feature to update the layout
                }
        }
    }
}
  • Flow

    https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/

一旦收集到 FoldingFeature 信息,您便可以使用這些數(shù)據(jù)為當前設備狀態(tài)創(chuàng)建優(yōu)化布局,例如實現(xiàn)桌面模式。您可以在 MediaPlayerActivity.kt 中查看桌面模式的示例。
  • MediaPlayerActivity.kt

    https://github.com/android/platform-samples/blob/main/samples/user-interface/windowmanager/src/main/java/com/example/platform/ui/windowmanager/MediaPlayerActivity.kt

您還可以訪問我們的 Codelab 了解如何使用 Jetpack WindowManager 支持可折疊設備和雙屏設備:https://developer.android.google.cn/codelabs/android-window-manager-dual-screen-foldables

并排顯示兩個 Activity

除了上述功能您還可以使用最新的穩(wěn)定版 Jetpack WindowManager API:Activity 嵌入。
  • Activity 嵌入

    https://developer.android.google.cn/reference/kotlin/androidx/window/embedding/package-summary

Android 12L 起,Activity 嵌入允許采用傳統(tǒng)多 Activity 架構(gòu)的開發(fā)者通過同一應用,甚至多個應用在大屏設備上并排顯示多個 Activity。 這是以最少的代碼更改甚至無需代碼更改便可以實現(xiàn)列表詳情布局的絕佳方式。 注意: Modern Android Development (MAD) 建議使用基于 Jetpack API (包括 Jetpack Compose) 的單 Activity 架構(gòu)。如果您的應用使用 Fragment,請參閱 SlidingPaneLayout。Activity 嵌入專為無法輕松更新為 MAD 的多 Activity 舊版應用而設計。

  • SlidingPaneLayout

    https://developer.android.google.cn/jetpack/androidx/releases/slidingpanelayout

這也是該庫中最大的變化,目前在 Jetpack WindowManager 1.1 版中,Activity 嵌入 API 非常穩(wěn)定! 不僅如此,該 API 目前的功能也更加豐富,您可以通過此 API:
  • 修改分屏行為 (分屏比例、規(guī)則、結(jié)束行為)

  • 定義占位符
  • 在運行時環(huán)境中檢查 (并更改) 分屏狀態(tài)
  • 實現(xiàn)水平分屏
  • 在全窗口中啟動模態(tài)
如果您想探索 Activity 嵌入,可訪問專用 Codelab 了解如何使用 Activity 嵌入構(gòu)建列表詳情布局:

https://developer.android.google.cn/codelabs/large-screens/activity-embedding

許多應用都已開始在生產(chǎn)環(huán)境中使用 Activity 嵌入,例如 WhatsApp:wKgZomUwAQeAGdxfAANwGdWvh-Q837.png ?還有 eBay!

wKgZomUwAQeAFg-uAAd0Z8rsiAI921.png

實現(xiàn)包含多 Activity 的列表詳情布局并不是 Activity 嵌入的唯一用例。 自 Android 13 (API 級別 33) 起,應用可以嵌入來自其他應用的 Activity。 跨應用 Activity 嵌入支持多個 Android 應用的 Activity 進行可視化集成處理。系統(tǒng)會在屏幕上并排或上下顯示托管應用的 Activity 和其他應用的嵌入 Activity,就像在單一應用 Activity 嵌入中一樣。 托管應用會按照實現(xiàn)單一應用 Activity 嵌入的相同方式實現(xiàn)跨應用 Activity 嵌入,但出于安全原因,被嵌入的應用必須同意并選擇加入。 您可以在 "Activity 嵌入" 開發(fā)者指南中深入了解跨應用嵌入:

  • Activity 嵌入

    https://developer.android.google.cn/guide/topics/large-screens/activity-embedding#cross-application

總結(jié)

如果您想優(yōu)化您的應用在不同設備類型上的用戶體驗,Jetpack WindowManager 便是您應該學習的最重要的庫之一。 WindowManager 還將在每個版本中添加有趣的新功能,敬請關注 1.2 版本中即將推出的功能。
  • 1.2 版本

    https://developer.android.google.cn/jetpack/androidx/releases/window#version_12_2

您可以參閱 Jetpack WindowManager 文檔示例應用,即刻開始使用 WindowManager!

  • 文檔

    https://developer.android.google.cn/jetpack/androidx/releases/window

  • 示例應用

    https://github.com/android/platform-samples/tree/main/samples/user-interface/windowmanager

開發(fā)者福利月

在十月,開啟專屬開發(fā)者們的快樂!線下線上精彩互動活動、神秘禮品、干貨資料包統(tǒng)統(tǒng)安排上,讓驚喜和期待填滿整月。

趕快來了解詳情參與互動,收獲快樂和福利吧!

wKgZomUwAQiAOXxrAAAafJIrrMk621.gif?點擊屏末||即刻開始使用 Jetpack WindowManager

wKgZomUwAQiAIF0UAAATN9B0Fw0405.png

wKgZomUwAQiAYx-lAAMyGF3oQT4271.png

wKgZomUwAQiACFDOAAAptPJQ2wE812.png


原文標題:Jetpack WindowManager 1.1 穩(wěn)定版

文章出處:【微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 谷歌
    +關注

    關注

    27

    文章

    6099

    瀏覽量

    104773

原文標題:Jetpack WindowManager 1.1 穩(wěn)定版

文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    谷歌正式向Pixel設備推送Android 15穩(wěn)定版

    10月17日最新資訊,谷歌今日已正式向Pixel系列設備推送Android 15穩(wěn)定版更新。目前,已有部分Pixel設備成功完成升級,而更大范圍的推送預計將在本周末進行。
    的頭像 發(fā)表于 10-17 16:31 ?204次閱讀

    谷歌開始推送Android 15穩(wěn)定版

    近日,谷歌正式向Pixel系列設備推送了Android 15穩(wěn)定版操作系統(tǒng)。目前,已有部分Pixel設備率先完成了系統(tǒng)升級,預計本周晚些時候,更大規(guī)模的更新推送將全面展開。
    的頭像 發(fā)表于 10-17 16:12 ?138次閱讀

    NVIDIA JetPack 6.0版本的關鍵功能

    NVIDIA JetPack SDK 支持 NVIDIA Jetson 模塊,為構(gòu)建端到端加速 AI 應用提供全面的解決方案。JetPack 6 通過微服務和一系列新功能,擴展了 Jetson 平臺的靈活性和可擴展性,是 2024 年截至目前下載量最高的
    的頭像 發(fā)表于 09-09 10:18 ?245次閱讀
    NVIDIA <b class='flag-5'>JetPack</b> 6.0版本的關鍵功能

    使用NVIDIA JetPack 6.0和YOLOv8構(gòu)建智能交通應用

    本文將介紹如何使用 NVIDIA JetPack 6.0 中的全新 Jetson 平臺服務,來構(gòu)建一個適用于邊緣的端到端交通分析解決方案。該系統(tǒng)集成了多個功能:使用視頻存儲工具包 (VST) 服務
    的頭像 發(fā)表于 08-23 16:49 ?328次閱讀
    使用NVIDIA <b class='flag-5'>JetPack</b> 6.0和YOLOv8構(gòu)建智能交通應用

    Jetpack Compose和設備類型的三大重要更新

    2024 年 Google I/O 大會上我們分享了大量更新和公告,幫助開發(fā)者提升工作效率。了解 2024 年 Google I/O 大會上有關 Jetpack Compose 和設備類型的三大重要更新。
    的頭像 發(fā)表于 08-09 17:07 ?569次閱讀

    【AWTK使用經(jīng)驗】如何更換AWTK SDK與渲染模式

    。更換編譯項目使用的AWTKSDKAWTKSDK版本及區(qū)別AWTKSDK分為穩(wěn)定版和最新版。穩(wěn)定版是指安裝AWStudio附帶的AWTKSDK整合包,AWStudi
    的頭像 發(fā)表于 08-01 08:25 ?951次閱讀
    【AWTK使用經(jīng)驗】如何更換AWTK SDK與渲染模式

    暫態(tài)穩(wěn)定和靜態(tài)穩(wěn)定的區(qū)別是什么

    暫態(tài)穩(wěn)定和靜態(tài)穩(wěn)定是電力系統(tǒng)穩(wěn)定性分析中的兩個重要概念,它們分別描述了電力系統(tǒng)在受到擾動后的動態(tài)響應和穩(wěn)態(tài)運行狀態(tài)。下面將介紹暫態(tài)穩(wěn)定和靜態(tài)穩(wěn)定
    的頭像 發(fā)表于 07-26 09:41 ?1317次閱讀

    運放輸出不穩(wěn)定是什么原因

    的輸出可能會出現(xiàn)不穩(wěn)定的現(xiàn)象,這將嚴重影響電路的性能和可靠性。 電源問題 電源是運放正常工作的基礎,如果電源不穩(wěn)定或存在問題,將直接影響運放的輸出穩(wěn)定性。以下是一些常見的電源問題及其解決方案:
    的頭像 發(fā)表于 07-13 11:20 ?1314次閱讀

    idf.py set-target esp32s2命令無效的原因?

    idf.py set-target esp32s2命令無效 只能用idf.py set-target esp32s2beta 這是什么意思?只用用測試版嗎?對于穩(wěn)定版本有什么影響,我IDF用的是最新的穩(wěn)定版本4.1
    發(fā)表于 06-24 07:42

    STM8L0515F3低功耗不穩(wěn)定怎么解決?

    最近使用STM8L051F3做低功耗RTC喚醒,發(fā)現(xiàn)很不穩(wěn)定。有時上電電流1.1uA維持一天都沒問題。但是有時候又停留在5uA,還出現(xiàn)過從1.1uA變到100uA然后又慢慢變回1.1u
    發(fā)表于 05-08 08:17

    微軟PowerToys發(fā)布0.80.1版,修復多項BUG提升軟件穩(wěn)定

    微軟日前發(fā)布PowerToys 0.80.1穩(wěn)定版更新,該版無新增功能,其主要目的在于修復先前版本所遺留的若干問題,提升軟件運作穩(wěn)定性。
    的頭像 發(fā)表于 04-11 10:50 ?1515次閱讀

    Chrome 123穩(wěn)定版引入全新Long Animation Frames API

    早在 Chrome 116 版本中,谷歌就已經(jīng)開啟了 LoAF 的實驗性測試,如今,隨著 Chrome 123 版本的正式面世,這一新特性被廣泛應用開來。此 API 堪稱 Long Tasks API 的升級版,主要功能在于深度探查網(wǎng)站響應能力,幫助用戶識別主線程擁堵的真正原因。
    的頭像 發(fā)表于 03-22 14:29 ?673次閱讀

    Mozilla發(fā)布Firefox 123.0穩(wěn)定版,新添網(wǎng)站兼容性報告工具

    2023年2月20日,Mozilla發(fā)布Firefox 123.0穩(wěn)定版及115.9 ESR版本,并更迭Beta、Dev、Nightly三個開發(fā)頻道版本至124、125;手機版Firefox亦升級到123.0。
    的頭像 發(fā)表于 02-20 15:45 ?551次閱讀

    Wi-SUN FAN 1.1物理層認證的物聯(lián)網(wǎng)系統(tǒng)產(chǎn)品確保穩(wěn)定和遠程通信白皮書

    電子發(fā)燒友網(wǎng)站提供《Wi-SUN FAN 1.1物理層認證的物聯(lián)網(wǎng)系統(tǒng)產(chǎn)品確保穩(wěn)定和遠程通信白皮書.pdf》資料免費下載
    發(fā)表于 02-20 10:06 ?0次下載
    Wi-SUN FAN <b class='flag-5'>1.1</b>物理層認證的物聯(lián)網(wǎng)系統(tǒng)產(chǎn)品確保<b class='flag-5'>穩(wěn)定</b>和遠程通信白皮書

    AG32 MCU Reference Manual 1.1

    AG32 MCU Reference Manual 1.1
    發(fā)表于 01-02 16:06