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

Jetpack Compose 1.0 正式版已經(jīng)發(fā)布快一年的時(shí)間了,我們看到社區(qū)正以極大的熱情采納和使用 Compose: Kotlin 語(yǔ)法的簡(jiǎn)潔性以及使開發(fā)界面變得更快速、更簡(jiǎn)單的聲明式開發(fā)方式得到了廣大開發(fā)者們的贊賞。

Compose 在社區(qū)中的反響

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

我們很高興地看到這些團(tuán)隊(duì)在大規(guī)模和復(fù)雜的生產(chǎn)環(huán)境中仔細(xì)地評(píng)估并使用了 Compose,所帶來的結(jié)果也不僅是讓界面開發(fā)更清晰有趣,也帶來了更多工程上的收益。這只是其中幾個(gè)案例,因?yàn)?Play 商店排名前 1,000 的應(yīng)用中有超過 100 個(gè)正在使用 Compose。

我們?cè)陂_發(fā)過程中始終保持著與這些團(tuán)隊(duì)的密切合作,并不斷聽取廣大 Android 社區(qū)的反饋,這也是我們推進(jìn) 路線圖 的關(guān)鍵。如今,我們專注于提供新的 API 和特性改進(jìn)以支持您實(shí)現(xiàn)更高級(jí)的需求,這些改進(jìn)將和新的工具一起助力您更輕松地使用 Compose 構(gòu)建應(yīng)用。Compose 從根本上改變了界面的構(gòu)建方式,為了幫助您實(shí)現(xiàn)必要的思維轉(zhuǎn)變,我們將發(fā)布更多關(guān)于高級(jí)主題的指南、演講和 Codelab,以及更具深度的視頻,以便您編寫外觀和性能同樣出色的應(yīng)用。以下是 Compose 1.2 Beta 版本的新特性:

Compose 1.2 Beta

我們?cè)诮衲甑?Google I/O 大會(huì)上發(fā)布了 Compose 1.2 的第一個(gè) Beta 版本,其中包含了許多特性和改進(jìn):

文本改進(jìn)

字體邊距

我們?cè)趩栴}跟蹤器中定位到了 得票最高的問題之一,并通過將 includeFontPadding 設(shè)置為自定義參數(shù)來解決它。我們推薦您將該值設(shè)為 false,因?yàn)檫@會(huì)使布局中的文本更精確地對(duì)齊。我們計(jì)劃在未來的版本中將 false 設(shè)為默認(rèn)值。如果將值設(shè)為 false 導(dǎo)致您的應(yīng)用出現(xiàn)問題,請(qǐng)?jiān)谏鲜鲥e(cuò)誤報(bào)告中告知我們。此外,當(dāng) includeFontPadding 被設(shè)置為 false 時(shí),您可通過設(shè)置 lineHeightStyle 參數(shù)來調(diào)整 Text 可組合項(xiàng)的行高。兩個(gè)參數(shù)結(jié)合使用的效果如下:

△ 以多行的 Text 可組合項(xiàng)為例:左圖為設(shè)置 includeFontPadding 為 true (當(dāng)前默認(rèn)值) 的效果,右圖為設(shè)置 includeFontPadding 為 false 且設(shè)置了 lineHeightStyle 的效果
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,甚至還可以定義備用字體,這些操作無需任何復(fù)雜的配置。通過可下載字體,您可以保持較小的 APK 文件體積并改善用戶的系統(tǒng)運(yùn)行狀況,因?yàn)槎鄠€(gè)應(yīng)用可通過提供程序共享相同字體。

文本放大鏡

Android 文本提供了放大鏡組件,通過放大鏡可以更輕松地選擇文本。Compose 現(xiàn)已支持文本放大鏡。

拖動(dòng)選擇圖標(biāo)時(shí)會(huì)顯示放大鏡,以便于您查看指尖下方的內(nèi)容。Compose 1.1.0 已支持在所選擇的文本字段中使用放大鏡,Compose 1.2.0 在文本字段和 SelectionContainer 中都支持放大鏡。Compose 放大鏡也得到了增強(qiáng)以匹配 View 中放大鏡的精確行為。

布局功能和改進(jìn)

惰性布局

惰性布局在不斷發(fā)展,隨著網(wǎng)格 API LazyVerticalGridLazyHorizontalGrid 順利通過實(shí)驗(yàn)性使用階段,我們新增了一個(gè)實(shí)驗(yàn)性 API——LazyLayout,它允許開發(fā)者實(shí)現(xiàn)自定義惰性布局。想要了解這些 API 的更多信息,請(qǐng)觀看I/O 大會(huì)演講: Compose 中的惰性布局。

與 CoordinatorLayout 互操作

從現(xiàn)在起,當(dāng)您在 View 系統(tǒng)的 CoordinatorLayout 中嵌套了一個(gè)支持滾動(dòng)的可組合項(xiàng)時(shí),您可以確保它們的滾動(dòng)行為是可互操作的。這讓可折疊工具欄的配置變得更加簡(jiǎn)單。您可以調(diào)用新的實(shí)驗(yàn)性 API rememberNestedScrollInteropConnection,并將其調(diào)用結(jié)果傳入 nestedScroll 修飾符來啟用該行為,可以查看這個(gè) 示例代碼了解更多:

窗口邊襯區(qū)

Accompanist 中的 insets 庫(kù) 現(xiàn)已升級(jí)到 Compose Foundation 庫(kù)中,請(qǐng)改為使用 WindowInsets 類。如需了解更多,請(qǐng)查閱 將 Compose 與現(xiàn)有界面集成 技術(shù)文檔。

窗口大小類

為了更簡(jiǎn)單地設(shè)計(jì)、開發(fā)以及測(cè)試可調(diào)整尺寸布局,我們發(fā)布了窗口大小類——一組主觀的視窗斷點(diǎn)。它們現(xiàn)在作為 Material 3 系列庫(kù)的一部分,在新庫(kù) material3-window-size-class 的 alpha 版本中可用。如需了解更多有關(guān)窗口大小類的信息,請(qǐng)查閱支持不同屏幕尺寸以及 Crane 中的示例實(shí)現(xiàn)。

專注于性能

為幫助您了解和提升應(yīng)用的性能,我們花費(fèi)了大量精力為您提供新的性能工具和指南。這些內(nèi)容可以幫助您更輕松地理解應(yīng)用可能出現(xiàn)卡頓的原因和位置。

從 Android Studio Dolphin 開始,您可以使用 Layout Inspector 檢查可組合項(xiàng)發(fā)生重組的頻率。預(yù)期外的大量重組可以為您指明可優(yōu)化的可組合項(xiàng)。此外,Android Studio Electric Eel 現(xiàn)已包含一個(gè)重組高亮指示器,它是一個(gè)視覺輔助工具,可以查看哪些可組合項(xiàng)在何時(shí)發(fā)生重組。更多關(guān)于該新工具的信息請(qǐng)查閱博客 Android Studio 中的新特性。

△ Layout Inspector 顯示重組計(jì)數(shù)和重組高亮指示器

Compose 從根本上改變了您編寫界面的方式,您可以遵循我們發(fā)布的最佳實(shí)踐來確保應(yīng)用的高性能。例如,您可以通過該 文檔 了解關(guān)于如何編寫和配置您的 Compose 應(yīng)用以實(shí)現(xiàn)最佳性能的建議。在 I/O 演講 Jetpack Compose 中常見的性能問題 中,Compose 團(tuán)隊(duì)介紹了常見的性能錯(cuò)誤以及這些錯(cuò)誤的解決方法。

性能是一個(gè)需要持續(xù)關(guān)注的領(lǐng)域,我們正在努力改進(jìn)并擴(kuò)展相關(guān)工具和指南。同時(shí),我們非常感謝您對(duì)我們迄今為止所有工作的反饋。您可以在 問題跟蹤器 中提出您開發(fā)中遇到的問題,也可以在 KotlinLang Slack 群組中提問。

新工具

除了完善 Compose 之外,我們還增加了新工具來幫助您更高效地使用 Compose。Android Studio Dolphin 目前已處于 Beta 階段,為 Compose 開發(fā)帶來了非常激動(dòng)人心的特性。除了重組計(jì)數(shù),新工具還包含了能幫助您一次查看和瀏覽所有動(dòng)畫的 Animation Coordination,以及能幫助您為多個(gè)屏幕尺寸構(gòu)建應(yīng)用的 MultiPreview 注解。此外為了幫助您快速迭代,Android Studio Electric Eel (Canary 版) 還帶來了 LiveEdit 這個(gè)新特性。

請(qǐng)查閱 I/O 演講: Android 開發(fā)工具中的新特性 以了解所有詳細(xì)信息,同時(shí)我們希望能得到您的反饋,從而塑造更符合您需求的 Compose 工具。

Compose for Wear OS Beta 版發(fā)布

如果有什么比 Compose 更出色,那就是更多更全面的 Compose。因此,我們很高興見證 Compose for Wear OS 進(jìn)入 Beta 階段。遵循與其他 Jetpack 庫(kù)相同的原則,Beta 意味著它的功能完整且 API 穩(wěn)定,您可以開始準(zhǔn)備為生產(chǎn)環(huán)境構(gòu)建應(yīng)用。如需了解更多信息,請(qǐng)查閱 這篇博客文章。

更完善的指南

我們?cè)黾硬⑿抻喠岁P(guān)于 Compose 的一系列指南供您參考和學(xué)習(xí):

Happy Composing!

我們期待您能像我們一樣為這些新特性感到興奮,如果您尚未開始,那么現(xiàn)在正是學(xué)習(xí) Jetpack Compose 的好時(shí)機(jī),了解它如何適配您的團(tuán)隊(duì)和開發(fā)過程,這樣您便能體驗(yàn)到提高效率和開發(fā)者生產(chǎn)力所帶來的好處。Happy Composing!

歡迎您 點(diǎn)擊這里 向我們提交反饋,或分享您喜歡的內(nèi)容、發(fā)現(xiàn)的問題。您的反饋對(duì)我們非常重要,感謝您的支持!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容