一起看 I/O | Jetpack Compose 中的新特性

語言: CN / TW / HK

Jetpack Compose 1.0 正式版已經發布快一年的時間了,我們看到社群正以極大的熱情采納和使用 Compose: Kotlin 語法的簡潔性以及使開發介面變得更快速、更簡單的宣告式開發方式得到了廣大開發者們的讚賞。

Compose 在社群中的反響

我們看到 許多公司已經在大規模採納 Compose 為其應用開發最新、最具創造性的功能。例如,與我們密切合作的 Play 商店團隊很早便開始使用 Compose,通過他們我們瞭解到,使用 Compose 不僅更有趣,且對他們團隊生產力的提高也大有助益。Play 商店團隊還告訴我們 "Play 商店的所有新功能都建立在該框架之上,Compose 有助於為應用解鎖更快的速度以及更順暢地釋出"。與此同時,Twitter 也已經在應用的不同部分使用了 Jetpack Compose 並從中受益,因為 "Compose 讓我們更容易定義自己的元件,並使它們的 API 更明確、靈活和直觀。"Airbnb 團隊同樣也採用了 Compose: "Jetpack Compose 是我們技術戰略的重要組成部分,生產力因此獲得了大幅提高。"

我們很高興地看到這些團隊在大規模和複雜的生產環境中仔細地評估並使用了 Compose,所帶來的結果也不僅是讓介面開發更清晰有趣,也帶來了更多工程上的收益。這只是其中幾個案例,因為 Play 商店排名前 1,000 的應用中有超過 100 個正在使用 Compose。

我們在開發過程中始終保持著與這些團隊的密切合作,並不斷聽取廣大 Android 社群的反饋,這也是我們推進 路線圖 的關鍵。如今,我們專注於提供新的 API 和特性改進以支援您實現更高階的需求,這些改進將和新的工具一起助力您更輕鬆地使用 Compose 構建應用。Compose 從根本上改變了介面的構建方式,為了幫助您實現必要的思維轉變,我們將釋出更多關於高階主題的指南、演講和 Codelab,以及更具深度的影片,以便您編寫外觀和效能同樣出色的應用。以下是 Compose 1.2 Beta 版本的新特性:

Compose 1.2 Beta

我們在今年的 Google I/O 大會上釋出了 Compose 1.2 的第一個 Beta 版本,其中包含了許多特性和改進:

文字改進

字型邊距

我們在問題跟蹤器中定位到了 得票最高的問題之一,並通過將 includeFontPadding 設定為自定義引數來解決它。我們推薦您將該值設為 false,因為這會使佈局中的文字更精確地對齊。我們計劃在未來的版本中將 false 設為預設值。如果將值設為 false 導致您的應用出現問題,請在上述錯誤報告中告知我們。此外,當 includeFontPadding 被設定為 false 時,您可通過設定 lineHeightStyle 引數來調整 Text 可組合項的行高。兩個引數結合使用的效果如下:

△ 以多行的 Text 可組合項為例:左圖為設定 includeFontPadding 為 true (當前預設值) 的效果,右圖為設定 includeFontPadding 為 false 且設定了 lineHeightStyle 的效果

Kotlin 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 的新 API 來非同步訪問 Google Fonts,甚至還可以定義備用字型,這些操作無需任何複雜的配置。通過可下載字型,您可以保持較小的 APK 檔案體積並改善使用者的系統執行狀況,因為多個應用可通過提供程式共享相同字型。

文字放大鏡

Android 文字提供了放大鏡元件,通過放大鏡可以更輕鬆地選擇文字。Compose 現已支援文字放大鏡。

拖動選擇圖示時會顯示放大鏡,以便於您檢視指尖下方的內容。Compose 1.1.0 已支援在所選擇的文字欄位中使用放大鏡,Compose 1.2.0 在文字欄位和 SelectionContainer 中都支援放大鏡。Compose 放大鏡也得到了增強以匹配 View 中放大鏡的精確行為。

佈局功能和改進

惰性佈局

惰性佈局在不斷髮展,隨著網格 API LazyVerticalGridLazyHorizontalGrid 順利通過實驗性使用階段,我們新增了一個實驗性 API——LazyLayout,它允許開發者實現自定義惰性佈局。想要了解這些 API 的更多資訊,請觀看I/O 大會演講: Compose 中的惰性佈局

與 CoordinatorLayout 互操作

從現在起,當您在 View 系統的 CoordinatorLayout 中嵌套了一個支援滾動的可組合項時,您可以確保它們的滾動行為是可互操作的。這讓可摺疊工具欄的配置變得更加簡單。您可以呼叫新的實驗性 API rememberNestedScrollInteropConnection,並將其呼叫結果傳入 nestedScroll 修飾符來啟用該行為,可以檢視這個 示例程式碼瞭解更多:

視窗邊襯區

Accompanist 中的 insets 庫 現已升級到 Compose Foundation 庫中,請改為使用 WindowInsets 類。如需瞭解更多,請查閱 將 Compose 與現有介面整合 技術文件。

視窗大小類

為了更簡單地設計、開發以及測試可調整尺寸佈局,我們釋出了視窗大小類——一組主觀的視窗斷點。它們現在作為 Material 3 系列庫的一部分,在新庫 material3-window-size-class 的 alpha 版本中可用。如需瞭解更多有關視窗大小類的資訊,請查閱支援不同螢幕尺寸以及 Crane 中的示例實現

專注於效能

為幫助您瞭解和提升應用的效能,我們花費了大量精力為您提供新的效能工具和指南。這些內容可以幫助您更輕鬆地理解應用可能出現卡頓的原因和位置。

從 Android Studio Dolphin 開始,您可以使用 Layout Inspector 檢查可組合項發生重組的頻率。預期外的大量重組可以為您指明可優化的可組合項。此外,Android Studio Electric Eel 現已包含一個重組高亮指示器,它是一個視覺輔助工具,可以檢視哪些可組合項在何時發生重組。更多關於該新工具的資訊請查閱部落格 Android Studio 中的新特性

△ Layout Inspector 顯示重組計數和重組高亮指示器

Compose 從根本上改變了您編寫介面的方式,您可以遵循我們釋出的最佳實踐來確保應用的高效能。例如,您可以通過該 文件 瞭解關於如何編寫和配置您的 Compose 應用以實現最佳效能的建議。在 I/O 演講 Jetpack Compose 中常見的效能問題 中,Compose 團隊介紹了常見的效能錯誤以及這些錯誤的解決方法。

效能是一個需要持續關注的領域,我們正在努力改進並擴充套件相關工具和指南。同時,我們非常感謝您對我們迄今為止所有工作的反饋。您可以在 問題跟蹤器 中提出您開發中遇到的問題,也可以在 KotlinLang Slack 群組中提問。

新工具

除了完善 Compose 之外,我們還增加了新工具來幫助您更高效地使用 Compose。Android Studio Dolphin 目前已處於 Beta 階段,為 Compose 開發帶來了非常激動人心的特性。除了重組計數,新工具還包含了能幫助您一次檢視和瀏覽所有動畫的 Animation Coordination,以及能幫助您為多個螢幕尺寸構建應用的 MultiPreview 註解。此外為了幫助您快速迭代,Android Studio Electric Eel (Canary 版) 還帶來了 LiveEdit 這個新特性。

請查閱 I/O 演講: Android 開發工具中的新特性 以瞭解所有詳細資訊,同時我們希望能得到您的反饋,從而塑造更符合您需求的 Compose 工具。

Compose for Wear OS Beta 版釋出

如果有什麼比 Compose 更出色,那就是更多更全面的 Compose。因此,我們很高興見證 Compose for Wear OS 進入 Beta 階段。遵循與其他 Jetpack 庫相同的原則,Beta 意味著它的功能完整且 API 穩定,您可以開始準備為生產環境構建應用。如需瞭解更多資訊,請查閱 這篇部落格文章

更完善的指南

我們增加並修訂了關於 Compose 的一系列指南供您參考和學習:

Happy Composing!

我們期待您能像我們一樣為這些新特性感到興奮,如果您尚未開始,那麼現在正是學習 Jetpack Compose 的好時機,瞭解它如何適配您的團隊和開發過程,這樣您便能體驗到提高效率和開發者生產力所帶來的好處。Happy Composing!

歡迎您 點選這裡 向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支援!