天天看點

Jetpack Compose 的新功能-谷歌 I/O 2022

​​Jetpack Compose​​ 1.0 釋出已經快一年了,在此期間我們看到社群是它的熱情,例如欣賞 Kotlin 文法的簡潔性、使 UI 開發變得更加便捷和更輕松的聲明式方法。

社群中的 Compose

我們已經看到許多​​公司開始大規模使用 Compose​​,例如 Compose 于 ​​Play Store 團隊​​密切合作,他們在很早的時候就開始嘗試 Compose ,并了解到它不僅更有趣,而且對他們的開發人員生産力的提高也很有幫助。

Play Store 告訴我們 “所有新的 Play 商店功能都建立在這個架構之上,Compose 有助于為應用程式解鎖更快的速度和更順暢的釋出。 ”

​​Twitter​​ 的團隊一直在應用程式的不同部分使用 Jetpack Compose,因為:

“Compose 讓我們更容易定義我們自己的元件,并使他們的 API 合約更加明确、靈活和直覺。”

​​Airbnb​​ 團隊也采用了 Compose:

“ Jetpack Compose 是我們技術戰略的關鍵部分。生産力的提升是巨大的。”

我們很高興看到在這些大型又複雜的生産環境中使用 Compose, Compose 不進讓他們在 UI 開發中體驗到了更多的樂趣,而且提高了相關工程的優勢!

以上這些隻是幾個示例,因為 Play 商店中排名前 1000 的應用程式中有 100 多個正在使用 Compose。

這些密切合作以及始終聽取 Android 社群的回報是我們開發過程的核心,也是推進我們未來​​路線圖​​的關鍵。

我們現在專注于支援更進階的用例,包括:

  • 新的 API 和功能改進;
  • 新工具;
  • 更容易使用 Compose 進行建構;

我們知道 Compose 從根本上改變了 UI 的建構方式,為了幫助開發進行必要的思維轉變,我們将釋出更多關于進階主題的指導、演講和代碼實驗室,以及更深入的視訊,以便幫助開發者編寫更出色的應用。

Compose 1.2 測試版

今天,我們釋出了​​Compose 1.2 的第一個 beta 版本​​,其中包含許多功能和改進。

文本改進

字型填充

我們通過可自定義的參數 ​

​includeFontPadding​

​​ 解決了問題跟蹤器中​​投票最多的錯誤之一​​,這裡建議開發者将此值設定為 ​

​false​

​,因為這将使布局中的文本可以更精确地對齊。

我們的計劃在未來版本中将其設定為的預設值,如果将值設定為 ​

​false​

​​ 導緻應用出現問題,請在上述 issue 中告知我們。此外當 ​

​includeFontPadding​

​​ 設定為 ​

​false​

​​ 時 ,可以通過設定 ​

​lineHeightStyle​

​ 參數來調整可組合文本的行高,結合起來可以是這樣的:

Jetpack Compose 的新功能-谷歌 I/O 2022
Text(
 text = myText,
 style = TextStyle(
   lineHeight = 2.5.em,
   platformStyle = PlatformTextStyle(
     includeFontPadding = false
   ),
   lineHeightStyle = LineHeightStyle(
     alignment = Alignment.Center,
     trim = Trim.None
   )
 )
)      

可下載下傳字型

Compose 1.2 還在 Compose 中引入了​​可下載下傳的字型​​,開發者可以使用 Compose 的新 API 來異步通路 Google 字型,甚至可以定義備用字型,而無需任何複雜的設定。

使用可下載下傳字型,開發者可以保持較小的 APK 大小并改善運作狀況,因為多個應用程式可以通過 provider 共享相同的字型。

文字放大鏡

Android 文本提供了一個放大鏡控件,可以更輕松地選擇文本,Compose 現在也支援文本放大鏡。

Jetpack Compose 的新功能-谷歌 I/O 2022

拖動選擇時會顯示放大鏡,以幫助檢視手指下的内容,Compose 1.1.0 将放大鏡用于文本字段中的選擇,現在 Compose 1.2.0 支援文本字段中的放大鏡和 ​

​SelectionContainer​

​ , 放大鏡也得到了增強以比對 Views 中 Android 放大鏡的精确行為。

布局功能和改進

懶布局

随着懶布局的釋出, API ​

​LazyVerticalGrid​

​​ 和 ​

​LazyHorizontalGrid​

​​ 已經從實驗性階段的畢業,一個新的實驗性 API 被添加,稱為 ​

​LazyLayout​

​,它允許開發者實作自己的自定義惰性布局。

在 I/O 演講中了解有關這些 API 的更多資訊:​​Compose 中的懶布局​​。

與 CoordinatorLayout 互動

當在視圖系統中嵌入可組合滾動的 ​

​CoordinatorLayout​

​ 時,開發者現在可以確定它們的滾動行為是可互操作,這讓可折疊工具欄的設定更加容易。

現在開發者可以通過 ​

​rememberNestedScrollInteropConnection​

​​ 将調用新實驗方法的結果傳遞給 ​

​nestedScroll​

​ 修飾符來選擇加入此行為,

這是一個示範此新功能的​​示例​​。

視窗插圖

​​Accompanist 裡 insets 庫​​現在已使用該類更新到 Compose Foundation 庫,使用 ​

​WindowInsets​

​ 對象,相關内容可以在我們關于 ​​Compose 與現有 UI 內建​​的文檔中閱讀有關它的更多資訊。

視窗尺寸等級

為了更容易設計、開發和測試可調整大小的布局,我們釋出了視窗大小類 - 一系列可配置的 viewport breakpoints。

​material3-window-size-class​

​ 作為 Material 3 庫集的一部分,它們現在在新庫中以 alpha 形式提供,開發者可以在支援不同的​​螢幕尺寸文檔​​中閱讀有關尺寸類的更多資訊,并檢視​​Crane ​​中的示例實作。

專注于 performance

為了幫助開發者了解和改進應用程式的性能,我們非常關注新的性能工具和指南,有了 performance,就可以更容易讓開發者了解的 App 可能卡頓的原因和位置。

從 Android Studio Dolphin 開始,開發者現在可以使用 ​

​Layout Inspector​

​ 檢查recomposition 的頻率,大量的 recomposition 可以幫助開發者指向可以優化方向。

此外,Android Studio Electric Eel 現在包括一個 recomposition 熒光筆,這是一個用于檢視哪些 composables 項何時 recomposition 的視覺輔助工具。

在 ​​Android Studio 的新增功能​​中有關此新工具的更多資訊。
Jetpack Compose 的新功能-谷歌 I/O 2022

Compose 從根本上改變了編寫 UI 的方式,是以開發者可以采用一些新的方式來確定應用的性能。

新釋出的​​compose-performance​​建議如何編寫和配置 Compose 應用程式以獲得最佳性能。

在 I/O 演講中也有​​Jetpack Compose​​ 中的常見性能問題,Compose 團隊描述了常見的性能錯誤以及如何修複它們。

性能是一個需要持續關注的領域,我們正在努力改進擴充工具和指導,同時我們非常感謝大家對我們迄今為止所做的工作的回報嗎,如有什麼問題可以在​​問題跟蹤​​中提出你的錯誤或在​​KotlinLang Slack 組​​中提問。

新工具

除了性能改進之外,還有新的工具更新可幫助開發者更有效地使用 Compose。

​​Android Studio Dolphin​​ 現在處于 Beta 版,為 Compose 開發帶來了許多令人興奮的功能。

除了 recomposition 計數之外,還有新工具還包括動畫協調,以便可以一次檢視和浏覽所有動畫,以及多預覽注釋,以幫助開發者建構多種螢幕尺寸,同時為了能夠更快地疊代 Android Studio Electric Eel, 在 Canary 帶來了 LiveEdit。

Jetpack Compose 的新功能-谷歌 I/O 2022

為 Wear OS 編寫 Compose

我們很高興看到 Compose for Wear OS 進入 Beta 版!遵循與任何其他 Jetpack 庫相同的原則,Beta 意味着它的功能完整且 API 穩定,開發者現在可以開始建構 Wear 的應用。

如有需要可查閱​​部落格文章​​!

改進的指南

  • 在 Compose 中的 State 上新的​​研讨會​​和改進的​​codelab​​
  • 關于 Compose 中基本布局的 新​​研讨會​​和改進的​​codelab​​
  • 新的​​性能文檔​​
  • 更新​​了自定義輸入的文檔​​
  • I/O 讨論​​Jetpack Compose 中的常見性能陷阱​​和Compose​​中的惰性布局​​
  • 對于那些不熟悉程式設計的人,現在可以使用​​帶有 Compose 的 Android 基礎課程​​

最後