Compose UI
androidx.compose.ui
androidx.compose.ui.geometry
androidx.compose.ui.graphics
androidx.compose.ui.platform
androidx.compose.ui.test
(查看所有 Compose 套件的 API 參考資料說明文件)
最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 8 月 7 日 | 1.6.8 版 | - | 1.7.0-beta07 | - |
結構
Compose 是由 androidx
中的 7 個 Maven 群組 ID 所組成。每個群組都包含一個指定功能子集,且各有一組專屬的版本資訊。
下表提供各群組的說明和每組版本資訊的連結。
群組 | 說明 |
---|---|
compose.animation | 在 Jetpack Compose 應用程式中建構動畫,提供豐富的使用者體驗。 |
compose.compiler | 透過 Kotlin 編譯器外掛程式轉換 @Composable 函式,並啟用最佳化功能。 |
compose.foundation | 透過現成的構成元素編寫 Jetpack Compose 應用程式,然後進一步擴充基礎,建構出自己的設計系統元件。 |
compose.material | 運用現成的 Material Design 元件建構 Jetpack Compose UI。這是更高層級的 Compose 進入點,用意是確保提供的元件與 www.material.io 上所述元件相符。 |
compose.material3 | 運用新一代的 Material Design 3 元件建構 Jetpack Compose UI。Material 3 提供新的主題設定和元件,以及動態色彩等 Material You 個人化功能,可呼應全新的 Android 12 視覺風格和系統 UI。 |
compose.runtime | Compose 程式設計模型和狀態管理的基本構成元素,以及 Compose Compiler 外掛程式指定的核心執行階段。 |
compose.ui | 與裝置互動所需的 Compose UI 基礎元件,包括版面配置、繪圖及輸入。 |
宣告依附元件
如要新增 Compose 的依附元件,必須將 Google Maven 存放區新增至您的專案。詳情請參閱「Google 的 Maven 存放區」一節。
在應用程式或模組的 build.gradle
檔案中,新增所需構件的依附元件:
Groovy
dependencies { implementation "androidx.compose.ui:ui:1.6.8" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.ui:ui:1.6.8") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。
意見回饋
您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。
詳情請參閱 Issue Tracker 說明文件。
1.7 版
1.7.0-beta07 版
2024 年 8 月 7 日
發布 androidx.compose.ui:ui-*:1.7.0-beta07
。1.7.0-beta07 版包含這些修訂版本。
修正錯誤
- 與文字輸入相關的
SemanticsNodeInteraction
函式performTextReplacement
、performTextInput
和performTextClearance
現在會在唯讀TextFields
上呼叫時擲回斷言錯誤。(I4ae8f)。
1.7.0-beta06 版
2024 年 7 月 24 日
發布 androidx.compose.ui:ui-*:1.7.0-beta06
。1.7.0-beta06 版包含這些修訂版本。
1.7.0-beta05 版
2024 年 7 月 10 日
發布 androidx.compose.ui:ui-*:1.7.0-beta05
。1.7.0-beta05 版包含這些修訂版本。
修正錯誤
- 修正錯誤:變更螢幕鍵盤會導致
TextField
在失去並恢復焦點前,無法接受新鍵盤的輸入內容。 - 修正問題:使用
SurfaceView
內容算繪時,若嘗試保留圖層內容,可能會導致非預期的副作用。
1.7.0-beta04 版
2024 年 6 月 26 日
發布 androidx.compose.ui:ui-*:1.7.0-beta04
。1.7.0-beta04 版包含這些修訂版本。
修正錯誤
- 避免在測量超大型文字行時當機 (例如 1 萬個字元) (8157ab)
- 停用
GraphicsLayer
API 的軟體轉譯支援功能。(35ddd8)。 - 修正層持續性邏輯中的當機問題。(70b13e)。
- 重複使用圖層物件最佳化已還原,因為這會導致算繪問題。(70b13e)。
1.7.0-beta03 版
2024 年 6 月 12 日
發布 androidx.compose.ui:ui-*:1.7.0-beta03
。1.7.0-beta03 版包含這些修訂版本。
1.7.0-beta02 版
2024 年 5 月 29 日
發布 androidx.compose.ui:ui-*:1.7.0-beta02
。1.7.0-beta02 版包含這些修訂版本。
API 變更
- 已將
SemanticsProperties.Editable
重新命名為IsEditable
,並將SemanticsPropertyReceiver.editable
變更為 valisEditable
。這個屬性現在是布林值,一律由文字欄位指定。(I8acd8)。 - 重新命名無障礙基準測試參數。(I3d440)。
- 更新了用來設定連結樣式的 API:
TextLinkStyles
現已成為LinkAnnotation
建構函式和AnnotatedString.fromHtml
方法的一部分 (I90b2b)。也從 Material 中移除TextDefaults
(I5477b)
修正錯誤
- 將
LayoutCoordinates.introducesFrameOfReference
重新命名為LayoutCoordinates.introducesMotionFrameOfReference
,以更貼切地反映其用途。已重新命名相關函式,以便根據該旗標計算座標。(I3a330)。
1.7.0-beta01 版
2024 年 5 月 14 日
發布 androidx.compose.ui:ui-*:1.7.0-beta01
。1.7.0-beta01 版包含這些修訂版本。
API 變更
- 已將
performCustomAccessibilityActionLabelled
重新命名為performCustomAccessibilityActionWithLabel
,並將performCustomAccessibilityActionWhere
重新命名為performCustomAccessibilityActionWithLabelMatching
。(I5387f)。 AnnotatedString.hasEqualsAnnotations
現在是hasEqualAnnotations
(I685c0)- 更新 API,以便在文字中取得質感設計主題連結。具體來說,請從
TextDefaults
中移除方法來建立主題式LinkAnnotations
,並剖析具有主題連結的 HTML。請改為新增TextLinkStyles
類別,以便將連結樣式設為 Text 可組合函式中的參數。(I31b93)。
修正錯誤
- 修正在事件 63e1504 期間動態新增指標輸入修飾符時的其他用途
1.7.0-alpha08 版
2024 年 5 月 1 日
發布 androidx.compose.ui:ui-*:1.7.0-alpha08
。1.7.0-alpha08 版包含這些修訂版本。
API 變更
- 新增對可變動形狀實作的支援。現在,系統會在圖形圖層中觀察
Shape#createOutline
,因此在狀態變更時,讀取狀態值會導致撤銷,讓形狀動畫更具效能。(Id1629、b/326070216) isPositionedByParentWithDirectManipulation
已重新命名為introducesFrameOfReference
。請注意,現在具有反向效果,也就是說,大多數LayoutCoordinates
都會預設導入一個參照畫面,而且只有在直接操控的情況下,屬性才會是 false。如果只想針對引入參考影格的查詢位置查詢,請使用positionInLocalFrameOfReference(...)
。或來自LookaheadScope
的positionInLocalLookaheadFrameOfReference
。(Ifc5f7)。LookaheadScope
API 現已穩定 (I21507)- 根據 API 委員會意見回饋變更
getScrollViewportLength
的動作 lambda。(Ibc74a)。 - 更新
GraphicsLayer
大綱 API,以便使用浮點參數,而非 int。移除UnsetOffset/UnsetSize IntSize
內含值,改用以浮點值為基礎的偏移和大小內嵌類別上現有的未指定常數 (I2fb03、b/333863462) - 在測試期間插入滑鼠輸入時,
MouseInjectionScope.click()
、MouseInjectionScope.doubleClick()
、MouseInjectionScope.tripleClick()
、MouseInjectionScope.longClick()
現在接受button: MouseButton
參數,使其更通用。所有方法的預設值為MouseButton.Primary
。(I31a23、b/190493367、b/261439695) - 已將
LinkInteractionListener
中的onClicked
重新命名為onClick
。(Iaa35c)。 - 將
TextInclusionStrategy.isInside
重新命名為isIncluded
。將Paragraph/MultiParagraph#getRangeForRect()
傳回類型設為不可為空值。(I51f26)。
修正錯誤
- 已修正使用
reverseScrolling=true
捲動容器的長螢幕截圖擷取問題。(I7c59c)。
外部貢獻
- 新增對巢狀
LazyLists
中的預先擷取項目支援 (例如算繪巢狀LazyRows
的LazyColumn
)。這項變更預計可減少這些LazyLists
捲動期間的影格遺失情形。預設的實作方式為預先擷取前 2 個巢狀項目,但可以透過新的LazyLayoutPrefetchStrategy(nestedPrefetchItemCount)
和LazyListPrefetchStrategy#onNestedPrefetch
API 控管這項行為。(I51952)。
1.7.0-alpha07 版
2024 年 4 月 17 日
發布 androidx.compose.ui:ui-*:1.7.0-alpha07
。1.7.0-alpha07 版包含這些修訂版本。
API 變更
ClickableText
已標示為已淘汰。如要在文字中加入連結,請使用與連結對應的LinkAnnotation
建立AnnotatedString
,並將這個AnnotatedString
傳遞至 Text 可組合函式。(I34d4b、b/323346994)- 加入
ViewConfiguration.HandwritingGestureLineMargin
適用於手寫手勢。支援BasicTextField
的JoinOrSplit
手勢 (Ie6e13、b/325660505) FocusProperties.enter
及FocusProperties.exit
不再是實驗版,FocusDirection.Enter
及FocusDirection.Exit
不再是實驗功能。FocusRequester.Cancel
不再處於實驗階段 (I461a1、b/261564106)- 查詢版面配置座標時,您現在可以使用
excludeDirectManipulationOffset
引數,排除透過Placeable.PlacementScope.withDirectManipulationPlacement
放置子項的父項 Layout 所設定的偏移值。同樣地,如果版面配置經常變更子項的位置,現在可使用withDirectManipulationPlacement
(例如捲動,依預設實作) 放置這些元素。這有助於approachLayout
動畫更符合直覺,現在有機會區分動畫的偏移值,以及決定動畫效果時要直接套用哪些元素。(I60ec7)。 - 移除長螢幕截圖的功能旗標。(I28648、b/329128246)
LazyColumn
現在可在長螢幕截圖中正確顯示固定式標頭。(I8d239、b/329296635)- 以
UserInput
和SideEffect
取代NestedScroll
來源的延伸定義,現在包含動畫 (副作用) 及滑鼠滾輪和鍵盤 (UserInput
)。(I40579)。 ApproachLayoutModifierNode
和Modifier.approachLayout
現已穩定,新的isMeasurementApproachInProgress()
和isPlacementApproachInProgress()
會分別取代舊的isMeasurementApproachComplete()
和isPlacementApproachComplete()
。- 已移除淘汰的
intermediateLayout
修飾符。(I3e91c)。 - 重新命名
GraphicsLayer#buildLayer
以與 Displaylist 支援的 API (例如RenderNode
和 Picture) 的 start/endRecording 方法保持一致, - 已更新
rememberGraphicsLayer
,以便使用rememberObserver
。(I312c1、b/288494724、b/330758155) UrlAnnotation
已淘汰,請改用LinkAnnotation.Url
。如果您使用 Material Design 主題設定,請使用TextDefaults
物件建立註解,並為其套用 Material Design 主題設定 (I8d180、b/323346545)- 除了一般樣式、懸停和聚焦之外,文字連結使用按下的狀態樣式選項 (I5f864、b/139312671)
String.parseAsHtml
已重新命名為AnnotatedString.Companion.fromHtml
。(I43dcd)。- 已將樣式引數 (
linkStyle
、focusedLinkStyle
、hoveredLinkStyle
) 和連結互動事件監聽器新增至parseAsHtml
方法。使用<a>
標記剖析 HTML 標記字串時,該方法會為每個標記建構LinkAnnotation.Url
,並將樣式物件和連結互動事件監聽器傳遞至每個註解。(I7c977)。 LinkAnnotation
現在會使用以狀態為基礎的樣式引數和LinkInteractionListener
。將此註解新增至AnnotatedString
即可取得超連結。藉由傳遞focusedState
和/或hoveredState
,您可以為已聚焦和/或懸停的連結定義視覺configuration
。(I81ce4、b/139312671)ImeOptions.hintLocales
已不可為空值。如果想傳遞空白的語言代碼清單,請使用LocaleList.Empty
。(Ic5bc4)。
修正錯誤
- 妥善處理錯誤/損毀的歷來輸入事件資料 (忽略無效偏移資料)。
- 修正在有效指標輸入事件串流期間 (例如懸停進入和懸停結束 [mouse/stylus]) 期間,在指標輸入修飾符之前以動態方式新增指標輸入修飾符時,非預期的指標事件。
1.7.0-alpha06 版
2024 年 4 月 3 日
發布 androidx.compose.ui:ui-*:1.7.0-alpha06
。1.7.0-alpha06 版包含這些修訂版本。
新功能
- 為樣式字串新增
parseAsHtml
方法:可將標有 HTML 標記的字串轉換為AnnotatedString
。請注意,並非所有標記都受支援,例如目前還無法顯示項目符號清單。(I84d3d、I30626、b/139326648) - 使用官方 Android API (
ScrollCaptureCallback
),針對 Compose 捲動容器中的長螢幕截圖實作實驗性支援。這項功能仍在實驗階段,目前可能無法正確處理所有情況。因此,這項功能目前預設為停用。如要選擇啟用這項功能,請將ComposeFeatureFlag_LongScreenshotsEnabled
標記設為 true。(I2b055、b/329296471)
API 變更
fun ClipEntry.getMetadata()
已變更為val ClipEntry.clipMetadata
。(I50155)。- 已移除
ClipboardManager.getClipMetadata
和ClipboardManager.hasClip
函式。請使用clipEntry.getMetadata()
讀取目前片段項目的中繼資料。同時檢查ClipboardManager.getClip
結果是否為空值,以瞭解剪貼簿是否有目前的剪輯片段。(I50498)。 - 現在您可以將
GraphicsLayer
物件傳遞至placeable.placeWithLayer()
函式 (I1b22f) ClipboardManager.setClip
現可接受空值,以便清除剪貼簿。(I7d2e9)。- 新增資源 ID,以協助隱藏建構工具中用來實作詳細資料的檢視畫面 (I99531)
- 新增了
GraphicsLayer#toImageBitmap
暫停方法,以支援將點陣圖的內容算繪到GraphicsLayer
。這是在 API 級別 22 (含) 以上 (含) 的硬體加速轉譯作業,支援超過 99% 的 Android 裝置。在 Android API 級別 21 中,這會改回軟體算繪方式。(I9e114)。 - 將 Android
RectF
轉換為ComposeRect
的輔助方法 (I39925、b/325660505) - 根據預設,所有
KeyboardOptions
參數現在都有未指定的值。已新增KeyboardOptions.merge
方法 - 已將
KeyboardOptions.autoCorrect
重新命名為autoCorrectEnabled
,並使其可為空值,其中 null 表示沒有指定任何值。(Ia8ba0、b/295951492) BasicTextField(state)
變化版本和BasicSecureTextField
現在會使用KeyboardActionHandler
,而不是KeyboardActions
來處理軟體鍵盤執行的動作。(I58dda)。
1.7.0-alpha05 版
March 20, 2024
發布 androidx.compose.ui:ui-*:1.7.0-alpha05
。1.7.0-alpha05 版包含這些修訂版本。
新功能
- 推出新的
GraphicsLayer
API,以記錄顯示清單中的繪圖指令,以及影響顯示清單轉譯的其他屬性。這可以提供隔離邊界,將複雜的場景分割成數個較小的片段,以便個別更新,而無需重新建立整個場景。對GraphicsLayer
進行的轉換不必重新記錄顯示清單即可。與Modifier.graphicsLayer
不同,GraphicsLayer
可讓您在其他位置顯示可組合內容,如果內容應在不同場景轉譯,特別適合用於動畫用途。
API 變更
GraphicsLayer.draw(Canvas)
不再是公用 API。請改用DrawScope.drawLayer(GraphicsLayer)
擴充功能函式繪製圖層。(I7a7c0)。- 將
restrictedConstraints()
分割為兩個方法:fitPrioritizingWidth()
和fitPrioritizingHeight()
(I6d7fd) - 推出適用於 Android L 的
HardwareCanvas
虛設常式 (I1c3b5、b/288494724) - 更新 Compose 架構,在更新擁有者、
DelegateableNode
和drawWithCache
修飾符實作時公開GraphicsContext
組合,以公開對GraphicsContext
的限定存取權,以便在修飾符關閉時,自動清理GraphicsLayer
執行個體。(I64a2f、b/288494724) - 推出了
InterceptPlatformTextInput
,以協助編寫低階輸入法編輯器相關測試,以及其他低階輸入法編輯器用途。PlatformTextInputTestOverride
已淘汰(I862ed、b/322680547) - 已新增
GraphicsLayer.setOutline(Outline)
擴充功能函式。(Ib81f4)。 - 導入
GraphicsContext
函式建構函式,建立工廠函式來建立GraphicsLayer
執行個體 (Ib98d6、b/288494724) - 公開
GraphicsLayer
API,讓開發人員能夠擷取繪圖指令,而這些指令可用於在其他地方繪製,並為最終結果套用不同的視覺效果。(I80245、b/288494724) - 加入
Paragraph#getRangeForRect
,以傳回指定矩形區域涵蓋的一段文字。(Iee516、b/325660505) - 已移除使用
onLinkClicked
引數的BasicText
實驗性覆寫設定。我們日後會推出替代 API 來支援超連結。(I107d5)。
修正錯誤
- 新增
GraphicsLayer
預期/實際 API 定義,支援透過選用的合成視覺效果和轉換功能擷取及重播繪圖指令。推出GraphicsContext
介面以納入圖形依附元件,包括建立及管理GraphicsLayer
例項。(I4a8d6、b/288494724) - 修正 1D 焦點搜尋的互通性問題,在嵌入其他檢視畫面的
ComposeView
內,焦點會停在這類搜尋中。(I08fd4)。
外部貢獻
LocalLifecycleOwner
已從 Compose UI 移至lifecycle-runtime-compose
,以便在 Compose UI 之外使用其 Compose 輔助 API。感謝 Jake Wharton 的貢獻。(I6c41b、b/328263448)- 針對所有偏誤對齊子類型,持續顯示偏誤浮點屬性。(I69f0f、b/328088992)
1.7.0-alpha04 版
2024 年 3 月 6 日
發布 androidx.compose.ui:ui-*:1.7.0-alpha04
。1.7.0-alpha04 版包含這些修訂版本。
API 變更
- 在 Android U 之後的裝置上使用 BasicTextField2 的觸控筆手寫功能。(I002e4)。
- 在這個 CL 中,我們要新增
GetScrollViewportLength
語意動作,以便將 Compose 中捲動的元件相關資訊傳遞至 a11y 系統。此 CL 也會應用在基礎捲動式清單中上述屬性的用途。(Ic5fa2)。 FocusRequester.createRefs
現在是穩定版 (I4d92c、b/261436820)- 推出
DelegatableNode.requireView()
,讓修飾符節點不必讀取本機組合,即可取得目前的 AndroidView
。(I40768)。 - 新的 API
Path.reverse()
可反轉路徑的方向 (I36348) - 在
KeyboardOptions
中新增hintLocales
,讓TextFields
能夠提示採用特定語言代碼的輸入法編輯器,預設偏好語言。 - 從
Locale
公開platformLocale
屬性,該屬性會傳回基礎平台物件,例如:java.util.Locale
。(I921c6)。
1.7.0-alpha03 版
2024 年 2 月 21 日
發布 androidx.compose.ui:ui-*:1.7.0-alpha03
。1.7.0-alpha03 版包含以下修訂項目。
API 變更
- 隆重推出
ContextualFlowRow
和 EnhancedFlowRow
/Column
功能,內含 MaxLines 和溢位現象。很高興在此宣布,實驗性的FlowRow
和FlowColumn
有強化的功能,現在除了ContextualFlowRow
和ContextualFlowColumn
的問世,還提供 maxLines 和溢位支援。本次更新旨在提供效能最佳元件,因此ContextualFlow*
最適合用於大量項目,例如使用小型maxLines
設定和動態 +N 顯示更多按鈕,而FlowRow
和FlowColumn
最適合用於數量較少的項目 (少於 100 個項目)。重要事項:如要在FlowRow
或FlowColumn
中繼續使用現有行為,而所有項目都不採用跨軸上限,請在初始化期間將overflow
設為FlowRowOverflow.Visible
或FlowColumnOverflow.Visible
。探索ContextualFlowRowSample
和FlowRowSample
,查看這些新功能實際使用的範例。(Ib9135、b/293577082) - 新增
maxTextLength
語意屬性,應針對可篩選字元數上限的文字欄位設定。(I24d9f、b/170648072) Modifier.inspectable
包裝函式已淘汰。這個 API 會建立修飾符的撤銷數量,因此不建議使用。現在不建議使用。如果想向工具公開修飾符屬性,我們建議在ModifierNodeElement
上實作inspectableProperties()
方法。(Ib3236)。- 新的
PopupProperties
建構函式,可完全控制WindowManager.LayoutParams
標記。(Ibb33e、b/312485503) - 已導入
DelegatableNode.requireLayoutCoordinates()
,以便取得Modifier.Node
目前的LayoutCoordinates
,無需覆寫onPlaced
並將座標自行儲存在屬性中。(Ia8657)。 - 已導入
DelegatableNode.currentLayoutCoordinates
,以便取得Modifier.Node
目前的LayoutCoordinates
,無需覆寫onPlaced
並將座標自行儲存在屬性中。(Iaebaa)。 BasicTextField2
和androidx.compose.foundation.text2
套件下的相關 API 已移至androidx.compose.foundation.text
。(I9f635)。- 新增
ApproachLayoutModifierNode
API,以支援在明確的修飾符節點中建立自訂方法邏輯。此外,針對建立例項時目標不明的動畫,新增實驗性的DeferredTargetAnimation
API。(I60745)。 - 新增
Path
API 以查詢路徑的方向,並從Path
擷取線條。(I63d04)。 - 新增了
PathHitTest
和Path.contains(Offset)
,檢查Path
是否包含特定點。(I3b218)。 TextLayoutResult
現在會公開getLineBaseline(lineIndex)
方法。如此一來,除了現有的便利屬性firstBaseline
和lastBaseline
之外,您還可以讀取任意行文字的基準線。(Ide4e8、b/237428541)- 新增了僅比較兩個
AnnotatedStrings
註解的方法。(I32659)。
修正錯誤
- 已修正
SemanticsPropertyReceiver.performImeAction
和SemanticsActions.PerformImeAction
的回溯相容性問題。(Id0528、b/322269946)
1.7.0-alpha02 版
2024 年 2 月 7 日
發布 androidx.compose.ui:ui-*:1.7.0-alpha02
。1.7.0-alpha02 版包含以下修訂項目。
API 變更
- 已修正與
SemanticsPropertyReceiver.performImeAction
的二進位檔相容性問題。(I65865、b/322269946) - 採用
usePlatformDefaultWidth
參數的PopupProperties
建構函式不再是實驗性質。(I8f8d2)。 - 新增了
ComposeTestRule.waitUntil
超載,可接受要納入逾時訊息的字串說明。(I9413e)。 - 新增語意 API
unset()
,以移除在同一個修飾符鏈結中新增的語意屬性。新增語意屬性isOpaque
。(I8c583、b/317966058、b/246056649) - 已從
PointerInputChange
公用 API 的複製方法中移除originalEventPosition
。(I7bead)。
修正錯誤
- 修正在選取時可點選非分頁和非圓形按鈕的 a11y 錯誤。(I2181c)。
VelocityTracker
現在預設可以修正新增點的問題。如有任何問題,仍可將VelocityTrackerAddPointsFix
設為 false,即可停用修正功能。(Ib3877、b/269487059)- 已修正
TextStyle
和ParagraphStyle
中的回溯二進位檔不相容問題。(I179f0、b/320819734)
外部貢獻
1.7.0-alpha01 版
2024 年 1 月 24 日
發布 androidx.compose.ui:ui-*:1.7.0-alpha01
。1.7.0-alpha01 版包含以下修訂項目。
API 變更
- 透過新增
ClipEntry
和ClipMetadata
展開ClipboardManager
,以便支援圖片等任意內容。 - 將
DeviceConfigurationOverride
API 新增至ui-test
以允許本機 覆寫受測試內容的行為,例如指定 大小、語言代碼、版面配置方向、字型大小或主題。
1.6 版本
1.6.8 版
2024 年 6 月 12 日
發布 androidx.compose.ui:ui-*:1.6.8
。1.6.8 版包含這些修訂版本。
修正錯誤
- 修正在字型大小小於定義最低表格時,字型縮放會產生不一致的問題。在這個案例中,我們現在在線性 1 倍比例和定義最小的表格之間插入內插,使字型大小增加時單純放大。(Icbae3)。
1.6.7 版
2024 年 5 月 1 日
發布 androidx.compose.ui:ui-*:1.6.7
。1.6.7 版包含這些修訂版本。
1.6.6 版
2024 年 4 月 17 日
發布 androidx.compose.ui:ui-*:1.6.6
。1.6.6 版包含這些修訂版本。
修正錯誤
- 修正罕見的
BasicTextField
當機問題。
1.6.5 版本
2024 年 4 月 3 日
發布 androidx.compose.ui:ui-*:1.6.5
。1.6.5 版包含這些修訂版本。
1.6.4 版
March 20, 2024
發布 androidx.compose.ui:ui-*:1.6.4
。1.6.4 版包含這些修訂版本。
1.6.3 版
2024 年 3 月 6 日
發布 androidx.compose.ui:ui-*:1.6.3
。1.6.3 版包含這些修訂版本。
1.6.2 版
2024 年 2 月 21 日
發布 androidx.compose.ui:ui-*:1.6.2
。1.6.2 版包含以下修訂項目。
1.6.1 版
2024 年 2 月 7 日
發布了 androidx.compose.ui:ui-*:1.6.1
。1.6.1 版包含以下修訂項目。
修正錯誤
- 已修正
SemanticsPropertyReceiver.performImeAction
和SemanticsActions.PerformImeAction
的回溯相容性問題。(Ie0bb2、b/322269946) - 現在,Layout 會在測量元素傳回異常大尺寸時,發出錯誤。當測量方式直接使用最大限制條件但未檢查
Constraints.Infinity
時,通常會發生這類錯誤。這項檢查可協助開發人員找出版面配置大小錯誤,而非包含該版面配置的版面配置問題。(I339a9)。
1.6.0 版
2024 年 1 月 24 日
發布 androidx.compose.ui:ui-*:1.6.0
。1.6.0 版包含以下修訂項目。
1.6.0-rc01 版
2024 年 1 月 10 日
發布 androidx.compose.ui:ui-*:1.6.0-rc01
。1.6.0-rc01 版包含以下修訂項目。
修正錯誤
- 最佳化向量圖形實作,盡量減少其他重組作業來提升效能。
1.6.0-beta03 版
2023 年 12 月 13 日
發布 androidx.compose.ui:ui-*:1.6.0-beta03
。1.6.0-beta03 版包含以下修訂項目。
新功能
- 現在可以在不卸離節點的情況下卸離
LayoutCoordinates
。在 Compose 版面配置檢查器中加以防範 (If693)
修正錯誤
PlatformImeOptions
現在是具體類別,而非介面。(If40a4)。- 修正
LocalSoftwareKeyboardController
和LocalTextInputService
造成的額外下游重組作業,在每次重組根重組時提供新值。(I42190、b/310510985)
1.6.0-beta02 版
2023 年 11 月 29 日
發布 androidx.compose.ui:ui-*:1.6.0-beta02
。1.6.0-beta02 版包含以下修訂項目。
1.6.0-beta01 版
2023 年 11 月 15 日
發布 androidx.compose.ui:ui-*:1.6.0-beta01
。1.6.0-beta01 版包含以下修訂項目。
API 變更
DragAndDropTarget
修飾符現在會明確接收接收的DragAndDropTarget
,並且使用 lambda 來選擇拖曳工作階段。現在DragAndDropModifierNode
有兩個工廠函式。一個用於接收移轉作業,另一個用於轉移資料 (I69481)- 更新
maximumFlingVelocity
,以浮點值表示。更新說明文件,更清楚地說明maximumFlingVelocity
的團結。(I8adc7)。 DragAndDropModifierNode
工廠中的onDragAndDropStart
已重新命名為acceptDragAndDropTransfer
。已將acceptsDragAndDropTransfer
新增至dragAndDropTarget
修飾符,以接受拖曳工作階段。如果對拖曳工作階段感興趣,這個 lambda 會傳回可行的DragAndDropTarget
。此方法已取代用於處理拖曳事件的其他 lambda。新增了DragAndDropTarget
工廠函式,以接收拖曳工作階段 (Iebf3a)已移除
DragAndDropInfo
做為DragAndDropModifierNode.drag
類型的參數,現在會採用transferData
的參數、裝飾大小和拖曳裝飾DrawScope
lambdaDragAndDropTarget
包含特定拖曳事件的方法,而非單一抽象方法DragAndDropModifierNode
的工廠函式中的onDragAndDropEvent
已重新命名為onDragAndDropStart
,以便更明確指出提供的DragAndDropTarget
僅適用於特定拖曳工作階段已移除
DragAndDropEventType
(I645b1)PlatformTextInputModifierNode.runTextInputSession
已重新命名為establishTextInputSession
。(I03cd0)。改善可週遊節點 API 的名稱,使其更容易理解。(Ia4474)。
將
OriginalText
取代為TextSubstitution
。(Ifa5a8)。PlatformTextInputModifierNode.textInputSession
已重新命名為runTextInputSession
。(Ie9c6b)。SubcomposeLayout
的子項 (以及根據此做法保留的LazyColumn
等) 日後會再重複使用的版面配置都會視為停用。我們推出了新的assertIsDeactivated()
測試 API,用來測試這類節點。根據預設,測試 API 的其餘部分會篩除停用的節點。(I2ef84、b/187188981)已移除
FocusDirection.In
和FocusDirection.Out
,改用FocusDirection.Enter
和FocusDirection.Exit
(I2f660)Material
SwipeToReveal
API (適用於資訊卡和方塊) 現在必須使用以運算單元為基礎的 API (依 Compose 的建議),而非以資料類別為基礎的例項來建立這些版位。這是破壞性變更,請參閱示範和程式碼範例,瞭解如何使用新的 API。(Ia8943)。FontStyle(int)
建構函式已淘汰,請改用FontStyle.Normal
或FontStyle.Italic
。(I66610)。已將
FontScalable
介面重新命名為FontScaling
(Ie804a)
修正錯誤
- 如果未聚焦於文字編輯器,
SoftwareKeyboardController.show()
將不再顯示螢幕鍵盤。(I2165a、b/301477279) - 系統會略過在同一 Compose 檢視畫面中未收到下按鈕事件的按鍵,忽略硬體按鍵的按鍵事件。(Ib37b4、b/305518328)
- 在
ArcLine
中新增針對 Sweep Gradient 的轉譯器支援。(I4d5bb)。 - 為
PageSize.Fixed
實作「等於」和「雜湊碼」。(Ie3ede、b/300134276) - 修正與視窗插邊變更相關的二進位檔相容性問題 (Iee695)
- 移除 Material3 方塊/按鈕的 Material 核心層,因為 Microbenchmark 在沒有該層的情況下,效能更好。(I55555)。
- 以
effectContext
傳遞至 Compose 測試的TestDispatcher
現在會用於建立測試和影格時鐘。(Ia7178)。
1.6.0-alpha08 版
2023 年 10 月 18 日
發布 androidx.compose.ui:ui-*:1.6.0-alpha08
。1.6.0-alpha08 版包含以下修訂項目。
API 變更
Modifier.dragAndDrawSource
已將onDrawDragShadow
lambda 重新命名為drawDragDecoration
,而DragAndDropInfo
的大小參數已重新命名為dragDecorationSize
。(Id0e30、b/303904810)- 導入
SemanticsNodeInteraction.isDisplayed()
和SemanticsNodeInteraction.isNotDisplayed()
,檢查相符的節點是否可見,而不在斷言的情況下顯示。(I2c196、b/302100809) - 針對
ParagraphTextStyle
的TextAlign
、TextDirection
、Hyphens
和LineBreak
欄位引入特殊的Unspecified
值,以取代null
。由於這些類別是內嵌類別,只要以「未指定」取代可為空值的類別,就能避免基本的類型拳擊。已更新TextStyle
和段落樣式中的建構函式、getter 和其他方法,接受上述參數做為非空值類型。(I4197e、b/299490814) - 新增
GoogleFont
超載,以便從 XML 讀取GoogleFont
。(If8f59)。 - 將
LoremIpsum
PreviewParameterProvider
設為開放式課程。(I41bf5、b/266918816、b/300116360)
修正錯誤
FontFamilyResolver
現在使用Dispatchers.Main
執行快取管理協同程式。(Ie8dd9)。AndroidViewBinding
現在使用commitNow
(而非先前使用的commit
) 在版面配置中納入FragmentContainerView
,藉此同步移除加載的Fragment
例項,進而修正即時編輯功能的問題,並在變更時取代組合。onRelease
(I58fbf)。
1.6.0-alpha07 版
2023 年 10 月 4 日
發布 androidx.compose.ui:ui-*:1.6.0-alpha07
。1.6.0-alpha07 版包含以下修訂項目。
API 變更
- 推出
PlatformTextInputMethodTestOverride
,以便針對自訂文字編輯器編寫測試。(Id159b)。 - 新增用於開始拖曳工作階段的
dragAndDropSource
修飾符,以及接收拖曳工作階段的dragAndDropTarget
修飾符。(Ib7828、b/286038936) - 已新增避免進行配置的
ColorList
和ColorSet
集合。(I744bd)。 - 新增了
DisableNonLinearFontScalingInCompose
臨時標記,以停用非線性字型縮放功能。如果您需要清理這些變數,請在測試中設定DisableNonLinearFontScalingInCompose = true
。這個旗標將在 Compose 1.6.0-beta01 中移除。(Ic9486)。
修正錯誤
- 最佳化 XML 向量可繪項目剖析。(Ibb015)。
1.6.0-alpha06 版
2023 年 9 月 20 日
發布 androidx.compose.ui:ui-*:1.6.0-alpha06
。1.6.0-alpha06 版包含以下修訂項目。
API 變更
- Material 圖示的其他最佳化設定。(I3e08d)。
- 新增穿越上/下修飾符樹狀結構的功能,以找出類似節點。(I2d234)。
- 已將
onRestoreFailed()
回呼新增至focusRestorer()
修飾符 (Ie1d43) - 為各種圖形 API 新增 androidx 註解,以指定
ColorInt
、FloatRange
、IntRange
、Size
等。(Id65c8、b/290950582) - 將
showSystemUi=true
新增至PreviewScreenSizes
定義 (Ib61d3)
行為變更
- Compose 現在使用非線性字型縮放功能,提升可讀性和無障礙程度。當字型大小調整時 >系統設定中為 100%,小型文字會正常放大,但已經放大的文字只會稍微增加。此外,SP 中定義的行高會自動調整,以符合 100% 比例的預期高度。詳情請參閱字型縮放最佳做法。(I11518)。
1.6.0-alpha05 版
2023 年 9 月 6 日
發布 androidx.compose.ui:ui-*:1.6.0-alpha05
。1.6.0-alpha05 版包含以下修訂項目。
API 變更
- 啟用
AndroidComposeViewAccessibilityDelegateCompat
的內容擷取功能。(Ib2969)。 ScrollView
和RecyclerView
等 View 元件中的快速滑過速度限制為ViewConfiguration.ScaledMaximumFlingVelocity
。Compose 現在包含自己的maximumFlingVelocity
版本,現已套用至Draggable
。(Ibf974)。- 新增初始 Scaffolding,以支援平台拖曳 API。(If84ce)。
- 將
deviceId
新增至RotaryScrollEvent
(Iba3bf) - 更新
ui-tooling
Devices API,加入較新的裝置 (Ib25b4)
1.6.0-alpha04 版本
2023 年 8 月 23 日
發布 androidx.compose.ui:ui-*:1.6.0-alpha04
。1.6.0-alpha04 版本包含以下修訂版本。
API 變更
- 新增停用
ReusableComposition
的方法,可移除觀察項目,但保留節點。呼叫setContent
即可再次啟用已停用的組合。(Ib7f31)。 - 新增
ReusableComposition
介面,用於管理生命週期和重複使用子組合。(I812d1、b/252846775) Modifier.focusGroup
已升級為穩定版 API。(I7ffa3)。- 為各種圖形 API 新增 androidx 註解,以指定
ColorInt
、FloatRange
、IntRange
、Size
等。(I70487、b/290950582) - 已更新
ColorFilter
API 以提供具體子類別類型,提升參數的可檢查性。(I5fe29)。 - 推出 wear-tooling-preview 程式庫,列出可用於 UI 預覽的有效 Wear 裝置 (Ib036e)
- 建立
FontScalable
介面,處理密度介面部分的字型縮放作業。(I2cf3f)。
1.6.0-alpha03 版本
2023 年 8 月 9 日
發布 androidx.compose.ui:ui-*:1.6.0-alpha03
。1.6.0-alpha03 版包含以下修訂項目。
API 變更
- 新的進入/離開轉換類型,可在進入/離開時根據動畫容器大小調整內容。退出動畫
LookaheadScope
可組合元件的優點和介面現已穩定。(Ifb2ce)。 - 新增設定
privateImeOptions
的支援功能 (Idb772)
修正錯誤
- 現在當計算中的狀態讀取有所改變時,
PopupPositionProvider.calculatePosition
會自動更新彈出式視窗的位置。(I676a1、b/292257547) - 修正文字欄位顯示,當
readOnly
為 true 時可供編輯。此外,也修正了在聚焦時readOnly
從 true 變更為 false 時,鍵盤無法顯示。(I34a19、b/246909589) - 擴大在 UI 測試中應用全域斷言。(I1f90d)。
1.6.0-alpha02 版本
2023 年 7 月 26 日
發布 androidx.compose.ui:ui-*:1.6.0-alpha02
。1.6.0-alpha02 版包含以下修訂項目。
API 變更
- 新增了服務定位器介面,可由 Composition 的實作者實作,以允許將 Composition 委派給其他組合委派服務查詢給原始組成。這不應稱為 Directy,而且可用於在執行階段中啟用建立實驗性 API,這些 API 可從封裝的 Compose 版本中找到,例如 UI 模組。(I296b9)。
PlatformTextInput*
API 全面重新設計,(I6c93a、b/274661182、b/267235947、b/277380808)SoftwareKeyboardController
及LocalSoftwareKeyboardController
不再是實驗版,LocalSoftwareKeyboardController
現在也是正確的CompositionLocal
。(I4c364)。- 我們已淘汰
LookaheadLayout
和LookaheadLayoutScope
,並移除了其中幾個版本。替換的 API 為LookaheadScope
,可與任何版面配置搭配使用。(I12ac3)。 - 新增了
SemanticsNodeInteraction.requestFocus
,做為在測試中要求焦點的方便且可偵測方式。(Ie8722)。 - 新增用來註冊全域斷言的實驗性 API,供日後測試架構使用。(I12d77)。
修正錯誤
- 現在,
AndroidView
的update
回呼第一個叫用會延後到附加檢視區塊為止,而不是在套用AndroidView
的組合時執行。這修正了以下錯誤:如果update
回呼在讀取狀態後立即變更,就不會失效。(Ie9438、b/291094055)
1.6.0-alpha01 版本
2023 年 6 月 21 日
發布 androidx.compose.ui:ui-*:1.6.0-alpha01
。1.6.0-alpha01 版包含以下修訂項目。
新功能
- 支援在
LazyList
中使用可預測功能。如此一來,前望傳遞中的LazyList
就能略過任何動畫 (例如項目位置動畫、AnimatedVisibility
等),並計算所有子項的抬頭大小和位置。透過觀景通道瀏覽圖像後,LazyList
的子項就可以針對現實情境建立個別動畫,如預先查看票證所示。
行為變更:在 Compose 中,includeFontPadding 現在預設為 false
在 Compose 中,includeFontPadding
現在預設為 false (21d806)。
includeFontPadding
是舊版屬性,可控制是否在文字第一行和最後一行上方加入額外的邊框間距,以容納文字基準線上方或下方的任何字元。
更新這個 Compose 版本後,系統會移除顯示的每個文字第一行和最後一行的額外邊框間距,藉此修改 UI 中所有文字的呈現方式。
視 UI 需求和使用的字型指標而定,這項變更會大幅減少。不過,您可能會遇到下列攔截器問題: - 螢幕擷取畫面測試損毀。視需要修正 UI,然後重新產生黃金圖片。 - 文字有稍微對齊。請移除所有自訂負邊框間距,或視需要加上邊框間距。
您可以使用 PlatformTextStyle
為每則文字選擇啟用 includeFontPadding
:
Text(
text = myText,
style = TextStyle(
lineHeight = 2.5.em,
platformStyle = PlatformTextStyle(
includeFontPadding = true/false
)
/* … */
)
)
您可以設定 Material Design 樣式,選擇所有文字使用 includeFontPadding
。請注意,M2 和 M3 的參數名稱會有所不同。
val Typography = Typography(
body1 = TextStyle(
fontFamily = /* … */,
fontSize = /* … */,
platformStyle = PlatformTextStyle(
includeFontPadding = false
)
/* … */
)
)
MaterialTheme(
typography = Typography,
/* … */
)
如要進一步瞭解 Compose includeFontPadding
,請參閱開發人員說明文件和這篇網誌文章。
如果您遇到與這項變更有關的問題/錯誤,請使用 Issue Tracker 回報錯誤。
API 變更
- 支援
InputConnection#requestCursorUpdates
(I0c69b) - 新增了
FocusRequester.saveFocusedChild
和FocusRequester.restoreFocusedChild
(Ic557e、b/272302679、b/275157318) - 新增
ResourceResolutionException
類型,以在嘗試載入點陣圖素材資源時擲回的 Throwable 納入,並附上無法載入的資產路徑說明。(I19f44、b/230166331、b/278424788) - 針對效能和記憶體配置調整無障礙功能。(Iede48)。
- 新增語意屬性和動作,支援文字翻譯(I4a6bc)。
IntrinsincMeasureScope
及其實作項目 (例如MeasureScope
) 中的新屬性,指出目前的測量過程是否為 Lookahead 傳遞。(I7a812)。- 更新
DrawScope
API,引入功能將算繪重新指定至採用替代密度/版面配置方向和大小的不同畫布。 - 已更新
DrawContext
,以便支援密度和版面配置方向的設定,並使畫布可設定。(Ie1f9b、b/225408150) - 新增了
Paragraph#fillBoundingBoxes
來計算字元定界框。(If30ee)。 - 新增了一組常見的
MultiPreviews
(Ia5a27)
修正錯誤
- 已新增
FocusTargetModifierNode
介面,可用於建立自訂FocusTarget
。(I9790e)。 - 已將
TextMeasurer
建構函式中的fallback*
參數重新命名為default*
。(I940a5)。 - 已將
SemanticsPropertyReceiver.performImeAction
重新命名為onImeAction
,並將SemanticsActions.PerformImeAction
重新命名為OnImeAction
。(I8e841)。 - 新增滾輪,以區分滑鼠捲動和巢狀捲動中的拖曳動作 (特別是在
NestedScrollConnection
中)。(Ie57e4)。 - 新增了
asComposePaint
API 以取代toComposePaint
,因為傳回的物件會納入原始android.graphics.Paint
(I22b4c) - 淘汰
SemanticsProperties.imeAction
,並替換為SemanticsActions.performImeAction
的新參數。(I4a587)。 - 新增以滑鼠選取的功能。觸控式選取模式會逐字展開,並依字元縮小。(Ic0c6c、b/180639271)
- 用於針對超出邊界偏移擲回
AssertionError
的Paragraph
方法,現在會像MultiParagraph
一樣擲回IllegalArgumentException
(I549d3、b/243338896)
1.5 版本
1.5.4 版本
2023 年 10 月 18 日
發布 androidx.compose.ui:ui-*:1.5.4
。1.5.4 版包含以下修訂項目。
1.5.3 版本
2023 年 10 月 4 日
發布 androidx.compose.ui:ui-*:1.5.3
。1.5.3 版包含以下修訂項目。
修正錯誤
- (b/301209788) 在聚焦及輸入韓文輸入時,
TextField
有時會錯誤套用先前的指令,導致字元遺失。
1.5.2 版本
2023 年 9 月 27 日
發布 androidx.compose.ui:ui-*:1.5.2
。1.5.2 版包含以下修訂項目。
修正錯誤
- 新增從背景執行緒存取無障礙功能捲動 API 時的當機問題解決方法。
- 修正新增至語意樹狀結構中未附加的節點。
1.5.1 版本
2023 年 9 月 6 日
發布 androidx.compose.ui:ui-*:1.5.1
。1.5.1 版包含以下修訂項目。
修正錯誤
- 修正文字欄位顯示,當
readOnly
為 true 時可供編輯。此外,也修正了在聚焦時readOnly
從 true 變更為 false 時,鍵盤無法顯示。(I34a19、b/246909589)
1.5.0 版本
2023 年 8 月 9 日
發布 androidx.compose.ui:ui-*:1.5.0
。1.5.0 版包含此連結所列的修訂項目。
1.5.0-rc01 版
2023 年 7 月 26 日
發布 androidx.compose.ui:ui-*:1.5.0-rc01
。1.5.0-rc01 版包含此連結所列的修訂項目。
修正錯誤
- 修正在
movableContentOf()
中使用SubcomposeLayout
時發生的當機問題。
1.5.0-beta03 版
2023 年 6 月 28 日
發布 androidx.compose.ui:ui-*:1.5.0-beta03
。1.5.0-beta03 版包含以下修訂項目。
修正錯誤
- 新增了 FocusTargetModifierNode 介面,可用於建立自訂 FocusTarget。(Ifb1d6)。
- 修正 Dialog 和 Popup 可組合函式的問題,這類可組合項可能導致子視窗在
usePlatformDefaultWidth=true
時無法正常調整大小。(I112ee)。
1.5.0-beta02 版
2023 年 6 月 7 日
發布 androidx.compose.ui:ui-*:1.5.0-beta02
。1.5.0-beta02 版包含以下修訂項目。
API 變更
- 新增了
asComposePaint
API,以便在 Compose 中使用android.graphics.Paint
例項
修正錯誤
- 新增了
asComposePaint
API 以取代toComposePaint
,因為傳回的物件會納入原始android.graphics.Paint
(I22b4c)
1.5.0-beta01 版
2023 年 5 月 24 日
發布 androidx.compose.ui:ui-*:1.5.0-beta01
。1.5.0-beta01 版包含此連結所列的修訂項目。
API 變更
- 移除了重組、顏色動畫和
AndroidComposeView
中的配置 (Ib2bfa) - 新增趣味實用的
CacheDrawModifierNode()
,允許委派 (Icf8f9) - 隆重推出可從
MeasureScope
存取的isLookingAhead
屬性,以便觀察查看結果並視情況影響主要傳遞。(Ibf4c3)。 - 新的語意屬性
traversalIndex
,這個浮點值可用於重新排序TalkBack
週遊中的節點 (值越小在前面)。(I9a81b、b/186443263) - 將語意屬性
isContainer
重新命名為isTraversalGroup
(I121f6) ColorProducer
現在使用operator fun invoke
,而不是produce
(I4a9a2)- 新增
Path
轉換 API,將平移/縮放/旋轉轉換套用至路徑物件。(I23434、b/233772232) ColorProducer
的方法稱為produce
。(I78bde)。- 將
toFrameworkColorSpace
重新命名為toAndroidColorSpace
(I4f547) - 將
ColorLambda
重新命名為ColorProducer
。(I73b1a)。 - 介紹可在 Android 和 Compose 色彩空間類型之間轉換的 API。(Ie7db4、b/279979665)
- 在
BasicText
中新增顏色參數,以便有效率地建立動畫或設定文字顏色。(Iffd88、b/246961787) TextRange.constrain
已重新命名為TextRange.coerceIn
。(I31be2)。- 已新增最佳化的
TextStyle.merge(...)
,其中包含完整參數清單。(Iad234、b/246961787) - 穩定顯示許多 Text API,包括
Brush
、DrawStyle
、TextMotion
、DrawScope.drawText
、Paragraph.paint(Brush)
、MultiParagraph.paint(Brush)
。(I2f740、b/261581564、b/261581931、b/261561245) PlatformTextStyle.includeFontPadding
已取消淘汰,我們最初的用意是移除欄位,但意見回饋顯示開發人員需要這個設定選項。因此,移除欄位中的淘汰 (I98e96、b/277703184)- 新增了公開的
TextRange.constrain
方法。(I97912)。 AnnotatedString
中的UrlAnnotation
現可透過無障礙服務 (例如TalkBack
) 開啟。(If4d82、b/253292081)- 已為文字欄位新增
InsertTextAtCursor
語意動作(I11ed5)。 LineHeightStyle.Alignment(topRatio)
建構函式已升級為穩定版 API。(I79c32、b/261565383)TextMeasurer
和相關 API 不再是實驗功能。(I74647、b/261581753)- 新增
PerformImeAction
語意動作,以在文字編輯器節點叫用輸入法編輯器動作。(Ic606f、b/269633506) PlatformTextInput
API 不再是 Android 的實驗性版本。(I668eb)。Enum.valueOf
的值參數名稱已變更 (Ia9b89)- 更多 enum valueOf 擲回的例外狀況 (I818fe)
- 推出了全新的低階
PlatformTextInputAdapter
API,可用於建構直接與平台 API 通訊的自訂文字輸入內容實作方式。(I58df4)。 - 在
DrawScope.drawText
、Paragraph.paint
和MultiParagraph.paint
方法中新增BlendMode
參數,以便在 Canvas 繪製文字時支援不同的混合演算法。(I57508)。 - 將
Font.MaximumAsyncTimeout
重新命名為Font.MaximumAsyncTimeoutMillis
。僅供重新命名。(I07af5)。 - 更新
@Preview
參考裝置的 DPI 值 (Id6151、b/254528382) - 在
BasicText
中新增brush
、alpha
參數,以便有效率地建立動畫或設定文字筆刷。 - 為 :ui:ui-unit (I6f18d、b/246961787) 定義無方塊的 lambda 類型
修正錯誤
- 移除指標速度追蹤中的多個配置 (I26bae)
- 減少版面配置和指標輸入管理中的配置 (I5333a)
- 改善向量記憶體用量和第一個影格轉譯 (I2f3c6)
- 使用 Canvas 繪製線條和點時移除配置 (I9f535)
- 新增
AndroidFont.fontVariationSettings
的文件 (I7d9e2)
外部貢獻
- 提升效能並減少 Vector API 中的配置 (I906cb)
1.5.0-alpha04 版
2023 年 5 月 10 日
發布 androidx.compose.ui:ui-*:1.5.0-alpha04
。1.5.0-alpha04 版包含以下修訂項目。
新功能
- 改善
Modifier.Node
項委派功能 新增了一項強化功能,以便從DelegatingNode
委派給其他Modifier.Node
執行個體。您可以使用delegate
和undelegate
API 執行這項操作。在這項異動之前,委派節點中的所有 API 都必須明確委派給委派節點。這項變更完成後,除非DelegatingNode
明確覆寫節點介面,否則系統會以隱含方式委派節點介面。(67352bc)。
API 變更
- 推出
NestedScrollModifierNode
,這是可委派的NestedScroll Modifier.Node
。(I69513)。 - 在
AndroidViewBinding
可組合項中新增onReset
和onRelease
參數,以鏡像AndroidView
可組合項,並透過ViewBinding
支援 View 重複使用。(I00b1e、b/276802519) - 更新了 Compose Path API,以支援倒轉作業,以支援常用路徑操縱的用途,並快速重複使用。(I7b797)。
- 已新增最佳化的
TextStyle.merge(...)
,其中包含完整參數清單。(Iad234、b/246961787) - 穩定顯示許多 Text API,包括
Brush
、DrawStyle
、TextMotion
、DrawScope.drawText
、Paragraph.paint(Brush)
、MultiParagraph.paint(Brush)
。(I2f740、b/261581564、b/261581931、b/261561245) PlatformTextStyle.includeFontPadding
已取消淘汰,我們最初的用意是移除欄位,但意見回饋顯示開發人員需要這個設定選項。因此,移除欄位中的淘汰 (I98e96、b/277703184)
修正錯誤
- 修正以下迴歸問題:並非透過
Dialog
可組合項建立的對話方塊內文字欄位未顯示鍵盤。(I82551、b/262140644)
1.5.0-alpha03 版
2023 年 4 月 19 日
發布 androidx.compose.ui:ui-*:1.5.0-alpha03
。1.5.0-alpha03 版包含以下修訂項目。
新功能
LookaheadScope
中SubcomposeLayout
的新預設行為:沒有條件式版位的SubcomposeLayouts
(例如TabRow
、Scaffold
、BoxWithConstraints
等) 現在可以與外觀和風格動畫完美搭配。
API 變更
- 新的預設
intermediateMeasurePolicy
可重複使用 Lookahead Pass 的評估政策,因此SubcomposeLayout
子類型無需條件式版位 (例如Scaffold
、TabRow
和BoxWithConstraints
) 就能搭配 Lookahead 使用。(Id84c8)。 - 為 Android 視窗建立的重組工具現在只會在收到
ON_STOP
通知時封鎖對withFrameNanos
的呼叫,而非所有組合。這表示與已停止的活動相關聯的視窗會繼續針對資料變更重組,但動畫或任何其他withFrameNanos
呼叫端都會遭到封鎖。(Id9e7f、b/240975572) - 將
motionEventSpy
變更為穩定版。(Ic5ec4、b/261560988) - 新增了公開的
TextRange.constrain
方法。(I97912)。 PlatformTextStyle.includeFontPadding
已不再淘汰,以鼓勵開發人員使用這個相容性 API 切換並測試設定includeFontPadding
false。(I98e96、b/277703184)
1.5.0-alpha02 版
2023 年 4 月 5 日
發布 androidx.compose.ui:ui-*:1.5.0-alpha02
。1.5.0-alpha02 版包含此連結所列的修訂項目。
API 變更
- 新增
SubcomposeLayout
API,可在看頭動畫期間,處理額外的中繼測量政策,以處理測量/版面配置邏輯。(I017d3)。 - PointerInput 現已設為延遲,並使用 Modifier.Node 提升效能 (瞭解小幅行為變更)。(15dab9)。
- 將實驗性 API 變更為透過重要事件穩定運作。(I9c7d8、b/261566839、b/261567368)
- 將
PointerInputChange
中的實驗性 API 變更為穩定版。(I1b543、b/261560988、b/261565762、b/261565749) - 新增對
SuspendingPointerInputModifierNode
例項化的方式,以處理較複雜的Modifier.Node
實作。(Ic4933)。 AnnotatedString
中的UrlAnnotation
現可透過無障礙服務 (例如TalkBack
) 開啟。(If4d82、b/253292081)- 新增 API,可在將硬體鍵傳送至螢幕鍵盤前攔截這些按鍵 (I4f4c6、b/186800395)
- 已為文字欄位新增
InsertTextAtCursor
語意動作(I11ed5)。 - 文字相關測試動作 (例如
performTextInput
) 現在會使用語意動作直接要求焦點,而不是點選欄位。(I6ed05)。
修正錯誤
- 文字測試動作現在必須啟用文字欄位。(Iab328)。
1.5.0-alpha01 版本
2023 年 3 月 22 日
發布 androidx.compose.ui:ui-*:1.5.0-alpha01
。1.5.0-alpha01 版包含此連結所列的修訂項目。
API 變更
- Modifier. MiddleLayout 現在不需要明確的 LookaheadScope。中繼 Layout 中的測量區塊採用 IntermediateMeasureScope 做為接收器,可提供便捷的 CoroutineScope、LookaheadScope 和 MeasureScope (Ibe2e5)。
- LookaheadLayout 已由 LookaheadScope 取代,不再是版面配置。如此一來,LookaheadScope 中的 Chid 內容即可由父項的 MeasurePolicy 直接控管。(Ibe2e5)。
- 新增
Modifier.Node#coroutineScope
,允許 Modifier.Nodes 啟動協同程式。(I76ef9)。 - 透過實作 CompositionLocalConsumerModifierNode 介面,允許 Modifier.Nodes 讀取 CompositionLocals(Ib44df)。
- 將 @已淘汰 類別套用至屬性。(I882d1)。
1.4 版
1.4.3 版本
2023 年 5 月 3 日
發布 androidx.compose.ui:ui-*:1.4.3
。1.4.3 版本包含這些修訂版本。
修正錯誤
- 修正
AndroidView
與特定修飾符搭配使用時,無法正確配置的問題(I4dc77、b/274797771) - 修正 2D 焦點搜尋中會影響
DropDown
選單的錯誤 (b/276811828) - 修正在自訂焦點的輸入/離開事件屬性中,只在第一次叫用 lambda 時執行進入/結束區塊的錯誤 (b/277234245)
- 修正焦點系統中導致在讀取
focusProperties
時當機的迴歸問題。(b/271324781、b/274897776)
1.4.2 版
2023 年 4 月 19 日
發布 androidx.compose.ui:ui-*:1.4.2
。1.4.2 版本包含這些修訂版本。
修正錯誤
- 已修正
AndroidView
無法正確重複使用其修飾符的問題,可能會導致非預期的行為和當機。(Ib67ee、b/275919849) - 修正迴歸問題:非
Dialog
可組合函式建立對話方塊中的文字欄位時,鍵盤無法顯示 (I82551、b/262140644)
1.4.1 版本
2023 年 4 月 5 日
發布 androidx.compose.ui:ui-*:1.4.1
。1.4.1 版本包含這些修訂版本。
修正錯誤
- 修正
ParentDataModifier
不影響AndroidView
的問題 (b/274797771)
1.4.0 版本
2023 年 3 月 22 日
發布 androidx.compose.ui:ui-*:1.4.0
。1.4.0 版包含此連結所列的修訂項目。
自 1.3.0 版以來的重要異動
- 新增的
PinnableContainer
API,可允許固定 Lazy 清單項目,如此一來,這些項目就不會在捲動到邊界外時遭到捨棄。舉例來說,Modifier.focusable()
會利用這項機制固定當前聚焦的項目 (Ib8881、b/259274257、b/195049010)。 - 使用新的實驗性
Modifier.Node
API 重新編寫焦點系統。(I7f4d7、b/247708726、b/255352203、b/253043481、b/247716483、b/254529934、b/251840112、b/251859987、b/257141589)。 - 在 Surfaces 上新增
IsContainer
語意屬性。這項屬性會在日後的變更中用到,屆時我們會根據 surfaces 等元素的語意含義來決定周遊順序 (I63379)。 - 已新增無障礙角色
DropdownList
。這可用於在聚焦android.widget.Spinner
時複製TalkBack
的行為。(I177e5、b/236159001)。 - 您現在可以使用
PlatformTextStyle(emojiSupportMatch)
,選擇性停用對單一段落的表情符號支援處理功能。(Ia7100、b/139326806)。 - Android Compose UI 測試會在執行畫面要進入閒置狀態 (例如透過
waitForIdle
) 時,為每個畫面執行版面配置傳遞作業。這可能會影響到宣告版面配置動畫的個別畫面測試 (I8ea08、b/222093277)。 - 新增實驗性
TextMotion
至TextStyle
,將文字定義為Static(default)
或動畫。如要透過動畫縮放、變換或旋轉文字,請使用TextMotion.Animated
(I24dd7)。
1.4.0-rc01 版本
2023 年 3 月 8 日
發布 androidx.compose.ui:ui-*:1.4.0-rc01
。1.4.0-rc01 版包含此連結所列的修訂項目。
API 變更
- 新增
AndroidView
可組合函式的超載,接受onReset
參數。如此一來,當系統捨棄組合中的節點,並以相容的方式重複使用時,即可重複使用 View 執行個體。這對LazyRows
和LazyColumns
的檢視區塊特別實用。(I3f10d、b/230099236) - 推出了全新的低階
PlatformTextInputAdapter
API,可用於建構直接與平台 API 通訊的自訂文字輸入內容實作方式。(I58df4)。
修正錯誤
BasicTextField
的SetText
語意動作現在會使用與輸入法編輯器更新和測試函式相同的程式碼路徑 (例如performTextReplacement
),更新文字緩衝區。- 文字測試函式
performTextClearance
、performTextReplacement
和performTextSelection
現在使用SemanticsActions
。(I0807d、b/269633168、b/269624358)
1.4.0-beta02 版本
2023 年 2 月 22 日
發布 androidx.compose.ui:ui-*:1.4.0-beta02
。1.4.0-beta02 版包含以下修訂項目。
API 變更
- 已移除
modifierElementOf()
API。請改為直接從ModifierNodeElement
延長。(I2256b)。 - 新增
Modifier.Node.onReset()
回呼,可讓您重設部分本機狀態,以正確處理重複使用Layout
的情況 (例如LazyColumn
的項目)。已修正FocusTargetModifierNode
,以便正確重設聚焦狀態。(I65495、b/265201972) - 在
DrawScope.drawText
、Paragraph.paint
和MultiParagraph.paint
方法中新增BlendMode
參數,以便在 Canvas 繪製文字時支援不同的混合演算法。(I57508)。
修正錯誤
- 改善無障礙焦點順序演算法,例如頂端/底部列通常分別位於第一/最後一列 (74e9c5)
1.4.0-beta01 版本
2023 年 2 月 8 日
發布 androidx.compose.ui:ui-*:1.4.0-beta01
。1.4.0-beta01 版包含此連結所列的修訂項目。
API 變更
PinnableContainer.PinnedHandle.unpin()
已重新命名為release()
(I4667a)。- 已新增
waitUntilNodeCount
、waitUntilAtLeastOneExists
、waitUntilExactlyOneExists
和waitUntilDoesNotExist
做為ComposeTestRule
的實驗性 API,擴充waitUntil
API 以接受任何比對器和節點數量。詳細說明請參閱ComposeTestRule
(Ifa1b9、b/226934294)。 - 將
Font.MaximumAsyncTimeout
重新命名為Font.MaximumAsyncTimeoutMillis
(I07af5)。 - 已移除
GoogleFont.Provider.AllFontsListUri
,並改為在 ktdoc 中連結此連結 (I16f29)。
修正錯誤
- 新增
AndroidFont.fontVariationSettings
的文件 (I7d9e2)
1.4.0-alpha05 版
2023 年 1 月 25 日
發布了 androidx.compose.ui:ui-*:1.4.0-alpha05
。查看 1.4.0-alpha05 版的修訂項目。
API 變更
- 推出了適用於
runComposeUiTest
函式和create*ComposeRule
函式的全新實驗性超載,該函式接受CoroutineContext
參數。結構定義將用於測試組合及當中的LaunchedEffect
和rememberCoroutineScope()
呼叫。(I10614、b/265177763) - 新增 API 以追蹤一維速率 (If5a82)
FocusRequester
現已標示為@Stable
。(I580ee)- 從採用
usePlatformDefaultWidth
參數的DialogProperties
建構函式中移除實驗性註解。(Ic4048) - 在路徑一定距離的計算位置和切線上新增了函式 - 使用
PathMeasure.getPosition()
和PathMeasure.getTangent()
(I3b47c) - 移除了
PlatformParagraphStyle
上意外公開的公開 setter。(I07f47) - 針對內嵌/已淘汰並隱藏的函式提供更多類型/是否可為空值選項 (I24f91)
- 新增
AnnotatedString.hasStringAnnotations
以查詢沒有分配資源的註解。(I94dfe、b/246960758) - 新增了適用於
TextMeasurer.measure
函式的全新超載,這會將String
視為文字來採用。(I47b2d、b/242705342) - TextStyle 中的
LineBreak
和Hyphens
API 已升級為穩定版。(Ic1e1d)
外部貢獻
TextInputSession
和TextInputService
中的notifyFocusedRect
方法不會再次淘汰。(I23a04、b/262648050)
1.4.0-alpha04 版本
2023 年 1 月 11 日
發布了 androidx.compose.ui:ui-*:1.4.0-alpha04
。查看 1.4.0-alpha04 版的修訂項目。
新功能
- 新增的
PinnableContainer
API,可允許固定 Lazy 清單項目,如此一來,這些項目就不會在捲動到邊界外時遭到捨棄。舉例來說,Modifier.focusable()
會利用這項機制固定當前聚焦的項目 (Ib8881、b/259274257、b/195049010)。 - 使用新的實驗性
Modifier.Node
API 重新編寫焦點系統。(I7f4d7、b/247708726、b/255352203、b/253043481、b/247716483、b/254529934、b/251840112、b/251859987、b/257141589)。 - 在 Surfaces 上新增
IsContainer
語意屬性。這項屬性會在日後的變更中用到,屆時我們會根據 surfaces 等元素的語意含義來決定周遊順序 (I63379)。 - 新增的無障礙角色
DropdownList
,可用於在聚焦android.widget.Spinner
時複製TalkBack's
行為 (I177e5、b/236159001)。 - 您現在可以使用
PlatformTextStyle(emojiSupportMatch)
,選擇性停用對單一段落的表情符號支援處理功能。(Ia7100、b/139326806)。 - Android Compose UI 測試會在執行畫面要進入閒置狀態 (例如透過
waitForIdle
) 時,為每個畫面執行版面配置傳遞作業。這可能會影響到宣告版面配置動畫的個別畫面測試 (I8ea08、b/222093277)。 - 新增實驗性
TextMotion
至TextStyle
,將文字定義為Static(default)
或動畫。如要透過動畫縮放、變換或旋轉文字,請使用TextMotion.Animated
(I24dd7)。
API 變更
- 將
drawText
中的maxSize: IntSize
引數替換為size: Size
,以便內嵌於其他DrawScope
函式。size
預設為Size.Unspecified
,這應該不會變更先前的預設行為 (Icd27d)。 - 移除了已淘汰的實驗性字型建構函式。(I8a724、b/261435386)。
- UI 工具資料類別
Group
現在包含isInline
欄位,這表示群組是否用於目標為內嵌可組合函式的呼叫。如果isInline
是true
,呼叫目標即為內嵌可組合函式。不過,如果呼叫目標為來自模組的內嵌可組合函式,而且這些模組的編譯方式採用不會產生內嵌函式資訊的 Compose Compiler 外掛程式版本,那麼這個值可能會是 false (Idb846)。 - 將先前推出的一些實驗性 API 升級為穩定版
- Rotary Scroll Event API 現在是穩定版 (I42ad3、b/261561229)
FontVariation
API 現在是穩定版 (I8779f、b/241016309)- 所有
Font()
建構函式現在都是穩定版 API (I5948b、b/261435386) DeviceFontFamilyName
現在是穩定版 (I8b640、b/261435386)- 包含
variationSettings
的AndroidFont
建構函式現在是穩定版 API,可用於建立新類型的字型描述元。(I5adcc、b/261565807)。 createFontFamilyResolver
API 現在是穩定版,可用於在非同步載入字型時找出未偵測到的例外狀況 (Ibb481、b/261435386)。Font.loadingStrategy
API 現在是穩定版 (I5937c、b/261435386)。GoogleFont
API 現在是穩定版 (Ic90b0、b/261435386)。TextUnit(float, TextUnitType)
現在是穩定版 API (I90c84、b/261561612)。pluralStringResource
現在是穩定版 API (I09849、b/261439703)。
1.4.0-alpha03 版
2022 年 12 月 7 日
發布 androidx.compose.ui:ui-*:1.4.0-alpha03
。1.4.0-alpha03 版包含此連結所列的修訂項目。
API 變更
- 將
ExperimentalComposeUiApi
從PointerIcon
中移除 (I23af8) - 導入頁面無障礙動作:
PageUp
、PageDown
、PageLeft
、PageRight
。請注意,這些內容僅適用於 API 29。(Ida4ab) - 將
rememberNestedScrollConnection
參數檢視畫面從根層級檢視畫面變更為主機檢視畫面。(Ia5200) - 新增 Modifier API 來查詢祖系捲動資訊 (I2ba9d、b/203141462)。
- 如果手勢可能產生捲動事件,用在
Clickable
中可正確延遲按下的互動動作。 - 修正了在
Scrollable ViewGroup
中使用Clickables
時無法正確延遲漣漪效果的問題。 - 更新導覽匣和試算表,以便在手勢可能成為捲動事件時,使用可正確延遲按下的動作。
- 已將
CompositingStrategy.Always
重新命名為Offscreen
,表示graphicsLayer
一律會轉譯成中繼緩衝區 (I47dc1) - 含有多個內容版位的版面配置超載現已穩定 (I10566、b/248294649)
- 新增了實驗性的新 API
PerfettoTrace.record {}
和PerfettoTraceRule
,以擷取 Perfetto 追蹤記錄 (也稱為系統追蹤) 作為測試的一部分,以檢查測試的行為和效能。(I3ba16) - 在使用 Compose 規則的 UI 測試中,在所有影格回呼都執行完畢後,才會分派在
withFrameNanos
回呼期間繼續作業。這與 Compose 正常執行時的行為相符。不過,仰賴舊行為的測試可能會失敗。這只會影響直接呼叫withFrameNanos
或withFrameMillis
的程式碼,並將回呼外的邏輯傳遞至可能需要在回呼內移動的函式。如需範例,請參閱這份 CL 中的動畫測試變更。 - 將選用的
onPerformTraversals: (Long) -> Unit
參數新增至TestMonotonicFrameClock
建構函式和工廠函式,以便在withFrameNanos
回呼之後和重新啟用呼叫端協同程式之前執行程式碼。(Idb413、b/254115946、b/222093277、b/255802670)。 - 將 EmojiCompat 新增至 Compose (Ibf6f9、b/139326806)
- 在
@Preview
中新增桌布參數,以支援動態色彩 (I9f512)
修正錯誤
- 現在,
Recomposer
套用變更之後,系統即會傳送快照套用通知 (Iad6c0、b/222093277)。 - 導入
captureToImage
中的變更,以擷取多視窗螢幕截圖。這對於使用 compose PopUp 的螢幕截圖測試而言非常實用。(I169c5)
依附元件更新
- Compose UI 和 Compose Material 現已依附於 Lifecycle 2.5.1。(I05ab0、b/258038814)
1.4.0-alpha02 版
2022 年 11 月 9 日
發布 androidx.compose.ui:ui-*:1.4.0-alpha02
。查看 1.4.0-alpha02 版的修訂項目。
API 變更
- 更新了
GraphicsLayerScope
以揭露graphicsLayer
目前的尺寸。這有助於計算graphicsLayer
轉換做為 Composable 尺寸的函式。(If8c43、b/181387080) - 推出
CompositingStrategy
,以便判斷何時應使用螢幕外合成層來轉譯graphicsLayer
內容。Auto 會維持於套用 Alpha 或RenderEffect/Overscroll
時在內部使用圖層的預設行為。Always 一律會引入螢幕外緩衝區,其中ModulateAlpha
會避免使用螢幕外緩衝區,並改為逐一調整graphicsLayer
內記錄的繪圖指示。使用ModulateAlpha
時,系統仍會利用RenderEffect/Overscroll
用到的螢幕外緩衝區 (I25e82、b/256382834) - 在
Modifier.Node
中新增invalidateSubtree()
,以便使版面配置和繪圖的整個階層失效。(I4bd90) - 將
rememberNestedScrollInteropConnection
升級為穩定版。推出將根層級檢視區塊傳送至rememberNestedScrollInteropConnection
的功能。如此一來,自訂檢視區塊就能對捲動限制條件做出反應,尤其是在ModalBottomSheetDialog
等非標準檢視畫面中 (I9e107) - 新增了
ObserverNode
介面,可用於Modifier.Node
實作,以便在先前已讀取的值發生變更時收到通知 (I5728b、b/247716483) - 在
Paint
中新增可接受原生android.graphics.Paint
的建構函式。另外也新增了擴充功能函式toComposePaint()
,可將現有的原生 Paint 物件轉換為 Compose Paint。(Ica91b) - 新增適用於 Android 的
FontFamily.Resolver.resolveAsTypeface
。(I8950b) - 新增
ToolingState
,讓工具能變更 Composable 的內部狀態 (Ie6614) - 重構工具,以便完善支援新增的動畫 (I8677b)
- 將
minLines
參數加到 Material 和 Material 3 的 Text、TextField
和OutlinedTextField
中,藉此以行數為單位來設定元件的最小高度 (I4af1d)
1.4.0-alpha01 版
2022 年 10 月 24 日
發布 androidx.compose.ui:ui-*:1.4.0-alpha01
。查看 1.4.0-alpha01 版的修訂項目。
API 變更
- 新增了適用於手勢偵測工具的新方法:
awaitEachGesture()
。運作方式與forEachGesture()
類似,但手勢的迴圈完全在AwaitPointerEventScope
內運作,因此事件不會在疊代之間遺失。 - 由於
forEachGesture()
會導致事件在手勢間遺失,因此已將其淘汰並改用awaitEachGesture()
(Iffc3f、b/251260206)。 - 淘汰 AndroidX 中無障礙功能物件的回收作業。我們發現即使是最舊的受支援版本,這項變更的成效差異都是微不足道。(I0a961)
- 已將
DrawStyle
新增為TextStyle
和SpanStyle
的實驗性屬性,以便啟用含外框文字的繪製功能。(If24b8、b/155421273) AnnotatedString.Builder
現可實作kotlin.text.Appendable
。(I1a061、b/231030444)AnnotatedString.Builder
現在提供append(AnnotatedString, start: Int, end: Int)
方法,用於附加AnnotatedString
的子字串和相交樣式。- 在
Paragraph
和MultiParagraph
繪製函式中加入DrawStyle
參數,可用於繪製含外框的文字。(Ic8102、b/155421273)
外部貢獻
- 感謝
vighnesh
將 TV 裝置新增至預先發布版 (Ie15cd)
1.3 版
1.3.3 版
2023 年 1 月 11 日
發布 androidx.compose.ui:ui-*:1.3.3
。查看 1.3.3 版的修訂項。
修正錯誤
- 修正問題:Activity 正在儲存 Compose View 狀態時,Android 9 有時會停止運作 (I0b755、b/260322832)。
1.3.2 版
2022 年 12 月 7 日
發布了 androidx.compose.ui:ui-*:1.3.2
。1.3.2 版包含此連結所列的修訂項目。
修正錯誤
- 已更新為使用 Profobuf 3.21.8,以避免
protobuf-javalite:3.19.4
中的安全性警示 (CVE-2022-3171) (b/255545055)
1.3.1 版
2022 年 11 月 9 日
發布 androidx.compose.ui:ui-*:1.3.1
。1.3.1 版包含此連結所列的修訂項目。
1.3.0 版
2022 年 10 月 24 日
發布 androidx.compose.ui:ui-*:1.3.0
。1.3.0 版包含此連結所列的修訂項目。
自 1.2.0 版以來的重要變更
- 全新實驗性 API 套件
LookaheadLayout
(啟用先前無法使用的動畫行為) - 全新實驗性 API 套件
Modifier.Node
(取代Modifier.composed
的高效能 API 套件) - 改善視窗插邊支援機制。
- 提供適用於 LazyLists 中 D-Pad 和硬體鍵盤的焦點支援。
- 對話方塊和彈出式視窗的支援高度上限已降到 8 dp (針對部分自訂設計系統的行為破壞性變更 - 原因請參閱 Beta01 版本資訊)
- 多個小幅非破壞性的 API 改善項目
- 多項錯誤修正和效能改善項目
1.3.0-rc01 版
2022 年 10 月 5 日
發布 androidx.compose.ui:ui-*:1.3.0-rc01
。查看 1.3.0-rc01 版的修訂項目。
API 變更
- 新增了實驗性 API Hyphens,以支援 Text 中的自動連字號 (Iaa869)
修正錯誤
- 根據預設,
DeviceFontFamilyName
字型不會指定wght
和ital
變化版本設定,而是使用已載入Typeface
的平台設定 (Ia7a6d、b/246989332)。 - 修正了
LazyColumn
記憶體流失問題 - 重複使用修飾符時,並未使用預設值呼叫onModifierLocalsUpdated
(b/230168389)
1.3.0-beta03 版
2022 年 9 月 21 日
發布 androidx.compose.ui:ui-*:1.3.0-beta03
。查看 1.3.0-beta03 版的修訂項。
API 變更
- 新增自訂文字斷行選項 (I86907)。
- 已利用
constraints: Constraints
變更在TextMeasurer.measure
方法中的size:IntSize
引數來處理最小寬度限制 (I37530、b/242707525)
修正錯誤
- AndroidX Activity 的
BackHandler
API 現在可在Dialog
可組合項中運作。(I35342)
1.3.0-beta02 版
2022 年 9 月 7 日
發布 androidx.compose.ui:ui-*:1.3.0-beta02
。查看 1.3.0-beta02 版的修訂項目。
API 變更
- 對 Layout 新增實驗性的超載,可接受多個可組合內容 lambda,可用來威脅將測量內容放至不同的 lambda 內容中 (Ic1b4e)
實驗性 Focus API 的變更:
FocusDirection.In
和FocusDirection.Out
已淘汰,並由FocusDirection.Enter
和FocusDirection.Exit
取代。(Ia4262、b/183746982)- 新增了兩個新的焦點屬性 (進入和結束事件),用來指定
FocusManager.moveFocus(Enter)
和FocusManager.moveFocus(Exit)
的自訂行為。(I5f3f9、b/183746982) - 您現在可以使用
FocusRequester.Cancel
取消焦點移動。FocusRequester.Cancel
可用於以下任何一種焦點屬性:向上、向下、左側、右側、下一個、上一個、開始、結束、進入和結束。(Ib300f)
1.3.0-beta01 版
2022 年 8 月 24 日
發布了 androidx.compose.ui:ui-*:1.3.0-beta01
。查看 1.3.0-beta01 版的修訂項目。
修飾符節點重構
處理 Modifier/Modifier.Element
執行個體及協調其在 LayoutNodes
上行為的層已大幅重構。但由於此為重構,不會影響 Compose 中許多修飾符的公用 API,而且可視為僅實作的變更。儘管如此,基於各種原因,這仍是一項重要的變更。(Ie4313)
變更摘要
新增的實驗性 Modifier.Node
API 提供抽象層,允許在執行個體上維護狀態,該執行個體將隨版面配置節點的生命週期一起保留,且將按版面配置節點和產生其的對應 Modifier.Element
的使用情況進行分配。
普遍來說,這個抽象層提供了另一種機制,不必依賴 Modifier.composed
API 的機制即可產生有狀態的修飾符。
風險
此變更與先前版本的二進位程式碼高度相容,目的是盡可能在合理範圍內確保可觀測行為的回溯相容性。即便如此,有幾個子系統並未經過重新建構,因此「可能」會一些有不在測試範圍內的行為變化,目前尚未被發現及修正。
請謹慎升級至這個版本。如果您認為升級時發生了問題,請與我們聯絡。
實驗性 API
我們新增了各種實驗性 API,全都與「修飾符節點」的新概念有關。修飾符節點的建立係依據
fun modifierElementOf(…): Modifier
abstract class ModifierNodeElement
abstract class Modifier.Node
abstract class DelegatingNode
interface LayoutModifierNode
interface DrawModifierNode
interface SemanticsNode
interface PointerInputNode
interface ModifierLocalNode
interface ParentDataModifierNode
interface LayoutAwareModifierNode
interface GlobalPositionAwareModifierNode
interface IntermediateLayoutModifierNode
行為破壞性變更
對話方塊和彈出式視窗支援的高度上限已降至 8dp。
Compose 對話方塊和彈出式視窗支援的高度上限已從 30dp 降至 8dp。這項變更會影響 Material 及 UI 自訂對話方塊和彈出式視窗。這項變更是為了減少 Android S 以下版本的無障礙服務錯誤,並確保這些視窗中的無障礙服務能與對話方塊或彈出式視窗的內容互動。
只有在您建立自訂對話方塊或彈出式視窗實作項目、且高度設定為 8 dp 以上時,才會受到這項變更的影響。請考慮降低對話方塊或彈出式視窗的高度。如果您需要選擇不採用這項新行為,可考慮以所需高度設定,自行建立對話方塊或彈出式視窗。不建議這麼做,因為無障礙功能可能會受到不當的影響,而且必須由開發人員確保對話方塊的底部或彈出式視窗能進行互動,並且可供無障礙服務讀取。
API 變更
- 修正了
painterResource
無法更新設定變更的問題 (I58e73、b/228862715) rememberTextMeasurer
不再使用FontFamily.Resolver
、Density
或LayoutDirection
參數。請使用TextMeasurer
建構函式為這些參數提供自訂值。(Ia1da3)- 新增了
DialogProperties.decorFitsSystemWindows
屬性,以允許對話方塊支援WindowInsets
。(I57742、b/229378542) - 將字型建構函式移回原本的 kotlin 檔案,以保持二進位程式碼相容性。與上次的穩定版本相比沒有任何變更。(Ieb2f3)
- 從多個等號定義中移除不必要的運算子 - 不會產生任何作用。(I6c309)
FontVariation.Setting
為密封介面,用於允許日後限制 API 的取值範圍。(I11021、b/143703328)- 新增
CompositionGroup.findParameters
至SlotTree.kt
。這可讓工具擷取CompositionGroup
的參數,而不必剖析整個運算單元資料表。(I124fe)
1.3.0-alpha03 版
2022 年 8 月 10 日
發布 androidx.compose.ui:ui-*:1.3.0-alpha03
。1.3.0-alpha03 版包含此連結所列的修訂項目。
API 變更
LayoutCoordinates.findRootCoordinates()
現已公開 (I7fa37、b/204723384)- 新增了實驗性 API,以取得
PlacementScope
中的LayoutCoordinates
。這可讓開發人員得知目前版面配置的位置,將其子項放在相對的位置。(I5482b、b/238632578) - 新增了
LayoutCoordinates.transformFrom
,以取得兩個LayoutCoordinates
之間的 Matrix 轉換資料。(Ic5ab1、b/238632578) - 淘汰了
SemanticsModifier.id
,並將語意 ID 移至LayoutInfo.semanticsId
。(Iac808、b/203559524) - 資源字型現在支援字型變化版設定 (API 26 以上版本)。(I900dd、b/143703328)
DeviceFontFamilyNameFont
中的可變字型支援 (Ic1279、b/143703328)- 字型建構函式現在接受
FontVariation.Setting
清單,以便在 O+ 裝置上設定可變字型。(I11a9d、b/143703328) - 新增
FontVariation
API 以定義及使用可變字型。(I3c40c、b/143703328) LineHeightStyle.Alignment
建構函式現已公開 (實驗性質) (I4bbbe、b/235876330)- Android 和電腦版應用程式現在都可以實際運用並定義段落。(Id387e、b/239962983)
- 介面 Paragraph 現已改為密封的介面 Paragarph。沒有任何用途需要將段落設為子類別,而如果這項變更對您造成影響,建議您與我們聯絡。(If5247、b/239962983)
- 從
PlatformTextStyle
和LineHeightStyle
中移除實驗性註解。(I64bef) - 淘汰
TextInputService.show|hideSoftwareKeyboard
。請在應用程式程式碼中改用SoftwareKeyboardController
,並在輸入法編輯器管理程式碼中使用TextInputSession
。(I14e4c、b/183448615) - 為現有的動畫類型新增 API (I26179)
修正錯誤
- 將
@RequiresPermission
新增至需要為 SDK 33 以上版本授予POST_NOTIFICATIONS
權限的 API (Ie542e、b/238790278)
1.3.0-alpha02 版
2022 年 7 月 27 日
發布 androidx.compose.ui:ui-*:1.3.0-alpha02
。查看 1.3.0-alpha02 版的修訂項。
API 變更
- 新增了
PointerInputChange#pressure
屬性以擷取壓力。(I45a5e、b/205164819) - 新增了
rememberTextMeasurer
,方便您在組合中建立及記錄TextMeasurer
執行個體。(I8d66e) Rect
、RoundRect
和MutableRect
現在支援使用 Kotlinin
語法呼叫contains
函式。(Ie42b0、b/238642990)。- 從
KeyInjectionScope
中移除不需要的函式,因為您可透過更簡單的 API 元件輕鬆實作這些函式。已移除的函式包括pressKeys
、keysDown
和keysUp
。(I81d77) - 重構
KeyInjectionScope
中的常數和參數名稱以加上後置字串「Millis」,其中上述常數和參數的單位為毫秒。(Iabef5) - 在
EditCommand
中新增了toStringForLog()
方法,以協助排解文字編輯問題。(I53354、b/228862731) - 在
DrawScope
上新增了drawText
擴充功能函式,這樣就能對在DrawScope
(例如Canvas
和drawBehind
) 上操作的可組合項和修飾符上繪製多樣式的文字。(I16a62、b/190787898) - 推出名為
TextMeasurer
的全新實驗性 API,可以實現任意文字版面配置運算,與BasicText
一樣,而且與 Compose 執行階段無關。(I17101) - 在
SlotTree.kt
中新增mapTree
。這可讓各項工具檢查SlotTree
,但不需要像 asTree 一樣先在記憶體中進行複製。對於版面配置檢查器來說,效能可提升約 10 倍。(I5e113) - 將 Compose 預覽變更為以二進位輸出檔案儲存,方便開發人員編寫及重複使用程式庫中的
MultiPreview
註解。(I85699、b/233511976)
修正錯誤
- 將
InputEventChange
事件加入至Velocity
追蹤器時,我們現在會考慮使用差異值而非位置,因此即使目標元素移動,也能確保所有案例的速度計算正確 (Icea9d、b/216582726、b/223440806、b/227709803) - 修正在顯示註解時
AnnotatedString.toUpperCase
造成的 NPE。(I0aca2、b/210899140)
1.3.0-alpha01 版
2022 年 6 月 29 日
發布 androidx.compose.ui:ui-*:1.3.0-alpha01
。查看 1.3.0-alpha01 版的修訂項目。
API 變更
- 新增
LookaheadLayout
,支援在實際測量/版面配置之前使用 Lookahead 傳遞。如此一來,就可以在版面配置變更時預先計算,讓 Lookahead 後測量/版面配置使用預先計算的大小/位置,以動畫方式呈現目標的大小和位置。目前尚不支援SubcomposeLayouts
,但會在即將推出的版本中推出。(I477f5) - 新增選用的 Alpha 參數至
TextStyle
和SpanStyle
的 Brush 變種版本,以修改整個Text
的不透明度。(Ic2fac、b/234117635) - 推出
UrlAnnotation
註解類型與相關的方法,以支援AnnotatedString
中的TalkBack
連結支援。(I1c754、b/231495122) - 將公用程式功能移至執行階段 (I4f729)
修正錯誤
TextLayoutResult.getLineForOffset
不會擲回。(Idc5d6、b/235876324)
外部貢獻
- 已加入新的 API
WindowInfo.keyboardModifiers
,用來在可組合函式內或透過 snapshotFlow 觀察其狀態 (Icdb8a)
1.2 版
1.2.1 版本
2022 年 8 月 10 日
發布 androidx.compose.ui:ui-*:1.2.1
。查看 1.2.1 版的修訂項目。
修正錯誤
- 修正了檢查器中的空值指標 (b/237987764)
- 修正了在檢查器中記錄期間發生的類別層級轉換例外狀況 (b/235526153)
1.2.0 版
2022 年 7 月 27 日
發布 androidx.compose.ui:ui-*:1.2.0
。1.2.0 版包含此連結所列的修訂項目。
自 1.1.0 版以來的重要變更
改善焦點周遊功能:
- 使用新的
BeyondBoundsLayout
核心 API 時,Lazy 清單的焦點導向捲動功能現可正常運作 - 在
FocusOrder
和FocusProperties
中新增自訂行為 API - 改善使用實體鍵盤或電視遙控器時的行為表現
- 使用新的
適用於以下項目的新 API:
- 視窗插邊
- 手勢驅動、無限和版面配置動畫適用的核心基本功能
GraphicsLayer
功能,包括RenderEffect
多項錯誤修正和效能改善項目
1.2.0-rc03 版
2022 年 6 月 29 日
發布 androidx.compose.ui:ui-*:1.2.0-rc03
。查看 1.2.0-rc03 版的修訂項目。
- 自 1.2.0-rc02 以來沒有變更。
1.2.0-rc02 版
2022 年 6 月 22 日
發布 androidx.compose.ui:ui-*:1.2.0-rc02
。查看 1.2.0-rc02 版的修訂項目。
1.2.0-rc01 版
2022 年 6 月 15 日
發布 androidx.compose.ui:ui-*:1.2.0-rc01
。查看 1.2.0-rc01 版的修訂項目。
API 變更
- Compose 程式庫中的介面現已使用 jdk8 預設介面方法建立 (I5bcf1)
- 已加入高階函式至
KeyInjectionScope
以供在按住其他鍵時按下插入鍵,或在切換開啟時使用。這些函式包括withKeysDown
、withKeysToggled
等。另外也加入了可檢查特定中繼鍵是否無法使用的屬性,舉例來說,isCtrlDown
可檢查 Ctrl 鍵是否無法使用。如需各函式的文件,請參閱KeyInjectionScope
。(I9f6cd、b/229831515) - 我們推出了實驗性
OverscrollEffect
,可以支援自訂過度捲動功能,以及接受Modifier.scrollable
的超載。 - 實驗性
LocalOverScrollConfiguration
已從foundation.gesture
移至基礎套件,並重新命名為「LocalOverscrollConfiguration
」(If19fb、b/204650733) - 將
runComposeUiTestWithoutActivity {}
重新命名為runEmptyComposeUiTest {}
,使其與createEmptyComposeRule()
一致 (I6fed7)
1.2.0-beta03 版
2022 年 6 月 1 日
發布 androidx.compose.ui:ui-*:1.2.0-beta03
。查看 1.2.0-beta03 版的修訂項目。
API 變更
- 將
pressKeyTimes
、isCapsLockOn
和友元新增至KeyInjectionScope
。此外,此 API 現可支援滑鼠和鍵盤的組合插入模式,例如按下滑鼠按鈕時伴隨按住的中繼鍵。(I4c8da、b/229831515) - 新增了插入鍵事件支援。使用
performKeyInput
傳送鍵事件,或是在performMultiModalInput
的多重模組輸入手勢中透過MultiModalInjectionScope
的key
屬性傳送這些事件。如需 API 的說明文件,請參閱KeyInjectionScope
。(Ic5000、b/229831515) - 新增
GoogleFont.Provider.AllFontsListUri
,可用於擷取 Android 支援的 Google Fonts 標準網際網路來源。 - 改善 GoogleFonts 在撰寫時無法載入的錯誤訊息。(I0416c)
修正錯誤
- 將
InputEventChange
事件加入至速率追蹤器時,我們會考慮使用差異值而非位置,因此即使目標元素已移動,系統仍會確保所有案例的計算速度正確 (I51ec3、b/216582726、b/223440806、b/227709803) - 現在只要從快速設定方塊中切換
Show Layout Bounds
設定,系統就會立即為可組合項套用設定,不必離開再重新進入活動。(I843d5、b/225937688) - 無障礙功能字串查詢不會觸發字型載入。之前如果
FontFamily.Resolver
遭到覆寫,系統就會嘗試載入StyleSpans
的字型,並且造成當機。(I4609d) - 當游標移到文字欄位結尾時,按下向前刪除鍵時不會再當機。
- 現在
DeleteSurroundingTextCommand
和DeleteSurroundingTextInCodePointsCommand
的建構函式引數不得為負數。(Ica8e6、b/199919707)
1.2.0-beta02 版
2022 年 5 月 18 日
發布 androidx.compose.ui:ui-*:1.2.0-beta02
。1.2.0-beta02 版包含此連結所列的修訂項目。
API 變更
- 在其他預覽類型中提供重複使用功能 (I19f39)
修正錯誤
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
已重新命名為DisposeOnDetachedFromWindowOrReleasedFromPool
,以貼切反映棄置發生的情況,而不是棄置未發生的情況。(If15ca)
1.2.0-beta01 版
2022 年 5 月 11 日
發布 androidx.compose.ui:ui-*:1.2.0-beta01
。查看 1.2.0-beta01 版的修訂項目。
新功能
- 這是 1.2 版的第一個 Beta 版!
API 變更
- 新增了實驗性的
BeyondBoundsInterval
,可供LazyList
的自訂實作用於版面配置範圍超出可見邊界的情況。(Ifabfb、b/184670295) Modifier.composed
的索引鍵版現在是穩定版本 API。(Ie65e4、b/229988420)- 簡化了
rememberNestedScrollConnection
API,以便使用組合本機值取得目前檢視區塊資訊。(I67ca7) @ComposableTargetMarker
註解和標示@ComposableTarget
的註解現在可藉由加上@file
前置字串,於檔案範圍使用。如果在檔案範圍使用目標註解,編譯器將假設檔案中的所有可組合函式都是用來指定相關 Applier。舉例來說,使用@file:UiComposable
即等同於宣告所有@Composable
函式皆指定 Compose UI Applier。如果函式需要指定其他套用器,必須針對想指定的套用器明確提供目標標記註解 (I40804)。推出了實驗性、獨立於平台的新測試 API:
interface ComposeUiTest
和fun runComposeUiTest(block: ComposeUiTest.() -> Unit)
,可用來執行 Compose UI 測試,而不需要使用TestRule
。如要在不使用ComposeTestRule
,將測試做為 lambda 傳遞至runComposeUiTest
,然後使用 接收方範圍ComposeUiTest
中的方法和成員 與ComposeContentTestRule
中的廣告相同新增 Android 專用的
interface AndroidComposeUiTest
和fun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit)
,以便提供基礎 Activity 的存取權限,與AndroidComposeTestRule
類似。如需更進一步的控管權限,您可以自行將class AndroidComposeUiTestEnvironment
執行個體化。電腦版實作是
class DesktopComposeUiTest
,但目前並未提供電腦版專用的執行函式。如要將測試從
ComposeTestRule
遷移至ComposeUiTest
,可以參考下方的 Android 範例。從:@RunWith(AndroidJUnit4::class) class MyTest { @get:Rule val rule = createComposeRule() @Test fun test() { rule.setContent { Text("Hello Compose!") } rule.onNodeWithText("Hello Compose!").assertExists() } }
到:
@RunWith(AndroidJUnit4::class) class MyTest { @Test @OptIn(ExperimentalTestApi::class) fun test() = runComposeUiTest { setContent { Text("Hello Compose!") } onNodeWithText("Hello Compose!").assertExists() } }
現階段,
ComposeContentTestRule
和ComposeTestRule
不會從ComposeUiTest
擴充,這表示在TestRule
介面上還無法呼叫ComposeUiTest
中的擴充功能函式。當ComposeUiTest
升級為穩定版 API 後,ComposeContentTestRule
和ComposeTestRule
就會變成可從ComposeUiTest
擴充。(Ib4e90)LineHeightBehavior
已重新命名為LineHeightStyle
。LineVerticalAlignment
已重新命名為LineHeightStyle.Alignment
。LineHeightTrim
已重新命名為LineHeightStyle.Trim
。移除了
LineHeightStyle
中的預設建構函式值 (I582bf、b/181155707)為
TextStyle
和SpanStyle
新增了Brush
,可讓您使用漸層顏色來繪製文字。(I53869、b/187839528)LineHeightBehavior
的trimFirstLineTop
、trimLastLineBottom
屬性已變更為單一列舉:LineHeightTrim
。LineHeightTrim
擁有由兩個布林值定義的 4 種狀態值:FirstLineTop
、LastLineBottom
、兩者和無 (Ifc6a5、b/181155707)為
TextStyle
和ParagraphStyle
新增了LineHeightBehavior
。LineHeightBehavior
可控制是否要在第一行頂端和最後一行底端套用行高,以及定義TextStyle(lineHeight)
所提供空間中的行對齊方式。舉例來說,您可以透過
LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)
,獲得與 CSS 定義行為類似的結果。trimFirstLineTop
、includeFontPadding
設定只有在trimLastLineBottom
設定為 false 時才能正確運作。(I97332、b/181155707)將
PlatformParagraphStyle.lerp
和PlatformSpanStyle.lerp
函式變更為頂層函式 (I9a268)
修正錯誤
PointerInputChange::copy
說明文件現在會正確指出其為淺層副本。(I182f5)- 高度受限且無法納入所有文字行 (Ie528c、b/168720622) 時支援刪節號
- 啟用了預設的
includeFontPadding
。您可以使用TextStyle.platformTextStyle
屬性關閉includeFontPadding
。我們即將變更預設行為。但在此之前,這種做法能以較好的方式整合行高改善項目 (aosp/2058653),並解決TextField
裁剪問題 (I01423、b/171394808)。
外部貢獻
- 現在垂直捲動時,就會在 Android 上反轉
MouseInjectionScope.scroll(delta = someDelta)
(如果 someDelta 為正值,則會向下捲動) (Ifb697、b/224992993)
1.2.0-alpha08 版
2022 年 4 月 20 日
發布 androidx.compose.ui:ui-*:1.2.0-alpha08
。查看 1.2.0-alpha08 版的修訂項。
API 變更
- 為
pluralStringResource
函式加上實驗性質標示以利演進,於日後支援更完善的國際化體驗。(If24e4) - Paragraph 和 MultiParagraph 現在接受 Constraints 參數。傳送
Constraints.maxHeight
目前為免人工管理,但未來會進行一些計算,例如根據高度進行刪節。(I6afee、b/168720622) SubcomposeSlotReusePolicy.getSlotsToRetain()
可接受自訂 MutableSet 類別,該類別不允許在其中新增項目。(Icd314)- PointerIcon 現在更名為
@Stable
介面 (I9dafe) - 已從
PointerInputChange
淘汰部分消耗功能 (減少或定位)。可使用consume()
徹底使用變更。可使用isConsumed
判斷其他使用者是否曾經使用過該變更。 PointerInputChange::copy()
現在會一律建立淺層複本。這表示只要使用一份複本,系統就會使用PointerInputChange
的複本。如要建立未繫結的PointerInputChange
,請改用建構函式。(Ie6be4、b/225669674)- 按照 Compose > View 方向,啟用 Compose 和 View 之間的巢狀捲動互通功能。這樣一來,Compose 父項即可從巢狀捲動檢視畫面接收巢狀捲動差異。(If7949、b/174348612)
- 新增
SemanticsProperty testTagsAsResourceId
,用於讓 Compose 符合針對 View 系統設計的 UIAutomator 測試。(I39c20) - 使用
FontFamily.SansSerif
時,可在 Android 的系統字型中顯示所有可用權重。這會在 API 21-28 內部使用備用廣告字型名稱,例如 Santa-serif-medium。由於之前 API 21-28 上僅支援 400 和 700 粗細,因此這是行為變更。(I380fe、b/156048036、b/226441992) - Paragraph 和 Multiparagraph 指示已將位置引數重新排列至選用引數之前。(Idafaa)
AndroidFont
現在會採用 typefaceLoader 做為建構函式參數。(I2c971)
1.2.0-alpha07 版
2022 年 4 月 6 日
發布 androidx.compose.ui:ui-*:1.2.0-alpha07
。查看 1.2.0-alpha07 版的修訂項。
API 變更
- 新增
Snapshot.withoutReadObservation { ... }
函式。使用者可以透過該函式執行傳遞的 lambda,而無需訂閱在這個區塊中讀取的狀態值變更。如果您想利用以快照為基礎的安全執行緒寫入/讀取作業來提高成效,同時希望能夠在不造成不必要的重組或重新測量的情況下讀取這個值,這項變更就非常實用。(I9f365、b/214054486) ComposeView
的consumeWindowInsets
擴充功能屬性可讓開發人員停用 AndroidWindowInsets
的消耗。這樣一來,階層中的個別ComposeViews
就能分別套用WindowInsets
,不會彼此干擾。(I0ef08、b/220943142)- 將
KeyboardType.Decimal
新增為Keyboard.Number
的替代項,專門用於在 IME 中加入小數分隔符。(Iec4c8、b/209835363) PointerEventType.Scroll
和PointerEvent.scrollDelta
現在是穩定的 API (I574c5、b/225669674)- 針對合作執行的 View 類別,啟用 View 和 Compose 之間的巢狀捲動互通功能。這表示 Compose 現在可以將捲動差異調派給 (合作執行的) View 父項。(I5d1ac、b/174348612)
- 更新了
FontFamily.Resolver
,以整合全系統中的粗體文字無障礙設定 (I6c1e7) Font(AssetManager, String, ...)
已淘汰,並取代為Font(String, AssetManager, ...)
。這是實驗性質的 API。(I1c7a4)- 新增字型描述元
Font(DeviceFontFamilyName)
,可選擇在備用字型鏈中查詢系統已安裝的字型。(I30468、b/219754572) - 為 TextStyle/ParagraphStyle 中的
includeFontPadding
新增臨時相容性設定。includeFontPadding
可以透過TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))
變更。這是臨時設定選項,用來啟用遷移,將來會移除 (If47be、b/171394808)。 - 新增
GoogleFont.Provider.isAvailableOnDevice
擴充功能以協助偵錯 (I64e31)。 - 新增
GoogleFont.Provider
建構函式,與@ArrayRes
搭配使用 (Ic5ee1、b/225984280) Compose GoogleFont
現改名為Font(GoogleFont)
,但 API 會以其他方式保持穩定。(I125f2)
修正錯誤
- 為 Material/Scaffold 新增了 Lint 檢查,確保使用的是內部邊框間距 (Ifb111)
1.2.0-alpha06 版
2022 年 3 月 23 日
發布 androidx.compose.ui:ui-*:1.2.0-alpha06
。查看 1.2.0-alpha06 版的修訂項目。
API 變更
- 新增
RequestFocus
語意動作,用於要求聚焦於可聚焦的目標 (I17b71)。 - 更新了向量可繪項目剖析,以支援自動鏡像,只要目前的版面配置方向為 RTL 就能翻轉
VectorPainter
的內容 (I79cd9、b/185760237)。 將陰影/環境色彩更新為
Modifier.graphicsLayer
的結尾參數,確保 API 相容性 (I3f864、b/160665122)針對
GraphicsLayerScope
中的陰影/環境色彩新增預設實作,確保進行非破壞性 API 變更在 RSB 事件中新增了事件時間 (Ief8ae)
FocusOrder
現已合併至FocusProperties
,focusProperties()
現在具備focusOrder()
的所有功能。FocusOrder
和focusOrder()
已淘汰。接受focusRequester
的focusOrder()
應替換為focusRequester()
修飾符,並與focusProperties()
搭配使用。如此一來,修飾符就能更妥善區隔問題 (I601b7)。現在,如果同時升級
RecyclerView
和Compose
,可為包含 Compose 檢視區塊做為子項的 RecyclerView 大幅改善捲動效能。新增
ViewCompositionStrategy.Default
做為擷取內建預設策略的方法新增
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
,這是新的預設策略,可正確處理 RecyclerView 等集區容器。(If7282)新增了使用 @Preview 為註解類別加上註解的支援機制,做為新增 Multipreview 功能的第一步。這類註解可加註於可組合方法或其他註解類別,這樣這些方法或類別就能視為間接加上了指定的 @Preview 註解。(I12eff)
在 @Preview 裝置清單中新增參照裝置 (I071c9)
修正錯誤
- 更新了向量圖形 API,以便使用適當的可組合註解 @VectorComposable,而非 @UiComposable (I942bc)
- 從
AnnotatedString.Builder.withStyle
中移除 crossinline (If84d5)
外部貢獻
- compose-ui:在
GraphicsLayerScope
中新增ambientShadowColor
和spotShadowColor
屬性 (I1ba1a、b/160665122) - 系統現在可透過
pluralStringResource
函式支援複數資源。(Ib2f23、b/191375123)
1.2.0-alpha05 版
2022 年 3 月 9 日
發布 androidx.compose.ui:ui-*:1.2.0-alpha05
。查看 1.2.0-alpha05 版的修訂項目。
API 變更
TextToolbar
現在會以 lambda 引數取代ActionCallback
。(Ib2eb9、b/197950089)- 根據 Tiramisu DP2 (I0cbb7) 更新核心和應用程式是否可為空值的作法
- 經過測量的介面現在會顯示 parentData 屬性 (I3313f)
Modifier.onPlaced
和OnPlacedModifier
介面現已穩定運作。(Ib5482)- 太棒了!現在 Compose 動畫支援「開發人員選項」中的「動畫影片長度比例」設定 (I5a4fc、b/161675988)
- 新增了
BeyondBoundsLayout
區域修飾詞 (If8b51、b/184670295) - 文字:includeFontPadd 目前預設為停用狀態。系統會處理
includeFontPadding=false
造成的剪輯問題,而不會針對較高指令碼執行剪輯。(I31c84、b/171394808)
修正錯誤
ComposeContentTestRule.setContent
現在會擲回 如果你嘗試在已有內容的情況下設定內容,則IllegalStateException
內容。(I888a5、b/199631334)- 修正在 Android 上讀取剪貼簿時,由剪貼簿內容造成的當機問題。(I06020、b/197769306)
- 改善 RSB 滾動樣本。(I6a596)
外部貢獻
- 已更新為使用 Kotlinx 協同程式 1.6.0 (I3366d)
1.2.0-alpha04 版
2022 年 2 月 23 日
發布 androidx.compose.ui:ui-*:1.2.0-alpha04
。查看 1.2.0-alpha04 版的修訂項。
API 變更
新增了
ComposableTarget
、ComposableTargetMarker
和ComposableOpenTarget
,這樣如果所呼叫的可組合函式指定了不適用的 Applier,就能在編譯時回報。在多數情況下,Compose 編譯器外掛程式能夠推論出註解,因此直接使用這些註解的情形應該相當罕見。無法推論的案例包括建立及使用自訂 Applier、抽象的可組合函式 (例如介面方法)、欄位,或是屬可組合 lambda 的全域變數 (本機變數和參數為推論得出),或在使用
ComposeNode
或相關的可組合函式時。對於自訂 Applier,呼叫
ComposeNode
或ReusableComposeNode
的可組合函式需要為函式和任何可組合的 lambda 參數類型新增ComposableTarget
註解。不過,與其直接使用ComposableTarget
,建議您建立以ComposableTargetMarker
加上註解的註解,再使用已標示的註解。使用ComposableTargetMarker
加上標示的可組合註解,等同於使用屬性類別完整名稱做為套用器參數的ComposbleTarget
。如需ComposableTargetMarker
的使用範例,請參閱anroidx.compose.ui.UiComposable
。(I38f11)Font(resId, ...)
現在可以在穩定版 API 上使用 loadingStrategy。(Ief3d2)FontLoadingStrategy
現在是穩定版 API。(I1ee35、b/174162090)支援在 Text 中載入非同步字型。(I77057、b/214587005)
新增橋接設定 API,可將自訂
Font.ResourceLoader
轉換成FontFamily.Resolver
。(Ia0060)
修正錯誤
- 提供的
FontFamily.Resolver
會傳送至子元件,例如彈出式視窗。 - 提供的
Font.ResourceLoader
會傳送至子元件,例如彈出式視窗 (I48fa5)。
1.2.0-alpha03 版
2022 年 2 月 9 日
發布 androidx.compose.ui:ui-*:1.2.0-alpha03
。查看 1.2.0-alpha03 版的修訂項。
API 變更
- 不會再呼叫
TextInputSession
和TextInputService
中的notifyFocusedRect
方法,此方法現已淘汰。請改用BringIntoViewRequester
(Ia4302、b/192043120、b/216842427、b/178211874)。 - 在
RenderNode
虛設常式類別中加入destroyDisplayListData
方法 (I1e659、b/216660268) - 加入新的 API,可預先評估您事先撰寫的
SubcomposeLayout
子項。(I857ea) 新增了
movableContentOf
,用於將可組合 lambda 轉換為另一種 lambda,後者會將相關狀態和對應的節點移至呼叫該 lambda 的新位置。如果先前的呼叫離開組合,狀態會暫時保留,如果對 lambda 的新呼叫進入組合,狀態和相關聯的節點就會移至新呼叫的位置。如未新增新呼叫,系統會永久移除對應的狀態。同時別忘了,觀察器會收到相關通知。如果在相同組合中多次呼叫
movableContentOf
lambda,系統會為每個呼叫建立新的狀態和節點。隨著呼叫退出組合及新呼叫進入組合,系統會按照呼叫順序,將對應的狀態從第一個退出的呼叫移至隨後進入的呼叫。新呼叫未宣告的所有狀態都會永久移除 (Ib4850)。FontFamilyResolver
現可透過LocalFontFamilyResolver.current
使用新增了
createFontFamilyResolver(context)
和createFontFamilyResolver(context, coroutineScope)
,以便在撰寫用途外建立新的 FontFamily 解析器。Paragraph 和 MultiParagraph 現在採用
FontFamily.Resolver
TextLayoutResult.layoutInput.fontFamilyResolver
現在包含此版面配置使用的解析器,並淘汰不再使用的TextLayoutResult.layoutInput.resourceLoader
(Id5a45、b/174162090)。支援非同步和選用字型載入,並支援備用行為。這個文字由 Text 和 TextField 使用,並透過 FontFamilyResolver 公開
支援透過
FontFamilyResolver.preload
預先載入字型FontFamilyResolver.setAsyncLoadContext
可讓您設定用於載入非同步字型的全域協同程式結構定義。(I87fe8、b/174162090)新增
AndroidFont
這個新的低階 API,可在 Android 上提供新型的字型資源描述元。其用途包括從特定應用程式後端載入字型、選擇找出裝置上預先安裝的字型,或是從目前字型工廠未提供的資源載入字型。擴充
Font.ResourceLoaded
API,支援選用和非同步字型載入功能。我們不建議應用程式開發人員直接使用這個 API。如要新增新型字型,請參閱AndroidFont
。Font.AndroidResourceLoader
擴充功能函式可讓您在組合外建構Font.ResourceLoader
。將
loadingStrategy
參數新增至以資源為基礎的字型,以便在資源字型參照可下載的字型 XML 時進行非同步載入。(Ie5aea、b/174162090)Typeface(FontFamily)
建構函式已經淘汰,之前用於預先載入字型,而且最多可能需要 10 秒才能下載字型。因此,處理可下載的字型時,這個呼叫可能會封鎖 10 秒。改用FontFamilyResolver.preload
。fontResource(FontFamily): Typeface
已淘汰,之前用於預先載入字型,而且最多可能需要 10 秒才能下載字型。請改用FontFamilyResolver.preload
(If8e7c、b/174162090)接受
maxSlotsToRetainForReuse
的SubcomposeLayoutState
建構函式現已淘汰,替換為接受SubcomposeSlotReusePolicy
的新建構函式:新版介面可讓您更精準控制要保留哪些運算單元供日後重複使用 (I52c4d)。將
Color
中的 HSV 和 HSL 函式公開為非實驗 API。Oklab 色域現已改為公開 API。(I08fb6、b/180731008)淘汰了
AndroidComposeTestRule.AndroidComposeStatement
並非公開 API,對您來說沒有任何實質功能。(Ibc46b)內部產生的 kt 類別重新命名 (Ia0b9e、b/174162090)
移除了
FontLoadingStrategy.values
(I42a9d、b/174162090)全域字型載入器現在稱為
FontFamilyResolver
。(I4f773、b/174162090)使用電腦版的新字型載入系統。(I9ce5c、b/174162090)
FontFamily.Resolver.resolve
會傳回State<Any>
(I4406c、b/174162090)
修正錯誤
- 當焦點在 TextField 上時,TextField 現在會保持在鍵盤上方;如果軟輸入模式設為
ADJUST_PAN
,則會顯示鍵盤 (I8eaeb、b/190539358、b/192043120)。 - 電腦使用
FontFamily.Resolver
的本機元素 - 電腦版
FontLoader
已經淘汰 - 新增電腦版適用的新
createFontFamilyResolver
工廠函式 (I6bbbb、b/174162090) - 切換文字欄位時,螢幕鍵盤輸入類型不會再閃爍。(I1bf50、b/187746439)
1.2.0-alpha02 版
2022 年 1 月 26 日
發布 androidx.compose.ui:ui-*:1.2.0-alpha02
。1.2.0-alpha02 版包含此連結所列的修訂項目。
API 變更
- 為具有旋轉側邊按鈕的 Wear 裝置新增
Modifier.onRotaryScrollEvent()
和Modifier.onPreRotaryScrollEvent()
(I18bf5、b/210748686) - 新增實驗性
View.createLifecycleAwareRecomposer
擴充功能 (I0cde6)
外部貢獻
PointerEvent.scrollDelta.y
現在可在 Android 上反轉 (現在將滑鼠滾輪往右移,會傳回 1,而非 -1) (Ia9811)
1.2.0-alpha01 版
2022 年 1 月 12 日
發布 androidx.compose.ui:ui-*:1.2.0-alpha01
。查看 1.2.0-alpha01 版的修訂項。
API 變更
- 淘汰了
FontFamily.canLoadSynchronously
。這個屬性沒有語意含義。(Ica5ef) - 將 ID 欄位新增至
CompositionData
,以在版面配置檢查器中產生不變的 ID。(Ic116e) - 已將 Wear OS 裝置 ID 新增至預覽裝置清單 (I93232)
依附元件更新
- 現在依附於 Kotlin
1.6.10
。
1.1 版
1.1.1 版
2022 年 2 月 23 日
發布 androidx.compose.ui:ui-*:1.1.1
。1.1.1 版包含此連結所列的修訂項目。
修正錯誤
- 修正
androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
中的NullPointerException
(aosp/1947059、b/206677462) - 修正在 Android 上讀取剪貼簿時,由剪貼簿內容造成的當機問題 (I06020、b/197769306)
- 修正
LazyVerticalGrid
中的 RTL (aosp/1931080、b/207510535)
1.1.0 版
2022 年 2 月 9 日
發布 androidx.compose.ui:ui-*:1.1.0
。查看 1.1.0 版的修訂項。
自 1.0.0 版以來的重要變更
1.1.0-rc03 版
2022 年 1 月 26 日
發布 androidx.compose.ui:ui-*:1.1.0-rc03
。1.1.0-rc03 版包含此連結所列的修訂項目。
修正錯誤
- 更新為可支援 Compose Material 1.1.0-rc03
1.1.0-rc01 版
2021 年 12 月 15 日
發布 androidx.compose.ui:ui-*:1.1.0-rc01
。查看 1.1.0-rc01 版的修訂項。
修正錯誤
- 修正了導致無障礙捲動操作失敗的錯誤 (I7cbfb)
- 如果
HardwareRenderer.isDrawingEnabled()
是false
,只要在呼叫期間啟用,SemanticsNodeInteraction.captureToImage()
現在也能正常運作 (Idf3d0)
1.1.0-beta04 版
2021 年 12 月 1 日
發布 androidx.compose.ui:ui-*:1.1.0-beta04
。查看 1.1.0-beta04 版的修訂項。
新功能
- 已更新為與 Kotlin
1.6.0
相容
API 變更
- 清除了
androidx.core.view
中的空值 (I7078a、b/204917439) - 新增了實驗性 API,可讓使用者將整個端點使用 PointerInputchange 或確認是否已被使用。(I2e59d)
- 新增 UI 圖層中滑鼠滾輪事件的支援。(Ia14eb、b/198214718)
- 新增實驗性
Modifier.composed
超載,允許索引鍵進行相等性的比較,而且符合略過最佳化的資格。(Ice799、b/205851704) ComposeNotIdleException
現在由Exception
擴充,而不是直接由Throwable
。請注意,這表示原本擷取Exception
的擷取子句現在可能會擷取ComposeNotIdleException
,而這些子句先前針對類似情況並不會這麼做 (I9c217)。
修正錯誤
- 修正問題:輸入法編輯器瀏覽權限變更時,文字控點不會移動 (I25f2e)。
1.1.0-beta03 版
2021 年 11 月 17 日
發布 androidx.compose.ui:ui-*:1.1.0-beta03
。1.1.0-beta03 版包含此連結所列的修訂項目。
API 變更
- 新增修飾符 Modifier.onPlaced,藉此觀察位置變更。您可以根據觀察到的位置變更,對子項修飾符的偏移進行額外變更 (I558fd)。
- 移除了
InjectionScope.flush()
和InjectionScope.dispose()
。所有事件的清除作業,以及處理範圍的棄置作業,現在會在已呼叫的 perform*Input() 方法結尾進行,就跟先前一樣。(I2bed8) - 移除了
MultiModalInjectionScope.Touch
和MultiModalInjectionScope.Mouse
。如要插入多模式手勢的觸控和滑鼠事件,現在您可以使用MultiModalInjectionScope.touch()
和MultiModalInjectionScope.mouse()
,而這兩種都接受使用有該形式接收器範圍的 lambda。(Idde18)
修正錯誤
- 系統現在會計算
TouchInjectionScope.swipeWithVelocity
中durationMillis
的預設值,以執行滑動操作。(I19deb)
1.1.0-beta02 版
2021 年 11 月 3 日
發布 androidx.compose.ui:ui-*:1.1.0-beta02
。查看 1.1.0-beta02 版的修訂項。
API 變更
- 新增了實驗性的 BringIntoView API,可讓您傳送要求給父項,請父項透過捲動將項目帶入檢視區塊 (Ib918d、b/195353459)
- 新增支援工具的 Animation API。具體來說,這類 API 可讓工具檢查轉換中的動畫和動畫設定。(I4116e)。
外部貢獻
- 新增了 Modifier.pointerHoverIcon (I95f01)
1.1.0-beta01 版
2021 年 10 月 27 日
發布 androidx.compose.ui:ui-*:1.1.0-beta01
。查看 1.1.0-beta01 版的修訂項。
API 變更
- 新增了實驗性
BringIntoView
API,讓您可以傳送要求至父項,使其可捲動項目至檢視畫面中 (Ib918d、b/195353459) - 新增支援工具的 Animation API。具體來說,這類 API 可讓工具檢查轉換中的動畫和動畫設定。(I4116e)
1.1.0-alpha06 版
2021 年 10 月 13 日
發布 androidx.compose.ui:ui-*:1.1.0-alpha06
。查看 1.1.0-alpha06 版的修訂項。
API 變更
- 從
ViewRootForInspector
和LayoutInfo.ownerViewId
移除ExperimentalComposeUiApi
(I5c2e3) - 新增 Layout 的無子項超載,藉此提高效率 (Ib0d9a)
- 從必須跨模組呼叫的 Composer 方法中移除
InternalCompilerApi
(I1aa0b) SemanticsNodeInteraction.performSemanticsAction
現在會傳回SemanticsNodeInteraction
,系統會在後者呼叫函式。(I9e5db)- 新增了 LocalInputModeManager CompositionLocal 以偵測 TouchMode/NonTouchMode。(I6a83c、b/175899786)
- 新增了
viewConfiguration: ViewConfiguration
至LayoutInfo
,讓取用端可取得長按逾時等的正確值。(I76ca6)- 新增了
InjectionScope
至viewConfiguration: ViewConfiguration
,讓測試能夠根據長按逾時或觸控界區等因素調整插入輸入內容。 - 根據
InjectionScope.viewConfiguration
中的值,針對觸控和滑鼠輸入調整了長按和輕觸兩下操作的預設時間長度。
- 新增了
- 根據 ExposedDropdownMenuBox 的 ExposedDropdownMenu 實作,且內部有 TextField 和 DropdownMenu (If60b2)
- 在 PopupProperties 中新增 dismissOnOutsideClick,取代已淘汰的 dismissOnClickOutside。新屬性可接收點擊位置與錨點邊界,讓您能夠更精細地控制是否要叫用 onDismissRequest。舉例來說,如果想防止錨點因輕觸到而關閉,這就能派上用場。
- updateAndroidWindowManagerFlags 已新增至 PopupProperties,讓您能以低階的方式控制從彈出式視窗傳送給 Android WindowManager 的標記。lambda 的參數則是從產生 WindowManager 標記的 PopupProperties 值計算得出的標記:例如 focusable。lambda 的結果將是最終標記,並會傳遞給 Android WindowManager。根據預設,updateAndroidWindowManagerFlags 不會變更以參數計算的標記。此 API 僅可於彈出式視窗有非常具體的行為規定時使用,因此請謹慎使用。(I6e9f9)
Recomposer.state
已經淘汰並由Recomposer.currentState
取代,藉此將類型變更為 StateFlow (Ic2ab3、b/197773820)- 在
InjectionScope
中新增了flush()
和dispose()
,供您在需要立即清除所有排入佇列的事件,或要處理範圍時使用。(Ifb73a) - 新增了
performScrollToNode(matcher: SemanticsMatcher)
,這會根據指定配對工具的配對結果,將可捲動的容器捲動至配對內容。(Ic1cb8) InjectionScope
現已實作Density
,允許您在performTouchInput
和好友之間輕鬆轉換 px 和 dp。(I8fe1f)
修正錯誤
- AndroidView 現在會透過 ViewTreeLifecycleOwner 和 ViewTreeSavedStateRegistryOwner 將 LocalLifecycleOwner 和 LocalSavedStateRegistryOwner 傳輸到檢視畫面中。(I38f96、b/179708470)
- 修正 WearOS SwipeToDismissBox 有時無法處理滑動手勢的問題。(I9387e)
- 插入輸入事件之間的預設時間已從 10 毫秒變更為 16 毫秒。這項操作可能會變更執行輸入手勢的測試結果,例如特定滑動。(I829fd)
1.1.0-alpha05 版
2021 年 9 月 29 日
發布 androidx.compose.ui:ui-*:1.1.0-alpha05
。查看 1.1.0-alpha05 版的修訂項。
API 變更
- 新增了修飾詞之間通訊的支援 (Id5467、b/198826874)
- 將實驗性的歷來指標新增至 PointerEventChange。(Ic1fd8、b/197553056、b/199921305)
- 將
density: Density
和layoutDirection: LayoutDirection
新增至LayoutInfo
。這樣LayoutInfo
的取用端就能正確解讀LayoutInfo
中顯示的維度和位置。(I002f1) - 新增了插入滑鼠事件的實驗性支援。使用
performMouseInput
即可開始傳送滑鼠事件,或在以performMultiModalInput
做出多模組輸入手勢時,透過MultiModalInjectionScope
的Mouse
屬性傳送滑鼠事件。如需可用 API 的說明文件,請參閱MouseInjectionScope
。(Iaa4a8、b/190493367)
修正錯誤
- 修正了可捲動元件 (包括延遲和非延遲) 在捲動方面的無障礙功能支援 (I6cdb0)
- 已改善
TouchInjectionScope.swipeWithVelocity
。現在可接受更廣泛的輸入變數,但如果無法建立滑動手勢,系統會建議更改後的輸入內容 (I40fbe、b/182477143)
1.1.0-alpha04 版
2021 年 9 月 15 日
發布 androidx.compose.ui:ui-*:1.1.0-alpha04
。查看 1.1.0-alpha04 版的修訂項。
API 變更
PointerEvent
現在含有PointerEventType
,可支援懸停事件 (I091fa)。- 允許子項接受父項指標輸入範圍以外的指標輸入資料。父項可以使用屬性 PointerInputScope.alwaysInterceptChildEvents 攔截呼叫 (I9eae3、b/192479655)
- 淘汰了
performGesture
和GestureScope
,並已由performTouchInput
和TouchInjectionScope
取代。(Ia5f3f、b/190493367) - 將
touchBoundsInRoot
加入含有最低觸控目標尺寸的SemanticsNode
,讓開發人員能確保觸控目標符合無障礙功能的最低要求 (I2e14b、b/197751214)。 - 重做可檢查實作 (I927bc、b/191017532)
- 將可檢查的參數名稱變更為組合 (I3a482、b/191017532)
採用
performTouchInput
和TouchInjectionScope
做為performTouchInput
和TouchInjectionScope
的替換方法,藉此提供其他模式 (例如滑鼠)TouchInjectionScope
與GestureScope
採用的方法相同,但movePointerTo
和movePointerBy
除外,系統會將其重新命名為updatePointerTo
和updatePointerBy
。所有其他方法都相同。TouchInjectionScope
的行為幾乎與GestureScope
相同,只有兩個小細節需注意:- 傳送下移事件時,如果指標在沒有
傳送移動事件 (換句話說,
updatePointerTo()
而非move()
,然後呼叫down()
),也就是前一個 會導致事件時間提前並傳送移動事件 然後再傳送向下事件新的實作方式仍會傳送移動事件,但在這個特定情境中並不會將事件時間提前。 - 傳送上移事件時,如果指標在沒有 傳送移動事件 (與上述類似),先前的實作 會事先將活動時間提前並傳送移動事件 向上事件。新的實作方式都不會改變:指標的新位置只會透過上移事件反映。
最後,
TouchInjectionScope
會採用新的方法currentPosition(pointerId: Int)
來取得指定指標的目前位置。(If1191、b/190493367)- 傳送下移事件時,如果指標在沒有
傳送移動事件 (換句話說,
修正錯誤
- 在剪輯時,允許觸控目標邊界超出剪輯區域,以符合最小觸控目標要求。(I43e10、b/171509422)
- 在 Android 12 裝置中新增延伸越區捲動支援。(Iccf3c、b/171682480)
1.1.0-alpha03 版
2021 年 9 月 1 日
發布 androidx.compose.ui:ui-*:1.1.0-alpha03
。1.1.0-alpha03 版包含此連結所列的修訂項目。
新功能
- 更新 Compose
1.1.0-alpha03
,使其依附於 Kotlin1.5.30
。(I74545)
API 變更
- 新增了
Modifier.inspectable
以納入其他修飾符 (I1909b、b/191017532) - 新增了
BlurredEdgeTreatment
API,以簡化剪輯作業的用途,並結合常用的短片標記和 TileModes 組合。最常見的用途有二,一種是讓模糊處理的內容顯示在原始內容邊界外,並以透明黑色模糊處理這些邊界外的區域,另一種是針對擴展至內容邊界外的模糊處理核心,依據內容邊界來剪輯內容,而內容邊界會對最近邊緣進行取樣。(I6b4b7、b/166927547) - 在 Compose 電腦版中新增了對 RenderEffect 的支援。推出 OffsetEffect 以及模糊處理修飾詞,讓您可輕鬆地為一部分的組合階層導入模糊視覺效果。(I0f6aa、b/166927547)
- 推出 RenderEffect API,供您選擇在
Modifier.graphicsLayer
上加以設定,以變更圖層本身的內容。這可用於模糊處理可組合項的內容,以及組合階層中的子項可組合項。(I47c4d、b/166927547) - AwaitPointerEventScope 現在支援 withTimeout() 和 withTimeoutOrNull() (I507f0、b/179239764、b/182397793)
- 已對 ViewConfiguration 新增最小觸控目標尺寸,用於語意及指標輸入,確保可使用無障礙功能。(Ie861c)
- 新增 TileMode.Decal 支援,可用於定義模糊式 RenderEffect 的邊緣行為 (I7e8ed、b/166927547)。
performScrollToIndex
、performScrollToKey
、hasScrollToIndexAction
和hasScrollToKeyAction
現已改為穩定 API (I142ae、b/178483889)- 新增了測試方法,以取得裁剪邊界。(I6b28e)
修正錯誤
- 已從 BlurredEdgeTreatment 中移除了 isBounded 方法,以便明確檢查形狀參數是否為空值。(I85d68)
1.1.0-alpha02 版
2021 年 8 月 18 日
發布 androidx.compose.ui:ui-*:1.1.0-alpha02
。查看 1.1.0-alpha02 版的修訂項。
API 變更
- PointerEvent 現在支援讀取滑鼠按鈕狀態和鍵盤修飾符狀態 (I6310c、b/180075467)。
- 插入的手勢現在使用 MainTestClock 的時間做為可靠資料來源。系統會將
performGesture
中所插入事件的目前時間初始化為 MainTestClock 的目前時間 (Ifb364、b/192064452)。 - 新增了
DpRect(DpOffset, DpSize)
建構函式 (I2cf16,b/194219828) - 新增了 DpSize 類別 (I7abb1、b/194219828)
修正錯誤
- 更新了向量圖形 xml 剖析功能,以支援 ColorStateLists 做為 VectorDrawables 上的根色彩色調屬性。(I86915、b/195668138)
1.1.0-alpha01 版
2021 年 8 月 4 日
發布 androidx.compose.ui:ui-*:1.1.0-alpha01
。查看 1.1.0-alpha01 版的修訂項。
API 變更
RelocationRequester.bringIntoView
現在接受矩形做為參數,讓我們將可組合項的部分內容呈現在檢視畫面中 (Ice2c5、b/194330245)AnimatedImageVector
和相關 API 現已新增至新的androidx.compose.animation:animation-graphics
模組。(I60873)- 新增了實驗性修飾符,可處理重新配置的請求。(I65a97、b/178211874)
推出 BrushPainter API,支援在 PaintPall 中繪製任意筆刷,類似 ColorPainter
更新了 Brush API,以納入在 BrushPainter 中查詢的內建函式大小參數 (Ia2752、b/189466433)
更新了 DrawScope#drawImage 方法,並採用來源和目的地矩形,以使用選用的 FilterQuality 參數。這適合像素風格藝術在放大時進行像素化處理之用。更新了 BitmapPainter + Image 可組合項,使其也可使用選用的 FilterQuality 參數 (Ie4fb0、b/180311607)
新增了
GestureScope.advanceEventTime
方法,以便進一步掌控手勢中的事件時間 (Ibf3e2)
修正錯誤
- 為針對繪製修飾詞鏈結提供更完善的支援,請務必在 Modifier.paint 實作中呼叫 drawsContent。以往我們會將 Modifier.paint 加在修飾符鏈結的分葉節點中,但是這種操作會導致 Modifier.paint 無法在可組合項容器 (例如:Box) 上設定,或在
Modifier.paint().border()
等之上添加其他修飾。現在,我們讓 Modifier.paint 在繪製指定 Painter 的內容後呼叫 drawContent,這樣就能提升修飾詞模式中的行為一致性 (Ibb2a7、b/178201337、b/186213275)。 - 對話方塊現在會遵循平台大小行為。將
usePlatformDefaultWidth
設為 false,即可覆寫這個行為。(Iffaed、b/192682388) - 已將
InfiniteAnimationPolicy
移至 :compose:ui (I5eb09、b/160602714) - 現在透過語意操作捲動延遲清單和一般捲動式元件時會呈現動畫效果 (Id9066、b/190742024)
1.0 版
1.0.5 版
2021 年 11 月 3 日
發布 androidx.compose.ui:ui-*:1.0.5
。1.0.5 版包含此連結所列的修訂項目。
修正錯誤
- 修正追蹤 derivedStateOf 例項時的異常終止問題 (aosp/1792247)。
1.0.4 版
2021 年 10 月 13 日
發布 androidx.compose.ui:ui-*:1.0.4
。1.0.4 版包含此連結所列的修訂項目。
依附元件更新
- 已更新為依附 Kotlin
1.5.31
1.0.3 版
2021 年 9 月 29 日
發布 androidx.compose.ui:ui-*:1.0.3
。1.0.3 版包含此連結所列的修訂項目。
依附元件更新
- 已更新為依附 Kotlin
1.5.30
1.0.2 版
2021 年 9 月 1 日
發布 androidx.compose.ui:ui-*:1.0.2
。1.0.2 版包含此連結所列的修訂項目。
更新為支援 Compose 1.0.2
版。Compose 1.0.2
仍與 Kotlin 1.5.21
相容。
1.0.1 版
2021 年 8 月 4 日
發布 androidx.compose.ui:ui-*:1.0.1
。1.0.1 版包含此連結所列的修訂項目。
依附元件更新
- 已更新為依附 Kotlin
1.5.21
。
1.0.0 版
2021 年 7 月 28 日
發布 androidx.compose.ui:ui-*:1.0.0
。1.0.0 版包含此連結所列的修訂項目。
1.0.0 的主要功能
這是 Compose 的第一個穩定版本。如需詳細資訊,請參閱官方的 Compose Release 網誌!
已知問題
如果使用的是 Android Studio Bumblebee Canary 4 或 AGP
7.1.0-alpha04
/7.1.0-alpha05
,則可能會遇到下列當機情形:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
如需修正這個問題,請暫時將
build.gradle
檔案中的 minSdkVersion 提高到 24 以上。Android Studio Bumblebee 和 AGP7.1
的下一個版本會修正這個問題 (b/194289155)
1.0.0-rc02 版
2021 年 7 月 14 日
發布 androidx.compose.ui:ui-*:1.0.0-rc02
。查看 1.0.0-rc02 版的修訂項。
修正錯誤
- 對話方塊現在會遵循平台大小行為。將
usePlatformDefaultWidth
設為 false,即可覆寫這個行為。(Iffaed、b/192682388)
1.0.0-rc01 版
2021 年 7 月 1 日
發布 androidx.compose.ui:ui-*:1.0.0-rc01
。查看 1.0.0-rc01 版的修訂項。
新功能
- 將 ui-tool 模組分割為
ui-tooling
和ui-tooling-preview
(Iefa28、b/190649014)
API 變更
- 移除了已淘汰的實驗性
FocusManager#moveFocusIn
和FocusManager#moveFocusOut
(I227d7、b/170154986、b/186567354、b/168510304) - Canvas 現已支援 contentDescription 參數以提供無障礙功能。(Ib547c)
PopupProperties
中的useDefaultMaxWidth
已重新命名為usePlatformDefaultWidth
。(I05710)- 對話方塊現在可使用整個螢幕寬度。(I83929、b/190810877)
- 新增了 HSV 和 HSL 色彩表示法的實驗性支援。(Id7cf8、b/180731008)
行為變更
- Compose
@Preview
現在提供LocalActivityResultRegistryOwner
,可讓您預覽使用rememberLauncherForActivityResult()
(這會依附於現有擁有者) 等 API 的可組合項 (Ib13d1、b/185693006)。 - Compose
@Preview
現在提供LocalOnBackPressedDispatcherOwner
,可讓您預覽使用BackHandler
(這會依附於現有擁有者) 等 API 的可組合項 (Ia1c05、b/185693006)。
修正錯誤
- 已將
InfiniteAnimationPolicy
移至androidx.compose.ui:ui
(I5eb09、b/160602714) - 為了變更模組結構,系統已暫時移除 AnimatedImageVector。(I41906、b/160602714)
1.0.0-beta09 版
2021 年 6 月 16 日
發布 androidx.compose.ui:ui-*:1.0.0-beta09
。1.0.0-beta09 版包含此連結所列的修訂項目。
API 變更
- 使用不公開建構函式將列舉角色和 LiveRegionMode 變更為內嵌類別 (Id1890)
- KeyboardCapitalization 轉換為內嵌類別。(Id5a1c)
- 將 HapticfeedbackType 變更為內嵌類別。(I255ec)
- Modifier.pointerInteropFilter 是 @experimentComposeUiApi。(Iede6c)
- TextAlign、FontSynthesis 和 TextDirection 現為內嵌類別。(I212fe)
- TextOverflow 變更為內嵌類別。(I433af)
- FontStyle 現在是內嵌類別。(I9e48b)
修正錯誤
- 目前索引鍵常數為 @experimentComposeUiApi。穩定之前,使用程式碼可宣告不公開常數。(Ia5d48)
- Compose 測試現可於 Robolectric 上執行。目前已找出以下限制:
- 由於沒有原生點陣圖,因此
ImageBitmap()
會導向 NullPointerException - 因為沒有任何繪圖,所以
captureToImage()
會無限期地等待下一個繪圖許可 (也就是無法解鎖)。 - 未載入任何字型,因此系統無法正確測量任何文字。所有字元的固定高度約 20 px,寬度為 1 px。
ComposeTestRule.waitUntil {}
在等待期間不會執行主執行緒,因此實際上跟ComposeTestRule.mainClock.advanceTimeUntil {}
並無不同。我們預計日後會找到更多限制。(I284fa)
- 由於沒有原生點陣圖,因此
新增的設定檔規則
這個版本將設定檔規則新增至下列撰寫模組 (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
什麼是設定檔規則?
程式庫的設定檔規則在位於
src/main
或同等目錄中的文字檔baseline-prof.txt
內進行指定。該檔案會每行指定一個規則,這裡的規則是指對應至程式庫方法或類別的模式。這些規則所用語法是人類可讀形式的 ART 設定檔格式的超集,使用adb shell profman --dump-classes-and-methods ...
時會用到這類格式。這些規則會採用兩種形式之一來指定方法或類別。方法規則將採用以下模式:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
類別規則將採用以下模式:
<CLASS_DESCRIPTOR>
此處的
<FLAGS>
是H
、S
和P
之中的一或多個字元,用於指出這個方法應標記為「Hot」、「Startup」或「Post Startup」。<CLASS_DESCRIPTOR>
是指定方法所屬的類別描述元。舉例來說,androidx.compose.runtime.SlotTable
類別的描述元是Landroidx/compose/runtime/SlotTable;
。<METHOD_SIGNATURE>
是方法的簽名,含有該方法的名稱、參數類型和傳回類型。舉例來說,LayoutNode
上的fun isPlaced(): Boolean
方法含有isPlaced()Z
簽名。這些模式可包含萬用字元 (
**
、*
和?
),以便讓單一規則涵蓋多種方法或類別。
規則的用途
方法中如果帶有
H
標記,表示這個方法是「Hot」方法,應該預先完成編譯。方法中如果帶有
S
標記,表示這是系統會在啟動時呼叫的方法,應該預先完成編譯,以免啟動時耗費資源處理編譯作業及解析方法。方法中如果帶有
P
標記,表示這是系統在啟動之後才會呼叫的方法。如果類別顯示在這個檔案中,表示系統會在啟動期間使用該類別,因此應該要事先在堆積中分配該類別,以免耗費載入類別的成本。
運作方式
- 程式庫可以定義這些規則,並會包裝於 AAR 構件中。接著,系統會在建構包含這些構件的應用程式時,將這些規則合併起來,然後使用合併後的規則建構該應用程式專屬的精簡二進位 ART 設定檔。當該應用程式安裝在裝置上時,ART 便可以利用這個設定檔預先編譯特定應用程式子集,以提高應用程式效能,特別是首次執行的效能。請注意,這項設定不會對可偵錯的應用程式產生任何影響。
1.0.0-beta08 版
2021 年 6 月 2 日
發布 androidx.compose.ui:ui-*:1.0.0-beta08
。1.0.0-beta08 版包含此連結所列的修訂項目。
API 變更
NestedScrollSource
列舉是由內嵌類別取代。(Ie321b、b/187055290)FocusManager.clearFocus(forcedClear = true)
已重新命名為FocusManager.clearFocus(force = true)
(Ia0c41)- 已將列舉用例重構為內嵌類別,以避免完整的 when 陳述式在新增列舉值後出現問題。(I2b5eb)
- 從
PopupProperties
移除@ExperimentalComposeUiApi
。(I01fa6) - 「
PointerType
」已從列舉變更為內嵌類別 (If5058) - ContentDescription 和 Text 語意屬性不再只是單一值,而是清單。如此即可直接合併,無需串連。同時也提供更優質的測試 API,以便善用這些變更 (Ica6bf、b/184825850)
- 淘汰了
Modifier.focusModifier()
,改為Modifier.focusTarget()
(I6c860) Modifier.onSizeChanged()
和Modifier.onGloballyPositioned()
已不再為內嵌函式 (I727f6、b/186109675)KeyboardType
列舉是由內嵌類別取代。(I73045、b/187055290)FocusState
列舉已改為FocusState
介面 (Iccc1a、b/187055290)- ImeAction 列舉已由內嵌類別取代。(I18be5、b/187055290)。
PlaceholderVerticalAlign
轉換為內嵌類別。(If6290)- TextUnitType 現在是內嵌類別。(I4cba9)
AnnotatedString.withAnnotation
函式現在是 ExperimentalTextApi,而非 ExperimentalComposeApi。(I0cd0a)- 採用 TextUnitType 的 TextUnit 建構函式現在是 ExperimentalTextApi,而非 ExperimentalComposeApi。
修正錯誤
- 修正了 Beta 版 7 版導入的漏洞,因為捲動畫面後,LazyColumn/Row 項目僅有部分顯示 (I8c9ac、b/188566058)
- 現在,
detectDragGesures
、detectVerticalGestures
和detectHorizontalGestures
會自動使用位置變更,不需要在 onDrag 回呼中呼叫 change.consumePositionChange (I42fc4、b/185096350、b/187320697) - 提供對齊線的 LayoutModifiers 是固定的。修正子項對齊線變更會導致無法重新測量父項的錯誤 (I4401f、b/174315652)。
- 已變更
Modifier.onGloballyPositioned()
,系統會回報此修飾詞在修飾詞鏈結中的座標,而非套用所有修飾詞後的版面配置座標。也就是說,修飾符的排序現在會影響系統回報的座標。(Ieb67d、b/177926591)
1.0.0-beta07 版
2021 年 5 月 18 日
發布 androidx.compose.ui:ui-*:1.0.0-beta07
。1.0.0-beta07 版包含此連結所列的修訂項目。
API 變更
- 新增了用於檢查器的
ViewRootForInspector
介面 (Ib70df) SubcomposeLayoutState
現可支援可重複使用的運算單元數量。版面配置會維持在有效計數中,而非丟棄,改為在下次需要新版位時重複使用 (Ieb981)- KeyEventType 列舉是由內嵌類別取代。(Id670a、b/187055290)
FocusDirection
列舉是由內嵌類別取代。(Ib6d03、b/187055290、b/184086802)- 推出可拉高 SubcomposeLayout 狀態的功能,讓您預先組合內容並傳遞至必要的 slotId,這樣下次只要使用指定的 slotId 建立子組合,就能略過組合程序,進而更快速地傳遞測量結果。(I42580、b/184940225)
- 新增了剪輯片段選取控點 (Iff80d、b/183408447)
- 移除了與 LayoutInspector 支援相關且未使用的 API。(I2ac78)
修正錯誤
- LazyColumn/Row 現在會保留最多 2 個先前顯示項目的有效狀態 (而非加以丟棄),即使這些項目已被捲出畫面也一樣。如此一來,當我們需要組合新項目時,元件可重複使用有效的子組合,達到提升捲動效能的效果 (Ie5555)。
AnnotatedString
上的TextGeomerticTransform
和TextDecoration
將依指定的方式套用 (I61900、b/184760917)。
1.0.0-beta06 版
2021 年 5 月 5 日
發布 androidx.compose.ui:ui-*:1.0.0-beta06
。1.0.0-beta06 版包含以下修訂項目。
API 變更
- 解決導覽手勢相關衝突。(I1145e)
@ComposeCompilerApi
已不再使用@RequiresOptIn
(Iab690)- 新增了 CollectionInfo 和 CollectionItemInfo 無障礙服務 API,可為集合及其項目加上無障礙服務標示 (Id54ef、b/180479017)
- 新增了
SemanticsActions.ScrollToIndex
,可將含有索引項目的項目清單捲動到含有特定索引的項目,並新增SemanticsProperties.IndexForKey
以取得包含索引鍵項目清單的項目索引。這兩個動作均是透過 LazyList 實作。- 新增了
SemanticsNodeInteraction.performScrollToIndex
和SemanticsNodeInteraction.performScrollToKey
,前者可將清單捲動至指定的索引,後者則能將清單捲動到含有指定鍵的項目上。(I4fe63、b/178483889、b/161584524)
- 新增了
- 已將 ownerViewId 新增至 GraphicLayerInfo (I19f62)
- 新增了 Font() 超載,可載入素材資源、File 和 FileDescriptor 中的字型 (I5d382)
- 新增了無障礙功能 API (
error
),以便標示含有無效輸入內容的節點 (I12997、b/180584804、b/182142737) - 新增了
Font()
超載,以載入素材資源、File 和 File 描述元 (I43007) 的字型 - 註解標記可將支援儲存至
TextFieldValue.Saver
。已將addTtsAnnotation
和擁有註解公用程式函式新增至AnnotatedString.Builder
(I8cbdc、b/178446304) - 新增了 TextUnit 建構函式函式
TextUnit(value: Float, type: TextUnitType)
(I7ecce、b/178446304)
1.0.0-beta05 版
2021 年 4 月 21 日
發布 androidx.compose.ui:ui-*:1.0.0-beta05
。1.0.0-beta05 版包含此連結所列的修訂項目。
API 變更
- 新增了實驗性
FocusManager.moveFocus(In)
和FocusManager.moveFocus(Out)
(Ic5534、b/183746743) - 新增了實驗性
performTextInputSelection
API (I2dcbb、b/178510628) - 淘汰了
InputEventCallback
介面。您無法在任何公用 API 中使用該介面;在程式碼中也是一樣。(I34a02、b/184003208) - 淘汰了
TextLayoutResult/createTextLayoutResult
函式。這是用於測試的未使用的公開函式。這項函式沒有任何用於編寫文字 API 的功能。函式目前已淘汰,稍後會移除。(I80413)
修正錯誤
- 修正
ACTION_SCROLL_FORWARD
、ACTION_SCROLL_BACKWARD
、accessibilityActionScrollLeft
、accessibilityActionScrollUp
、accessibilityActionScrollRight
和accessibilityActionScrollDown
無障礙捲動操作。現在不會捲動至可捲動項目底部,而是會依照指定方向捲動單一畫面 (Ieccb0)。 - ui-test-manifest 和 ui-tooling-data 的 AndroidManifest 檔案現在與 Android 12 相容 (I6f9de、b/184718994)
1.0.0-beta04 版
2021 年 4 月 7 日
發布 androidx.compose.ui:ui-*:1.0.0-beta04
。1.0.0-beta04 版包含此連結所列的修訂項目。
API 變更
- 將
SoftwareKeyboardController
中的hideSoftwareKeyboard
和showSoftwareKeyboard
分別重新命名為hide()
和show()
。- 為 LocalSoftwareKeyboardController 提供完整的 CompositionLocal 介面,以便設定該物件 (在測試中特別實用) (I579a6)
- 新增了 LiveRegion 無障礙服務 API。如果節點標示為即時區域,無障礙服務會自動向使用者發送該節點的變更通知 (Idcf6f,b/172590946)
- 推出了 TextOverflow.Visible。(Ic8f89)。
修正錯誤
- 修正了位於邊緣的
LazyColumn
/LazyRow
項目在快速滑過操作後擺放位置不正確的問題 (Ie4d13、b/183877420) - 當
AndroidViewBinding
從 Compose 階層中移除時,AndroidViewBinding
現在會妥善移除透過FragmentContainerView
加載的片段 (Ib0248、b/179915946)。 - 現在,如果
ComposeView
位於Fragment
內,AndroidViewBinding
會正確地為透過FragmentContainerView
加載的片段建立巢狀結構,修正無法儲存及還原這些片段狀態的問題 (I70eb0、b/179915946)。 - Compose ViewBinding 現在取決於片段
1.3.2
,而現在在設定變更之後,還會持續顯示透過FragmentContainerView
加載的片段。(I0743d、b/179915946)
1.0.0-beta03 版
2021 年 3 月 24 日
發布 androidx.compose.ui:ui-*:1.0.0-beta03
。1.0.0-beta03 版包含此連結所列的修訂項目。
API 變更
- 延遲檢查 ComposeView 的 ViewTree 依附元件 (I8dbbf、b/182466548)
- 已將
startX
/endX
和startY
/endY
選用參數新增至GestureScope
的swipeUp
/swipeDown
/swipeLeft
/swipeRight
函式中。(I49e2d、b/182063305)
1.0.0-beta02 版
2021 年 3 月 10 日
發布 androidx.compose.ui:ui-*:1.0.0-beta02
。查看 1.0.0-beta02 版的修訂項。
API 變更
- 新增了
LocalSoftwareKeyboardController
組合本機 API,以取代 TextField 中的舊 SoftwareKeyboardController 介面 (I5951e、b/168778053)。 - 新增了
LocalSoftwareKeyboardController
組合本機 API,以取代 TextField 中的舊 SoftwareKeyboardController 介面 (I84472、b/168778053) - 移除了下列
SemanticsMatcher
:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(If16bd)
- 將下列
SemanticsMatchers
標示為 @experimentTestApi:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(Ia600c)
- 新增了下列
SemanticsMatcher
:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(I2f502)
修正錯誤
- 強制限制實驗 API 的公開使用行為 (I6aa29、b/174531520)
- 「
androidx.compose.ui:ui
」已不再取決於 AppCompat 或 Fragment。如果您在應用程式中使用 ComposeView,同時也使用 Fragment 和/或 AppCompat,請確保您使用的是 AppCompat 1.3 以上版/Fragment 1.3 以上版,這樣才能正確設定 ComposeView 必備的生命週期和已儲存狀態擁有者。(I1d6fa、b/161814404) - 修正在導覽構成目的地中使用無效
rememberSaveable { mutableStateOf(0) }
的問題。(I1312b、b/180042685、b/180701630) - 新增了
LocalSoftwareKeyboardController
組合本機 API,以取代 TextField 中的舊 SoftwareKeyboardController 介面 (I658b6、b/168778053) - 修正了
ComposeRootRegistry
的tearDownRegistry()
中極少發生的 NoSuchElementException (Iddce1)
1.0.0-beta01 版
2021 年 2 月 24 日
發布 androidx.compose.ui:ui-*:1.0.0-beta01
。1.0.0-beta01 版包含此連結所列的修訂項目。
這是 Compose 1.0.0 Beta 版的第一個版本。
API 變更
- 已將 onStart 回呼新增至
detectDragGestures
(I67269、b/179995594) - 用於依照內建函式調整大小的修飾符不再處於實驗階段。(I15744)
- MeasureBlocks 已重新命名為介面新奇有趣的 MeasurePolicy。版面配置 API 經過更新/簡化,可使用 MeasurePolicy (Icab48、b/167662468、b/156751158)。
InteractionState
已替換為[Mutable]InteractionSource
- 介面負責傳送/收集「互動」(Interaction) 事件。
- 使用
interactionSource = remember { MutableInteractionSource() }
,而不是將interactionState = remember { InteractionState() }
傳遞給Button
和Modifier.clickable()
等元件。 - 應改用 InteractionSource 中的擴充功能函式,例如 InteractionSource.collectIs PressedAsState(),而不是:
Interaction.Pressed in interactionState
。 - 如果用途複雜,可以使用 InteractSource.interactions 來觀察互動的串流。如需詳細資訊,請參閱 InteractSource 的說明文件和範例
- (I85965、b/152525426、b/171913923、b/171710801、b/174852378)
- 新增 AccessibilityMananger 介面和 CompositionLocals 的 LocalAccessibilityMananger (I53520)
- 移除了已淘汰的 LayoutCoordinate 方法;針對 positionInParent 和 boundsInParent,請使用函式取代屬性 (I580ed,b/169874631、b/175142755)
- 替換為基礎類型的 Typealias:
ColorStop
現在是Pair<Float, Color>
SpanStyleRange
現在是「AnnotatedString.Range」 ParagraphStyleRange
現在是AnnotatedString.Range<ParagraphStyle>
StringAnnotation
現在是AnnotatedString.Range<String>
- (I8dd1a)
- 為 CoreTextField 等低階文字元件的輸入工作階段建立新的 TextInputSession (I8817f、b/177662148)
- 「位置」指標現在會顯示測距,代表子版面配置實際測量的大小。這個大小可能不受測量限制的影響。(Ib2729、b/172560206、b/172338608)。
- 新增 selectionGroup 修飾詞,可為 Tab 或 RadioButton 集合加上無障礙用途標示 (Ie5c29)
compositionLocalOf
和staticCompositionLocalOf
的defaultFactory
現在是必要元素,而非選用元素。如未提供預設工廠,這項變更可移除非空值的潛在類型錯誤。以前,這會為非空值的類型提供空值的參照。
如果是可為空值類型,請考慮提供
{ null }
做為預設工廠。除非能提供合理的預設值,否則我們不建議搭配不可為空值類型使用本機。如果沒有任何可行的預設值,
defaultFactory
lambda 應擲回例外狀況。不過,擲回例外狀況代表本機取用者會有隱含的依附元件,前提是該元件不會由類型系統強制執行 (Ifbd2a)。移除了 ui 模組的已淘汰方法 (I646f6)
已重新命名大小修飾符。將 Modifier.width/height/size 重新命名為 requiredWidth/requiredHeight/requiredSize。Modifier.PreferredWidth/PreferredHeight/recommendedSize 已重新命名為 width/height/size。(I5b414)
已移除
Modifier.tapGestureFilter
。請改用Modifier.pointerInput { detectTapGestures(...) }
。(I266ed、b/175294473)部分消耗已從指標輸入系統中移除。協調部分消耗的建議做法是使用 Modifier.nestedScroll (Ie9c9b)。
方向已移至基礎套件。VelocirtTracker 已從 ui.gesture 移至 ui.input.pointer (Iff4a8、b/175294473)。
imageResource 和 varResource 現已成為 ImageBitmap 和 ImageVector 隨播廣告的擴充功能函式。已刪除
load{Image,Vector,Font}Resource
個函式。(I89130)已移除 AnimationClockObservable 和子類別,AnimatedFloat 也已移除。(Icde52、b/177457083)。
Provider 已重新命名為 CompositionLocalProvider
- Composition 建構函式不再接受索引鍵參數,且已淘汰。
- currentCompositeKeyHash 已變成可組合的頂層屬性,而非可組合的頂層函式。
- CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空間
- ComposableLambda 已成為介面而非具體類別,並且不再有類型參數。
- ComposableLambdaN 已成為介面而非具體類別,並且不再有類型參數。
- snapshotFlow 函式已移至 androidx.compose.runtime 命名空間。
- SnapshotMutationPolicy 的合併方法不再是實驗性功能
- 已移除 @TestOnly 頂層 clearRoot 函式,因為不再需要使用。
- 已移除 keySourceInfoOf 和 resetSourceInfo 函式,因為不再需要使用。
- 已移除 Composer.collectKeySourceInformation,因為不再需要使用。
- 已移除 isJoinedKey、joinedKeyLeft 和 joinedKeyRight 方法。因為不再需要使用。
- 重新整理多個頂層 API,分別歸類到不同的檔案中。由於 Kotlin 的檔案類別語意的關係,此舉會破壞二進位檔案相容性,但不影響原始碼相容性,因此對大多數使用者而言應不成問題
- (I99b7d、b/177245490)
ComponentActivity.setContent()
已從 compose:ui 中移除。請使用androidx.activity:activity-compose:1.3.0-alpha01
提供的項目。已將viewModel()
和LocalViewModelStoreOwner
從 compose:ui 中移除。請使用androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
提供的項目 (I6f36b)Modifier.scrollable 經過重新設計。現在,這個應用程式使用捲動式介面,而非捲動式控制器類別 (I4f5a5、b/174485541、b/175294473)
已從 PointerInputModifier 移除 CustomEvents 支援功能 (I02707,b/175294473)
SnapshotStateObserver 已不再是實驗版 (Id2e6a)
刪除了一些已淘汰的 API (Ice5da、b/178633932)
longPressGestureFilter 和 doubleClickGestureFilter 已移除。將 Modifier.pointerInput 與輔助函式搭配使用,例如 detectTapGestures (I2fedf、b/175294473)
移除了 String.format API,其將多個 toString 方法重構使用,以防止內部使用 String.format。(Id1290)
移除了 dp 判斷提示 (I798d2)
移除了 androidx.compose.runtime:runtime-fulfillment (I55feb)
文字動作現在會自動檢查焦點 (I13777、b/179648629)
移除了
runBlockingWithManualClock
(I15cdc、b/179664814)Modifier.verticalScroll()/horizontalScroll() 的捲動位置現在會以 Ints 表示 (I81298)
FlingConfig 已重新命名為 FlingBehavior,現在可以自訂暫停動畫,而不是預先定義的衰減功能。(I02b86、b/175294473)
新增了輔助函式,用於針對所有 ImeAction 回呼設定相同的動作 (I63447、b/179226323)
已自所有文字欄位移除 SoftwareKeyboardController 回呼,並且很快就會以新的 API 取代。(Iae869、b/168778053)
FontSpan 和 FontWeigthStyleSpan 已不再使用且已經移除。(Ie5b56、b/177423444)
已進行下列 Material API 變更:
- 已將 contentPAdding 參數新增至 Top/BottomAppBar,以自訂預設邊框間距。
- 已依據 API 指南重新調整 BackdropScaffold 中的參數順序,將必要參數置於選用參數之前。
- 已將 BottomNavigationItem 中的
icon
參數移至selected
和onClick
之後。 - 已將 BottomNavItem 中的
alwaysShowLabels
參數重新命名為alwaysShowLabel
。 - 在幾個元件中將
bodyContent
參數重新命名為content
。 - 已將
ButtonDefaults.buttonColors()
中的參數重新排序。請注意,由於參數類型維持不變,因此不會造成您的程式碼產生錯誤。請務必使用具名參數或是手動更新順序,否則您的程式碼將無法正常運作。 - 已將
secondaryVariant
參數新增至darkColors()
。此顏色通常與深色主題中的secondary
相同,但新增這個參數是為了保持一致性和進一步自訂功能。 - 已從公用 API 介面中移除 ElevationDefaults 和 animateElevation(),因為這些項目不常用或不實用。
- 已將
Slider
中的onValueChangeEnd
重新命名為onValueChangeFinished
,並將該值設為可為空值。 - 為求一致,請將
Snackbar
中的text
參數重新命名為content
。 - 已將
contentPadding
參數新增至DropdownMenuItem
,以自訂預設邊框間距,並將content
設為RowScope
的擴充功能。 ModalDrawerLayout
已重新命名為ModalDrawer
。BottomDrawerLayout
已重新命名為BottomDrawer
。- (I1cc66)
修正錯誤
- 新增了 API,可在 Compose 中使用動畫類 VectorDrawable 資源。使用 animatedVectorResource 載入
<animated-vector>
XML 做為 AnimatedImageVector,並以 PainterFor 新增該動畫 (I8ea91) - 新增了 LocalSoftwareKeyboardController 組合本機 API,取代 TextField 中的舊 SoftwareKeyboardController 介面 (I658b6、b/168778053)。
1.0.0-alpha12 版
2021 年 2 月 10 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha12
。查看 1.0.0-alpha12 版的修訂項。
API 變更
- 從 UiApplier 移除對 ViewGroup 的支援功能,並移除已淘汰的 emitView 可組合項 (Ifb214)。
- Modifier.pointerInput 目前規定 remember 鍵必須指出指標輸入偵測處理常式何時該重新啟動,以設定新的依附元件。(I849cd)
- CompositionReference 已重新命名為 CompositionContext (I53fcb)
- 邊界已重新命名為 DpRect (I4b32a)
- 測試更新:hasText() 會檢查文字欄位中的輸入和標籤/提示/預留位置文字 (Iab803)
- viewModel() 可組合項和 LocalViewModelStoreOwner 已移至 androidx.lifecycle.viewmodel.compose。您現在需要新增個別的依附元件 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 才能使用 (I7a374)。
- 允許 AccessibilityAction 中的空值動作、將 AccessibilityAction 和 CustomAccessibilityAction 的動作標籤從 CharSequence 變更為 String (I0dc82)
- 為更符合 ImageBitmap 和 ImageVector 的命名慣例,ImagePainter 已重新命名為 BitmapPainter,以便與 VectorPainter 並行。(Iba381、b/174565889)
- 已改良子字串測試 API,現在起以子字串作為引數 (Icbe78)
- 新增了接受 FocusRequester 的
Modifier.focusOrder()
,但未指定自訂焦點順序的 lambda。如果只需要指定參考資料,而不是可組合項的自訂焦點順序,這個功能就非常實用 (I4f52a、b/179180978) - ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模組中的 androidx.activity.compose.setContent。(Icf416)
- Destructuring 和 copy() 方法在幾個類別中極少使用,現已將其從中移除。(I26702、b/178659281)
- 彈出式視窗已移至特定平台。AndroidPopupProperties 已重新命名為 PopupProperties,
isFocusable
已移至PopupProperties
中的focusable
參數 (Ieeea5) - 已將對話方塊移至特定平台。已將 AndroidDialogProperties 重新命名為 DialogProperties (I4ef69、b/179138130)
- Made LayoutNode (I8a7b1、b/175103944)
- Constraints.enforce 已由 Constraints.constrain 取代。(I8b8ea)
- loadFontResource 已淘汰,請改用 fontResource。imageResource、loadImageResource、vectorResource 和 loadVectorResource 也已淘汰,請改用 painterResource。(I6b809)
- 出於效能考量,ScrollAxisRange 語意現在接受傳回 Float (而非直接 Float 值) 的 lambda。(If4a35、b/178657186)。
- 新增了 EditableText 語意,可為文字欄位的可編輯輸入文字加上無障礙標示,也新增了相應的測試方法來檢查語意 (I8e07a)
- Made PolicyLayer/OwnerScope/OwnerSnapshotObserver 內部 (I4ffaf、b/175103944)
- toIntPx() 已重新命名為 roundToPx() (I9b7e4、b/173502290)
- IntBounds 已重新命名為 IntRect,且該 API 已改善 (I1f6ff)。
- Snapshot API 經更新後更符合 API 指南規範,並隱藏了公用 API 的內部實作類別。(Id9e32)
- 新增了展開及收合語意動作。在 ModalBottomSheetState 中新增了 expand 和 halfExpand (Ib5064)
- Modifier.dragGestureFilter 已淘汰,請改用
Modifier.pointerInput { detectDragGestures (...)}
。或者,也可使用 Modifier.draggable 進行單一軸線拖曳 (I0ba93、b/175294473) - 已將 Ambient 重新命名,以配合 Ambient -> CompositionLocal 的更名。Ambient 原本名為 AmbientFoo,現在已將 CompositionLocal 命名為 LocalFoo。(I2d55d)
- 已淘汰的 BaseTextField 現已移除。請改用 BasicTextField。(I71368)
- 已將選取項目移至基礎。(I7892b)
- 如同我們先前移除
state { 0 }
可組合項且現在鼓勵使用remember { mutableStateOf(0) }
等項目,我們也將移除savedInstanceState { 0 }
可組合項。請改用rememberSaveable { mutableStateOf(0) }
,這樣只要 MutableState 內使用的類型可儲存在套裝組合中,就能自動儲存並還原。如果之前傳遞的是自訂儲存工具物件,現在需使用含有stateSaver
參數的全新 rememberSaveable 超載。用量格式如下:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }
(Ib4c26、b/177338004) - 新增了無障礙功能密碼語意 (I231ce)
- 新增了 ProgressBarRangeInfo.Indeterminate 以標示無障礙功能的不確定進度列 (I6fe05)
- 淘汰了
emptyContent()
和(@Composable () -> Unit).orEmpty()
公用程式,原因是這些公用程式對效能已無正面影響或價值 (I0484d) snapshotFlow
和withMutableSnapshot
不再處於實驗階段 (I6a45f)- Recomposer 現在可以關閉。封閉的重組工具將繼續調整,直到構成的子項協同程式完成為止。 將 Recomposer.shutDown 重新命名為「cancel」,以便與關閉對照 (Ib6d76)。
- UiSavedStateRegistry 已重新命名為 SaveableStateRegistry,AmbientUiSavedStateRegistry 已重新命名為 AmbientSaveableStateRegistry,且兩者都移至 androidx.compose. runtime.saveable 套件 (I30224)。
- 構件 androidx:compose:runtime:runtime-saved-instance-state 已重新命名為 androidx:compose:runtime:runtime-saveable (I6dcac)。
- UI 套件中許多過時的 API 都已刪除 (I2f2dc)。
- compose:runtime-dispatch 構件現已淘汰。目前可在 compose:runtime 中找到 MonotonicFrameClock,而 AndroidUiDispatcher 則可在 compose:ui 中找到。(Ib5c36)。
- Outline.* 類別已不再是資料類別 (I4879e、b/178001427)
- 移除了
view.captureToImage()
,且沒有任何更換內容。(I7fcd2) - 推出了 ColorMatrix API,可用於修改來源內容的 RGB 值,也推出了 Refactored ColorFilter API,可做為介面並用於比對 PathEffect 的實作 (Ica1e8)。
- 將版面配置方向參數加到 形狀的 createOutline 中。允許建立版面配置方向感知形狀。(I57c20、b/152756983)
- onImeActionPerformed 已淘汰,請改用 KeyboardActions (If0bbd、b/179071523)
- 推出將套用於無限動畫的
InfiniteAnimationPolicy
協同程式結構定義元素。根據預設,系統不會安裝任何政策,除非使用ComposeTestRule
執行測試。(I50ec4、b/151940543)。 - canDrag 已從 Modifier.scrollable 移除 (Id66e7、b/175294473)。
- 已將 LayoutCoordinates.ParentCoordinates 重新命名為 LayoutCoordinates.ParentLayoutCoordinates 以允許新的父項 Coordinates 屬性。parentCoordinates 屬性現在提供父項修飾符的 LayoutCoordintes。這樣將針對 onSizeChanged() 和 onGloballyPositioned() 提供更完整的用途 (Idfbfd、b/177926591)
- 淘汰了 tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicaitonGestureFilter。請改用 Modifier.clickable 或 Modifier.pointerInput 搭配 DetectionTapTouchs 函式。(I6baf9、b/175294473)
- 已移除 SaveableStateRegistry 的 unregisterProvider。因此,registerProvider() 會傳回 SaveableStateRegistry.Entry 物件,以取消註冊 (Ic4274、b/178583739)。
- rememberSavedInstanceState() 已重新命名為 rememberSaveable() 並移至 androidx.compose. runtime.saveable 套件 (I1366e、b/177338004)。
- 從公用 API 移除 CoreText 和 CoreTextField
- 已移除淘汰的 SelectionContainer 超載。
- (I99c19)
- 在直接於 WindowManager 新增/移除的階層中使用 Compose 進行測試,現已更加穩定。(Ie81ed、b/175765614)
- 移除了 Recomposer.current()。[Abstract]ComposeView 現已預設為延遲建立、以視窗為範圍的 Recomposers,並由視窗的 ViewTreeLifecycleOwner 所驅動。主機的 Lifecycle 停止時,Recomposition 和以 withFrameNanos 為基礎的動畫滴答會暫停。(I38e11)
- Recomposer.runningRecomposers 現在會提供唯讀 RecomposerInfo 的全域 StateFlow,用於在程序中觀察進行中的組合狀態。建議使用這個 API 取代已淘汰的 Recomposer.current() (If8ebe)
- Saver、listSaver()、mapSaver()、autoSaver 已從 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable (I77fe6)。
- EditCommands 可接受 AnnotatedString。然而,此僅為 API 的變更,尚未實作多樣式文字編輯功能。(I4c3ea)
- 已移除運作時間與時間長度。(Ib9bf4、b/177420019)
- CompositionData.asTree() 和相關 API 已移至個別 ui-tooling-data 模組並標示為實驗性 (Ic95b8)。
- 為了支援形狀的 rtl 方向自動鏡像,RounderCornerShape、CutCornerShape 和 CornerBasedShape 的參數已從 left/right 重新命名為 start/end。導入 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape,處理不需要自動鏡像功能的情況 (I61040、b/152756983)。
Compose 編譯器外掛程式指定的 API 已經過重構,現在會使用介面,而不是具體類別。此外,介面也不會再使用類型參數。
這項內部變更應該不會影響原始碼相容性,但屬於二進位破壞性變更 (I3b922、b/169406779)。
移除無意公開的公開 StringBuilder.deleteAt 函式 (Id6ed9)
修正錯誤
- 放置在檢視區塊階層中,且為另一個構圖子項的 ComposeViews,現在代管其祖系的子項構圖 (I92883)
- 更新了組合的 imageFromResource API,以在載入 ImageBitmap 物件時重複使用資源可提取的快取。(If3627、b/178751994)
1.0.0-alpha11 版
2021 年 1 月 28 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha11
。1.0.0-alpha11 版包含此連結所列的修訂項目。
API 變更
- WithConstraints 已重新設計為 BoxWithConstraints,並移至 foundation.layout。(I9420b、b/173387208)
- Key.DPadUp 已淘汰。請改用 Key.DirectionUp。(Iab335、b/177954892)
- 從現在起,擁有者介面為內部使用。(If8e35)
- 新增了 FocusManager.moveFocus() API,以便透過程式輔助方式移動焦點。(I045cb、b/177681839)
- 將 PopupPositionProvider 變更為使用視窗相關座標,而非全域座標。重新命名父項 GlobalBounds 為 anchorBounds,並變更 windowGlobalBounds 為 windowSize: IntSize (I2994a)
- Duration 和 Uptime 會改為 Long 毫秒,同時此步驟也能移除這些類別上指標輸入的依附元件。(Ia33b2、b/175142755、b/177420019)
- 新增了 AmbientSavedStateRegistryOwner,與現有的 AmbientLifecycleOwner 和 AmbientViewModelStoreOwner 類似 (I9a3e8、b/176756365)
- 更新了向量圖形 API,以支援對向量圖形根套用的色調剖析。(Id9d53、b/177210509)
- 將 toolType 新增至 PointerInputChange 以區分裝置 (Iac787、b/175142755)
- AmbientWindowManager 已重新命名為 AmbientWindowInfo (I2686a、b/177084714、b/177084983)
- 淘汰了全域座標方法,並建構新的視窗式座標方法。(Iee284)
- 新增了 Modifier.toolingGraphicsLayer,這會在檢查功能開啟時加入圖形圖層修飾符 (I315df)。
- FocusRequester.createRefs 可能會有變動,因此目前標示為實驗性 (I2d898、b/177000821)。
- SemanticsPropertyReceiver.hidden 已重新命名為 invisibleToUser 並標示為 @ExperimentalComposeUiApi。AccessibilityRangeInfo 已重新命名為 ProgressBarRangeInfo。stateDescriptionRange 已重新命名為 progressBarRangeInfo。AccessibilityScrollState 已重新命名為 ScrollAxisRange。horizontalAccessibilityScrollState 已重新命名為 horizontalScrollAxisRange。verticalAccessibilityScrollState 已重新命名為 verticalScrollAxisRange (Id3148)。
- 移除了 PointerInputData 和修改的 PointerInputChange,提供所有 PointerInputData 的欄位。將 PointerInputEvent 和 PointerInputEventData 改為內部使用,因為這些並未用於任何公用 API (Ifff97、b/175142755)。
- 更新了 GraphicsLayerScope 實作密度,以支援將 dp 轉換為原始像素 (Ied528、b/176819695)。
- 更新了矩陣 API,以遵循資料列主要順序並提供索引常數,協助於不同的矩陣表示法之間進行轉換,進而讓內部 SkMatrix 和 Matrix4 之間的架構轉換邏輯保持一致。(I432e6)
- 移除了實驗性的 monotonicFrameAnimationClockOf 方法 (Ib753f,b/170708374)
- 將 String.fintPrecedingBreak 和 String.fingFollowingBreak 移至 InternalTextApi。(I657c4)
- androidx.compose.ui.util.isSurrogatePair 已從公開 API 中移除。(Ia9494)
- 將 TransformedText.transformedText 重新命名為 TransformedText.text
- TransformedText 不再是資料類別 (Ie672a)
- 已將
data class
從下列類別中移除:- InlineTextContent
- LocaleList (I605c7)
- 以下類別已不再屬於資料類別:
- AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- FontWeight
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
- 將 VisualTransformation 變更為功能性介面 (I3bba4)
- 新增了函式參照參數類型 (I5e1bd)
- 將轉換後的繫結新增至 ScanningorNode (Ice42f)
修正錯誤
- 淘汰了 onCommit、onDispose 和 onActive,並改用 SideEffect 和 DisposableEffect API (If760e)
修改了 Font/FontFamily/Typeface 的工廠函式。
- 新增了以大寫字母開頭的工廠函式
- 淘汰了使用第一個字母小寫的舊版工廠函式
- 新的工廠函式會傳回 FontFamily 而非子類別
- 隱藏子類別的建構函式,確保子類別只能透過工廠函式建構
- 將 Font.asFontFamily 重新命名為 Font.toFontFamily (I42aa7)
推出了
ComposeContentTestRule
,可用於擴充ComposeTestRule
並定義setContent
,後者已從ComposeTestRule
中移除。新增可傳回ComposeTestRule
的工廠方法createEmptyComposeRule()
,且不會代為啟動活動。如要在測試期間啟動活動,請使用此方法,例如使用ActivityScenario.launch
(I9d782、b/174472899)animateAsState 現已改為 animateFooAsState,其中 Foo 是增加動畫效果的變數類型。例如 Float、Dp、Offset 等 (Ie7e25)
已新增圖片和圖示的內容說明參數,用於為無障礙服務提供說明 (I2ac4c)
移除應避免使用的 displaySize 值。一般建議使用 onRoot() 的尺寸,或至少使用視窗尺寸 (I62db4)。
OnSizeChanged 回報版面配置內容的大小。現在會回報其於修飾符鏈結內位置的大小 (I36b78、b/177562900)。
emit() API 和所有超載已淘汰,並重新命名為 ComposeNode。這些 API 是相同的,只是為了遵循 Compose 的命名慣例而使用了不同的名稱 (I4137b)
TextFieldValue 接受 AnnotatedString。然而,此為 API 變更,尚未導入多樣式文字編輯功能。
- 已從 EditingBuffer 建構函式參數中移除
initial
。(I326d5)
- 已從 EditingBuffer 建構函式參數中移除
invalidate 和 compositionReference() 現已淘汰,並分別以 currentRecomposeScope 和 rememberCompositionReference 取代。(I583a8)
AnnotatedString 已變更為由 kotlin.CharSequence 擴充。因此 length 和 subSequence 現在是執行個體函式,而擴充功能函式則已經移除。(Iaf429)
RememberObserver 會取代 CompositionLifecycleObserver,而 CompositionLifecycleObserver 現已淘汰。
RememberObserver
是用修改後的語意和重新命名方法取代的CompositionLifecycleObserver
。針對只記錄一次的物件,您可以不假思索地改為使用新的 API,這是不變的建議做法。不過,如果參照在某個組合中已有多次記錄,系統會針對每個只呼叫一次onEnter
的參照呼叫onRemembered
。如果子組合 (例如WithConstraints
和Scaffold
) 使用該物件,則會多次呼叫onEnter
,導致無法保證能穩定地單次呼叫onEnter
,因此已將其從RememberObserver
中移除。RememberObserver
新增onAbandoned
,如果RememberObserver
執行個體是從傳遞至remember
的回呼所傳回,但未記錄在組合狀態中,並因此一律不會呼叫onRemembered
,這時就會呼叫此新增項目。之所以會這樣,可能是因為例外狀況在組合完成前終止組合,或是因為產生組合的狀態已過時 (或基於其他原因不再需要使用),導致組合遭到捨棄。如果按照上述單一參照建議提供的RememberObserver
執行個體追蹤了外部資源,則onForgotten
和onAbandoned
都表示不再需要資源。如果物件正在追蹤onRemembered
中啟動的工作或配置的資源,則可以忽略onAbandoned
,因為呼叫onRemembered
之後便不會對其發出呼叫 (I02c36)。淘汰了 2 個或多個 TextUnit 之間的運算。淘汰了 TextUnit.Sp 和 TextUnit.Em 函式,改用 Int.sp 和 Int.em 等擴充功能函式。(I48369)
根據預設,如果程式庫沒有明確宣告的公開資源 (例如透過 public.xml),其中的資源現在會設為不公開。(Ia1dcc、b/170882230)
淘汰了 ScrollableColumn/Row。處理大型捲動內容時,使用 ScrollableColumn 的效率會比使用 LazyColumn 來得低,那是因為使用 LazyColumn 只能組合/測量/繪製可見元素。為了避免使用者效率低落,我們決定淘汰 ScrollableColumn 和 ScrollableRow,並改為使用 LazyColumn 和 LazyRow。使用者仍可決定自己不需採用延遲行為,並直接透過以下類似方式使用修飾詞:Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b、b/170468083)
已為 LazyColumn/LazyRow/LazyVerticalGrid 的範圍新增
items(count: Int)
工廠方法。items(items: List)
和itemsIndexed(items: List)
現已成為擴充功能函式,因此在使用時必須手動匯入。陣列的新擴充功能超載:items(items: Array)
和itemsIndexed(Array)
(I803fc、b/175562574)請使用 ImeAction.None 取代 ImeAction.NoAction
- 請使用 ImeAction.Default 取代 ImeAction.Unspecified (Ie1bcc)
運用 TestCoroutineDispatcher 進行測試 (I532b6)
已重新命名 TextInputService.onStateUpdated 做為 updateState (Id4853)
淘汰了以 TransitionDefinition 為基礎的轉換方式 (I0ac57)
已移除 TextUnitType.Inherit 方法。請改用 TextUnitType.Unspecified。(I9ff64)
1.0.0-alpha10 版
2021 年 1 月 13 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha10
。1.0.0-alpha10 版包含此連結所列的修訂項目。
破壞性變更
所有
@Composable
函式都執行完畢後,可透過重新建構內部編譯器 API,針對進入「套用變更」組合階段所產生的節點進行批次變更。這是一項可能會影響應用程式程式碼的破壞性行為變更,因為在套用完變更之前,您都無法透過內部和實驗性 API 使用節點。這種情況通常可以採取以下變通方法:在
SideEffect
可組合項中使用這類依附元件包圍程式碼,藉此延遲程式碼的執行作業,直到節點建立並完成初始化作業。(I018da)
API 變更
- 新增了 Modifier.focusOrder(),可用於指定自訂對焦週遊順序 (I90cf5、b/175899543、b/170155556、b/170155429)
- 移除了已淘汰的 focusObserver,改為使用 onFocusChanged 或 onFocusEvent (I3ecb9、b/175156387)
- EditOperations API 變更
- 已將 EditOperation 重新命名為 EditCommand
- 為 EditOperation 具體實作的指令後置字串。
- EditCommand 已不再是資料類別
- 已將 EditOperation.process 函式重新命名為 applyTo
- 已將 InputEventListener 重新命名為 InputEventCallback
- (I0a366)
- 移除了未使用的 PxSquared、PxCubed、PxInverse。已將 Size.center() 變更為屬性。(I973f7)
- 現在,ui-test 模組可以設定測試用 UI 重新重編 (Ibebd8)
- 已將 Velocity 修改成為具有元件部分和數學運算 (Ib0447)
- 將
@ExperimentalTesting
重新命名為@ExperimentalTestApi
,以便與類似的實驗 API 註解保持一致 (Ia4502、b/171464963) - 已將 Color.useOrElse() 重新命名為 Color.takeOrElse() (Ifdcf5)
- 移除了未使用的 DpInverse、DpSquared 和 DpCubed 類別。(I4d62b)
- Constraints#satisfiedBy 已重新命名為 isSatisfiedBy。(I9cf5c)
- 新增回呼,在版面配置節點邊界變更時通知擁有者。(I72fd1)
- 為含有 Unspecified 常數的內嵌類別新增了 isSpecified、isUnspecified 和 useOrElse。(I93f7b、b/174310811)
展開 [Abstract]ComposeView API,回收以 Compose 為基礎的檢視畫面,處理其組合以便日後重新建立。新增 API,可用於安裝及探索視窗範圍的 Recomposers 和 CompositionReferences,以便建立子組合。
新增 ViewCompositionStrategy,可用於設定 [Abstract]ComposeViews 的組合處理策略;預設行為是在視窗卸離時丟棄 (I860ab)。
移除了 Any.identityHashCode() 公用 API (I025d7)
移除了 toStringAsFixed API,直接改為使用 String.format。(Iaba6b)
為基礎 Strings.kt 新增 Toggle (I4a5b7、b/172366489)
將 nativeClass 移至 ui 模組並設為內部使用。已在同等的實作中更新 nativeClass 的使用情形,改為使用「is MyClass」。(I4f734)
Modifier.focus() 和 Modifier.focusRequester() 現已淘汰。請改用 Modifier.focusModifier() 和 Modifier.focusReference()。(I75a48、b/175160751、b/175160532、b/175077829)
推出 SelectionRegistrar.notifySelectableChange,向 SelectManager 通知 Selectable 更新 (I6ff30、b/173215242)。
導入了 Outline.bounds 屬性,藉此取得各種外框實作的繫結矩形。(I16e74、b/175093504)
淘汰了 TestUiDispatcher。請改用 Dispatchers.Main (Ic171f、b/175385255)
ImeOptions 和 KeyboardOptions 已不再是資料類別 (I3c898、b/168684531)
VisualTransform API 變更
- 已將 OffsetMap 重新命名為 OffsetMapping
- 已將 OffsetMap.identityOffsetMap 重新命名為 OffsetMap.Identity
- PasswordTransformation 不再是資料類別
- 已將 OffsetMapping 移至其檔案。
- (I0bdf3)
將 Position 重新命名為 DpOffset,並移除了 getDistance() (Ib2dfd)
已將有趣的 Dp.isFinite() 變更為 val Dp.isFinite (I50e00)
修正錯誤
- 重組工具現在會呈現目前狀態的流程,以便監控其活動及相關成效的活動。(Ifb2b9)
- 原生 keyEvent 現在可以透過 keyEvent.nativeKeyEvent 存取 (I87c57、b/173086397)
animate()
現已替換為animateAsState()
,後者會傳回State<T>
而非T
。這樣系統會將無效範圍縮小至讀取 State 值的位置,因此可以提升效能 (Ib179e)。- 新增 Semantics 角色 API,並將 Role 新增為可點選、選取和切換的 SemanticsModifier 參數。Modifier.progressSemantics 已變更,讓 Slider 也能夠使用 (I216cd)。
- 新增以協同程式為主的 API
Animatable
,可確保動畫之間的互斥性。- 新增 DecayAnimationSpec,可支援多維度衰減動畫
- (I820f2、b/168014930)
1.0.0-alpha09 版
2020 年 12 月 16 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha09
。1.0.0-alpha09 版包含此連結所列的修訂項目。
API 變更
- 已淘汰的 KeyEvent.Alt 現已移除。請改用 KeyEvent.isAltPressed。(Idd695)
- 淘汰了 Modifier.keyInputFilter 和 Modifier.previewKeyInputFilter,請改用 Modifier.onKeyEvent 和 Modifier.onPreviewKeyEvent (Idbf1b,b/175156384)
- Modifier.focusObserver 已淘汰。請改用 Modifier.onFocusChanged 或 Modifier.onFocusEvent (I30f17、b/168511863、b/168511484)
- 如要暫停遊標指標輸入 API,請將 RiverPointerInputScope 重新命名為 AwaitPointerEventScope,並將 HandlePointerInput() 重新命名為 awaitPointerEventScope()。(Idf0a1、b/175142755)
- AutoFill API 現為實驗性 API,必須透過選擇加入才能使用 (I0a1ec)
- 新增刪除宣告以建立 FocuSRequester 執行個體 (I35d84、b/174817008)
- 已分別將 accessibilityLabel 和 accessibilityValue 重新命名為 contentDescription 和 stateDescription。(I250f2)
- 將自訂事件從暫停指標輸入 API 中移除 (Ia54d5、b/175142755)
- 引入了 SelectionRegistrar 的數種新函式,並將 onPositionChange 重新命名為 notifyPositionChange。(Ifbaf7)
- 標示為內部使用的 LayoutNode 成員更多 (I443c6)
- 透過版面配置和測試加入 LayoutInfo (I9b190)
- AndroidOwner 內部 (Ibcad0、b/170296980)
- 移除了 ExperimentPointerInput 註解 (Ia7a24)
- 新增了巢狀捲動系統。詳情請參閱 Modifier.nestedScroll (I36e15、b/162408885)
- subcomposeInto(LayoutNode) 已設為內部 (Id724a)
Applier
介面經過變更,將樹狀結構建構程序從由上往下簡化為由下往上。insert()
方法已重新命名為insertTopDown()
。加入新的方法
insertBottomUp()
。套用器會根據效能表現選用
insertTopDown()
或insertBottomUp()
,將節點插入目前編輯的樹狀結構。對某些樹狀結構 (例如
LayoutNode
和View
) 而言,由下往上的建構方式會比由上往下更有效率。在這項變更之前,如要實作由下而上建構作業,您需要先插入一些堆疊,並必須將其複製到每個需進行由下而上效能建構作業的套用器。這項變更實施後,Applier
會覆寫insertBottomUp()
以由下往上建構樹狀結構,而覆寫insertTopDown()
則會由上往下建構樹狀結構。(Icbdc2)已將 dismissOnBackClick 和 dismissOnClickExternal 屬性新增至 AndroidDialogProperties。這些動作可讓您設定要在何時叫用對話方塊的 onDismissRequest lambda。(If5e17)
新增了 painterResource API,藉此從光柵化資產格式 (例如 PNG) 或 VectorDrawables 處理以不透明方式載入的 Painter 物件。取用者不必再事先判斷資產類型,並可呼叫此方法,取得用於 Image 可組合項或 Painter 修飾符的 Painter 物件 (I2c703、b/173818471)。
新增了 Modifier.clearAndSetSemantics 以清除子系的語意,並設定新的語意。(I277ca)
已將 ContentDrawScope 移至 ui-graphics 模組,以便與 DrawScope 搭配使用。(Iee043、b/173832789)
推出 PathEffect 圖形 API,為筆劃形狀提供不同模式。同時也淘汰了 NativePathEffect 的使用方式,改為希望或實際導入 PathEffect。(I5e976、b/171072166)
將 IdlingResource 介面新增至 Compose,做為 Espresso 閒置資源的 Compose 支援子類。可以透過 ComposeTestRule (I433f3) 註冊及取消註冊
將 ComposeIdlingResource 全域 (非) 註冊和時脈全域 (未註冊) 註冊狀態變更為 ComposeIdlingResource (I32660)
修正錯誤
- 現在,偏移修飾符中的 lambda 會傳回 IntOffset,而非 Float (Ic9ee5、b/174137212、b/174146755)。
已從公用 API 中移除 SlotTable、SlotReader 和 SlotWriter。這些項目先前被標示為 InternalInternalAPI。現在是撰寫模組的內部。
為了取代 ui-tooling API 而新增 CompositionData 和 CompositionGroup,用於擷取組合資訊。這些是公開工具,但不適合在 ui-tooling API 外使用,因為這些工具會提供 ui-tooling API 解讀的原始資訊 (I31a9c)
提供繪圖環境大小資訊時,重構 ShaderBrush 以延遲建立著色器的執行個體。這適合用於定義在組合時構成可組合項完整繪圖邊界的漸層,而不必實作自訂的 DrawModifier 實作方式。
已淘汰漸層函式建構函式 API,並採用 Gradient 物件的工廠方法 (I511fc、b/173066799)。
淘汰 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed。請改用 LazyColumn 和 LazyRow (I5b48c)
淘汰了 BuildCompat.isAtLeastR (Idb37e)
新增了 buildAnnotatedString 工廠函式,以建構 AnnotatedString。淘汰了 annotatedString 建構工具函式。(Idfe0b)
移除了 Float 和 Double 的擴充功能將值轉換為弧度。已移至實作 PathParser 中的私人函式,這是唯一使用的位置 (I25f52)
1.0.0-alpha08 版
2020 年 12 月 2 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha08
。1.0.0-alpha08 版包含此連結所列的修訂項目。
API 變更
- 新增語意動作 Dismiss (I2b706)
- 已將 DrawModifier API 從 androidx.compose.ui 套件移至 androidx.compose.ui.draw 套件。已建立 DrawModifierDeprecated.kt 檔案,藉此加入 typealiases/helper 方法,協助從淘汰的 API 改用目前的 API (Id6044、b/173834241)。
- 已將 Modifier.drawLayer 重新命名為 Modifier.graphicsLayer,同時也根據 API 意見回饋,將相關類別更新為 GraphicsLayer。(I0bd29、b/173834241)
- 已加入新的 placeable.placeWithLayer() 和 placeable.placeRelativeWithLayer() 方法,允許自訂版面配置和版面配置修飾符利用加入繪圖的圖層放置子項。有了這個檔案,我們首先可以將重新繪圖最佳化,這樣當我們需要移動子項時,就不必重新繪製其內容;再來,還能為子項套用繪圖轉換 (Ibd8f6,b/170296989、b/171493718、b/173030831)
<T>
已從 SubcomposeLayout 宣告中移除。現在不必指定類型即可使用該項目 (Ib60c8)。- 新增了 Modifier.scale/rotate API,以便 drawLayer 使用。
Modifier.drawOpacity
已重新命名為Modifier.alpha
。- 已將
Modifier.drawShadow
重新命名為Modifier.shadow
(I264ca、b/173208140)
- 規定 PointerInputData 的運作時間和位置欄位不可為空值。(Id468a)
- MaterialTheme 現可為選取控點和選取背景設定正確的顏色。非 Material 應用程式可以手動使用 AmbientTextSelectionColors 自訂用於選取項目的顏色 (I1e6f4、b/139320372、b/139320907)。
- 新增了 WindowManager.isWindowFocused 和 WindowFocusObserver,分別用於檢查主機視窗是否對焦,以及提供 onWindowFocusChanged 回呼。(I53b2a、b/170932874)
- 更新了 TransformOrigin API 為具有解構語法,以傳回
pivotFractionX
和pivotFractionY
為component1
和component2
(If43c4、b/173586560) - 針對可組合 lambda 參數的命名和位置新增了 Lint 檢查,以檢查是否與 Compose 準則一致。另外也根據 Lint 檢查和指引,將部分使用
children
做為結尾 lambda 名稱的 API 遷移至content
(Iec48e)。 - 新增了 API,可檢查在傳送 keyevent 時是否按下 Alt、Ctrl、Meta 或 Shift 修飾符 (I50ed9)
- 新增了
Modifier.drawLayer()
超載。這會在新的 GraphicsLayerScope 使用一個 lambda 區塊,可讓您定義圖層參數,以便在狀態變更時略過重組和版面重新配置程序。DrawLayerModifier 現已處於內部準備狀態,可將其邏輯遷移至 LayoutModifier 的 placeable.placeWithLayer() 方法 (I15e9f、b/173030831) - 依照其他 Ambient 和 Compose API 準則,淘汰以
Ambient
作為字尾所命名的 Ambient,並改為以 Ambient 作為字首的新屬性。(I33440) - 已將
androidx.compose.ui.text.Typeface
移至androidx.compose.ui.text.font.Typeface
(Ic2b81) - 語意引數 mergeAllDescendants 已重新命名為 mergeDescendants (Ib6250)
- 新增拖曳手勢偵測工具的暫停指標輸入 API,包括方向鎖定在內。(Icef25)
- 根據 API 規範,將 VectorAsset 重新命名為 ImageVector 移動 VectorAsset 並重新命名,成為 ImageVector 的內部類別。新增了 VectorAssetBuilder 的 typealias,以便連結至 compat 的 ImageVector.Builder (Icfdc8)
- 已將 ImageAsset 和相關方法重新命名為 ImageBitmap。(Ia2d99)
- 為 PlacementScope 的 place() 新增 zIndex 參數,以便讓 Modifier.zIndex() 做為 LayoutModifier 使用,且任何自訂版面配置都能直接在刊登位置區塊中為其子項設定 zIndexes (I711f7、b/171493718)
- 將基礎語意屬性移至 UI (I6f05c)
- 淘汰 place(Offset) 和 placeRelative(Offset)。請改用含有 int 偏移的超載 (I4c5e7)
- 移除了先前已淘汰的 API:移除了 Modifier.onPositioned,請改用 Modifier.onGloballyPositioned。Modifier.onDraw 已移除,請使用 Modifier.onDrawBehind。已移除 Modifier.plus,請使用 Modifier.then。已移除 Color.Unset,請使用 Color.Unspecified。PxBounds 類別已移除,請改用 Rect。(Ie9d02、b/172562222)
- 更新了 Alignment 介面,使其能夠發揮作用。(I46a07、b/172311734)
- 使用新的暫停指標輸入,新增了輕觸、輕觸兩下、長按和輕按指示的手勢偵測工具。我們還新增了一些公用程式,讓開發人員更容易編寫自己的手勢偵測工具。(I00807)
id
已重新命名為LayoutIdParentData
的layoutId
。Measurable.id
已重新命名為Measurable.layoutId
(Iadbcb、b/172449643)。- 新增多點觸控手勢偵測工具,包括偵測旋轉、縮放和平移操作的協助程式。(Ic459d)
- 推出 SweepGradientShader 和 SweepGradientBrush API。(Ia22c1)
- 測試中的時間控制項 (TestAnimationClock 及其運用) 現在處於實驗階段 (I6ef86、b/171378521)
新增以協同程式為主的捲動 API:
新增 LazyListState.snapToItem 和 LazyListState.smoothScrollBy,以及較低階的 API 捲動控制 API。這些 API 會提供可控制捲動操作的暫停介面,這個介面會等到捲動操作完成後再傳回。(Ie5642)。
已在基礎中新增 Modifier.focusable。這項工具可讓您為元件新增可聚焦的行為,並採用正確的語意和無障礙功能 (I41eb9、b/152525426、b/162865824)。
在 AnimationClockTestRule 中針對可委派給其
clock
的方法和屬性提供預設實作 (I7ea3d、b/173399709)AndroidComposeTestRule 現在可接受自訂活動啟動器 (Ib8288、b/153623653、b/154135019)
TextLayoutResult.getLineVisibleEnd 已淘汰。替代的 TextLayoutResult.getLineEnd 現已加入新參數 visibleEnd (I73282)。
更新了 TextFieldValue API
- 將 TextFieldValue.composition 設為唯讀
- 移除了因選取範圍無效而擲回的例外狀況 (I4a675、b/172239032)
支援文字轉語音引擎的 TtsAnnotation。(I54cc6)
推出可在協同程式中執行動畫的新 API (Ied662)
修正錯誤
- Box 的對齊參數已重新命名為 contentAlignment。(I2c957)
- offsetPx 修飾符已重新命名為 offset,且現已改用 lambda 參數,而非 State (Ic3021、b/173594846)。
- 已將 TextInputService 參數新增至 TextInputService#onStateUpdated (I3e8f5、b/172239032、b/171860947)
- 新增了 Lint 檢查,用於可組合函式中的修飾符參數。這項 Lint 檢查會查驗參數的命名、傳回類型、預設值和順序,確認是否符合 Compose 準則。(If493b)
- 暫時新增選項,允許 TestAnimationClock 由 MonotonicFrameClock 驅動 (I1403b、b/173402197)
- 新增了 Android Typeface 包裝函式。您可以透過
typeface
函式 (例如typeface(Typeface.DEFAULT)
) 載入 Android 字體。同時也將typefaceFromFontFamily()
重新命名為typeface()
(I52ab7) - 新增了 Lint 檢查,用於確認修飾符工廠函式是否已定義為修飾符上的擴充功能,這樣才能順暢地鏈結在一起。(I07981)
- 移除舊的 ui-test 模組及其虛設常式 (I3a7cb)
- 重組工具不再接受 EmbeddingContext;系統會從 performanceCoroutineContext 取得必要的排程依附元件。FrameManager 已淘汰;平台在進行整合時應初始化本身的全域快照處理程序 (I02369)。
- 將樣式資訊傳送至無障礙節點。(If5e8d)
- TextUnit.Inherit 已重新命名為 TextUnit.Unspecified,以便與其他單位保持一致。(Ifce19)
Compose UI 1.0.0-alpha07 版
2020 年 11 月 11 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha07
。查看 1.0.0-alpha07 版的修訂項。
API 變更
- 推出了 ScaleFactor 內嵌類別,用於表示相互獨立的水平軸和垂直軸的縮放比例係數,以支援縮放比例不統一的用途。
- 已將 ComputeScaleFactor 方法新增至 ContentScale
- 新增了 ContentScale.FillBounds 以執行非統一的資源調度,藉此將 srcs 邊界延伸至完全符合目的地。
- 新增了運算子方法,以便使用大小參數計算 ScaleFactor 參數。
- (Ic96a6、b/172291582)
- 新增了用於建立對齊的 Biasalignment 和 BiasAbsoluteAlignment 工廠函式。(Iac836、b/169406772)
- 允許開發人員強制清除焦點。(I90372)
- 修正錯誤:這個錯誤會導致系統無法針對 Compose 內部的「瀏覽次數」繪製高度。(If7782)
- 在 ContentDrawScope 中建立 onDrawBehind API,以符合 Modifier.drawBehind 的命名慣例。(I4fc3a、b/171955269)
- 新增攝影機距離支援,以搭配圖層 API 上的 3D 轉換 rotationX/rotationY。(I40213、b/171492100)
- 新增了沒有回呼的 SelectionContainer (Ibfadb)
- 已移除 ExperimentSubcomposeLayoutApi 註解。現在可以在不新增 @OptIn 的情況下使用 SubcomposeLayout (I708ad)
- FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 套件 (Ied2e7)
- 從 drawShadow() 修飾符中移除讓人感到混淆的不透明度 (I82c62、b/171624638)
- MeasureResult 已從 MeasureScope 中移出 (Ibf96d、b/171184002)
- 將數個版面配置相關符號從 androidx.compose.ui 移至 androidx.compose.layout.ui (I0fa98、b/170475424)
- 移除了已淘汰的 FocusState2 (I686cb、b/168686446)
- ZIndexModifier 現已轉為內部使用 (I1808b、b/171493718)
- 更新了 Size 參數上 lerp 方法的傳回類型,以傳回非空值的 Size,避免不必要的方框設置。(Ib0044)
- 新增了 TestMonotonicFrameClock,可運用 kotlinx-coroutines-test 的 runBlockingTest,對採用 Compose MonotonicFrameClock 等待組合外框事件的程式碼進行測試 (I4402f)
- 移除了 GestureScope.localToGlobal (I15299、b/171462785)
- 新增了
onAllNodesWithSubstring
Finder (I81dd7、b/171462889) - androidx.ui.test 模組已淘汰。請遷移至 androidx.compose.ui.test 和 androidx.compose.ui.test.junit4 (I452e8)
修正錯誤
- captureToBitmap 已移至 captureToImage。(I86385)
- 淘汰了 foundation.Text,改用 material.Text。如要瞭解不使用主題值的無預設立場基本文字 API,請參閱 androidx.compose.foundation.BasicText (If64cb)。
- 更新 TextFields 以接受 KeyboardOptions (Ida7f3)
- 將 KeyboardOptions 重新命名為 ImeOptions (I82f36)
- 已將 KeyboardType 和 ImeAction 移至 KeyboardOptions (I910ce)
- 新增了 provideDefault 做為提供環境的替代方法,可僅針對未提供任何環境值的情況指定環境值。(Id6635、b/171024925)
- BaseTextField 已淘汰。請改用 BasicTextField。(I896eb)
- 推出 ui-test-junit4 模組 (Ib91f8)
relativePaddingFrom
已重新命名為paddingFrom
。新增了paddingFromBaseline
修飾符,方便您指定版面配置邊界與文字基準線的距離。(I0440a、b/170633813)- 將 LaunchedTask 重新命名為 LaunchedImpact,以便與 SideImpact 和 Disposableimpact API 保持一致。為鼓勵採用最佳做法,系統不允許使用不含主題參數的 LaunchedEffect (Ifd3d4)。
- 推出更新設定時會進行重組的資源可組合項。(I6387c、b/167352819)
- 這表示 Composer 必須在建構時提供 CoroutineContext (Ic4610)
- 套用多個
Modifier.zIndex()
時,總共要計算zIndex
的值。過去前者獲得好評。(Ic514c、b/170623936) - 對內部 SlotTable 實作進行變更,但不會影響公用 API。(If9828)
- 新增了鍵盤自動更正輸入法編輯器選項 (I57b8d)
- androidx.ui.test 已移至 androidx.compose.ui.test (I9ffdb)
- 已從公用 API 移除 KeyboardOptions.toImeOptions。(Ic2e45)
外部貢獻
- 已停用內部構件 androidx.compose.ui:ui-text-android (Ib93fa) 的發布功能
1.0.0-alpha06 版
2020 年 10 月 28 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha06
。1.0.0-alpha06 版包含此連結所列的修訂項目。
API 變更
- Recomposer 現已成為 CompositionReference 以及有效的組合父項。現在只有少數情況必須使用明確的 Recomposer。(I4036f)
- 淘汰 VectorPainter 並改用 rememberVectorPainter,更明確地指出可組合 API 會在內部利用「remember」持續保存各組合的資料。(Ifda43)
- 更新了 Modifier.drawWithCache API,顯示 ContentDrawScope (而非 DrawScope) 為接收器範圍,以便為實作提供重新排序繪製指令的功能。這相當適合用於混合/調色用途;在這些情況中,必須先顯示內容像素,才能正確套用相應的混合模式演算法。(Ie7ec8)
- 將 SimpleContainer 移至 PopupTestUtils.kt (I78c57)
- ConsumedData 已不再是資料類別。詳情請參閱 https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219 (I1737f)
- 固定 Rtl 控點位置。(I6e1e0)
- 將 DrawScope 和 ContentDrawScope 重構為介面,而不是抽象類別
- 已建立 DrawScope 的 CanvasDrawScope 實作項目
- 重構導入 DrawScope 以使用 CanvasScope
- 建立 DrawContext 以納入 DrawScope 的依附元件
- 已在 DrawScope 中移除已淘汰的方法 (I56f5e)
- 破壞性變更:將傳回值從
PointerInputFilter.onPointerEvent(...)
中移除,因為在指標事件中唯一應支援變更的值是取用資料。現在您不必從PointerInputFilter.onPointerEvent(...)
傳回資料,只要修改傳入的 PointerEvents 取用資料即可。(I6acd0) - MeasureScope 和 IntrinsicMeasureScope 已成為介面。(I1a087、b/170461665)
- 系統已隱藏 AlignmentLine 的合併函式。(I9da1a、b/170612900、b/170611568)
- 新增在經組合的修飾符中指定檢查器資訊的功能 (Idee08、b/163494569)
- 已將 SelectAll 選項新增至選取選單 (Ief02b)
- 更新了 DrawTransform.rotate,採用預設的中心資料透視參數來比對說明文件。
- 更新了 DrawScope.rotateRad 以使用資料點的偏移偏移來符合其他轉換方法。
- 淘汰了 DrawScope.rotateRad 超載,因為其會對資料透視表的 x 和 Y 座標使用浮點值。
- (Iffcbb、b/170434992)
修正錯誤
- 已為 androidx 啟用 MissingGetterMatchingBuilder 的 API Lint 檢查功能 (I4bbea、b/138602561)
- 新增測試。(I6b8ae)
- 在 ComposeTestRule 中啟用轉場功能,並從 ComposeTestRule 中移除啟用閃爍游標的選項。(If0de3)
- 新增了 KeyboardCapitalization 輸入法編輯器選項 (I8ac38)
- 在 CoreTextField 中新增了單行鍵盤選項 (I72e6d)
- 將 SimpleContainer 移至 PopupTestUtils.kt (I65c3e)
- 已將 Radius API 重新命名為 CornerRadius,以便完善表達於 Compose 中的使用方式。更新說明文件,指出負圓角半徑的限制取值範圍已設為零 (I130c7、b/168762961)。
- 改善了 Android 互通性,具體做法是繼續將 MotionEvent 傳送至子項 Android View,後者會針對所有操作 (
ACTION_DOWN
除外) 的 onTouchEvent 傳回 false (I94c5a,b/170320973) - 已將 Box 實作為內嵌函式。(Ibce0c、b/155056091)
外部貢獻
- 為
AnnotatedString.capitalize
和AnnotatedString.decapitalize
支援不同的語言代碼 (I4aa7f)
1.0.0-alpha05 版
2020 年 10 月 14 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha05
。1.0.0-alpha05 版包含此連結所列的修訂項目。
API 變更
- 新增用於指定檢查器資訊的 DSL (Ic9a22)
- 將 LongPress 移到文字中。(Iff2bc)
- 實驗性 Modifier.pointerInput 暫停輸入修飾詞 (Ia77d2)
- 新增了複製/貼上/剪下這三種無障礙操作 (I6db4f)
- 移除 AndroidOwner 的公開建構函式 (Iacaef)
- 彈出式視窗和對話方塊現在會沿用父項視窗的 FLAG_SECURE。另外也新增了可明確設定這個標記的選項 (I64966、b/143778148、b/143778149)
耗用資料現已變動。此外,呼叫這些耗用的擴充功能函式現在不會再傳回新的 PointerInputChange,而是會變更所提供的 PointerInputChange。
開放變更 PointerEvent 資料的步驟有 2 個,這是第一個步驟,能讓使用者程式碼無法編輯其他指標資料。第二個步驟是從
PointerInputFilter.onPointerEvent(...)
移除List<PointerInputChange>
傳回類型 (Id067e)。停用 Text 中的 Selection 和 Demo。(Ie7e97)
Made on 全域定位內嵌函式 (I15830)
分別將 OnPositionedModifier 和 onPositioned() 重新命名為 OnGloballyPositionedModifier 和 onGloballyPositioned() (I587e8、b/169083903)
為擁有者新增了 hasPendingMeasureOrLayout 屬性,指出擁有者是否有任何待處理的版面配置工作。(I3d9f8、b/169038599)
新增了 API 來透過程式清除焦點 (Ie1dc2、b/161487952)
移除了
PointerInputFilter.onPointerInput(...)
。並應改用PointerInputFilter.onPointerEvent(...)
。(I6f04a)大小調整
- 移除了 size.getFlipped
- 移除了 size.rem
- 移除了 size.truncDiv (Ief44d、b/169790720)
在內嵌類別標記值的標準化過程中,將 Color.Unset 重新命名為 Color.Unspecified,以便與其他內嵌類別保持一致 (I97611、b/169797763)
加入 TextOverflow.None。溢位為 None 時,Text 不會再處理溢位,而是向 LayoutNode 回報實際尺寸 (I175c9、b/158830170)。
AnnotatedString.Builder.addStringAnnotation 中的範圍參數已重新命名為代碼,以便維持 API 一致性。(I7c8cb)
修正錯誤
- 透過減少每次捲動時子組合中的工作量,改善了 LazyColumn/Row 的捲動效能。為組合類別新增了 hasInvalidations() 方法,並將重組工具的 hasPendingChanges() 方法重新命名為 hasInvalidations() (Ib2f32、b/168293643、b/167972292、b/165028371)
- 將 size.Unspecified 的參數更新為 Float.NaN,而非 Float.POSITIVE_INFINITY。更新了 Painter 實作方式,以檢查 Size.Unspecified 和非有限大小 (I95a7e)。
- 自訂版面配置中的 place() 呼叫順序現在會定義子項的繪製順序 (Ibc9f6)
- 支援將 AnnotatedString 轉換成 SpannableString,以提供無障礙功能。(Ief907)
- 為較舊平台上的 Android 類別新增虛設常式,以盡可能避免使用倒影。(Ia1790)
- 修正的錯誤:如果顯示的螢幕鍵盤導致應用程式平移,指標輸入座標將變得不正確。(Ic4cec、b/163077821)
1.0.0-alpha04 版
2020 年 10 月 1 日
發布 androidx.compose.ui:ui-*:1.0.0-alpha04
。1.0.0-alpha04 版包含此連結所列的修訂項目。
API 變更
- 新增了 OwnerScope,以便收集已失效的版面配置和繪圖觀測範圍 (Ic4cf8)
- 新增了 OnRemeasuredModifier 和 onSizeChanged(),可分別用於在內容版面配置完成重新測量時及大小有變動時接收回呼。(I657cf、b/154108792)
- 新增長按語意操作 (I6281b、b/156468846)
- 將 FocusManager 設為不公開。(I7872f)
將實作方式更新為建立專屬的 DrawCacheModifier 實作,而不是在 DrawModifier 中加入選用屬性。
更新了各種方法的說明文件 (Ibd166)
將 TextRange 設定為內嵌,避免建立物件。(Id034b)
無法再從自訂版面配置的刊登位置區塊讀取 PlacementScope#parentWidth 和 PlacementScope#parentLayoutDirection。(Icc1ae、b/168295623)
將 AccessibilityScrollState 新增至語意屬性。(Ifeda9)
推出 Modifier.drawWithCache 來支援建立繪圖物件,該物件會有條件地重新建立依附於大小/狀態資訊的依附元件 (I376dc)
移除了 ParagraphConstraints。寬度現在會直接傳遞至 Paragraph (Ica712)。
修正錯誤
- 更新了多個圖形 API
- 更新縮放和旋轉功能的轉換 API,改用單一 Offset 參數代表樞紐座標,而非使用 DrawScope 和 DrawTransform 中 x/y 座標的個別浮點參數
- 移除了 Rect.expandToInclude 和 Rect.join 方法
- 更新 Radius 說明文件,一併介紹橢圓形和卵形
- 新增說明文件,指出無須直接呼叫內嵌 Radius 類別的公開建構函式,而是應該透過函式建構函式將 Radius 物件例項化
- 移除了用於查詢 topRight、bottomRight、bottomCenter 等的 roundRect API
- 淘汰了 Rect.shift,改用 Rect.translate
- 移除了 RoundRect.grow 和 Rect.shrink API
- RoundRect.outerRect 已重新命名為 Rect.boundingRect
- 移除了 RoundRect.middleRect/tallMiddleRect/wideMiddleRect 和 Rect.isStadium 方法
- 已將 RoundRect.longestSide 重新命名為 RoundRect.maxDimension
- 已將 RoundRect.shortestSide 重新命名為 RoundRect.minDimension
- 已將 RoundRect.center 變更為屬性,而非函式
- 將 RoundRect 建構函式更新為使用 Radius 屬性,而非 x/y 半徑值的個別參數
- 移除了 Size API,假設其為原點 0,0 的矩形
- 在 Radius 中新增銷毀 API
- 將各種 RoundRect 擴充功能函式移轉為屬性
- (I8f5c7、b/168762961)
- foundation.Box 已淘汰,請改用 foundation.layout.Box。(Ie5950、b/167680279)
- 將 Stack 重新命名為 Box。我們將淘汰原本已有的 Box,改用 compose.foundation.layout 中的新 Box。新 Box 會在擁有多個子項時,將子項逐一向上堆疊,這個行為模式與舊 Box 不同,舊版的行為類似於 Column (I94893、b/167680279)。
- 淘汰了 Box 裝飾參數。如要為方框加上裝飾/邊框間距,請改用 Modifier (Modifier.background、Modifier.border、Modifier.padding) (Ibae92、b/167680279)
- 更新了多個圖形 API
- 更新了具有限定範圍轉換方法的 DrawScope API,指出轉換作業僅適用於回呼內部,在叫用回呼後就會移除
- 已將 clipPath 說明文件更新為參照路徑,而不是圓角矩形
- 已固定說明文件在 clipPath 中正確的參數
- 已將 DrawScope.drawCanvas 重新命名為 DrawIntoCanvas 和已移除的大小參數
- 將 inset 方法中的 dx/dy 參數重命名為水平和垂直
- 新增插邊超載,為 4 個邊界全都提供相同的插邊值
- 移除了 inset 方法的說明文件,指出插邊將會套用至所有 4 邊
- 更新了 Rect 類別的說明文件
- 更新了關於 Rect 參數的評論以符合 kdoc 樣式
- 移除了 Rect.join 和 Rect.expandToInclude
- 已為 Rect.translate(offset) 和已淘汰的 Rect.shift 建立超載。
- (If086a、b/167737376)
- 為 rootAnimationClockFactory、transitionsEnabled 和 textInputServiceFactory 加上 @VisibleForTesting 註解,將其設為內部 API 並隱藏其 kdoc (I554eb,b/168308412)
- 將 SelectContainer 從 Top 中移除,以停用預設選項並避免出現非預期行為。您可以特別使用 SelectContainer 來包裝需要選取的內容。(I8dfe0、b/158459594)
1.0.0-alpha03 版
2020 年 9 月 16 日
發布了 androidx.compose.ui:ui-*:1.0.0-alpha03
。1.0.0-alpha03 版包含此連結所列的修訂項目。
API 變更
- 移除向前/向後語意語意。已在 AccessibilityRangeInfo 中新增步驟。(Ia47b0)
- 已從
Owner
中移除onInvalidate()
-OwnedLayer
會處理無效判定。(Ica72b、b/162061312) 移除了大小量 API 中採用偏移參數的運算子。這些作業的結果不明,所以這些結果的類型不是預期。例如:大小 - 偏移能否傳回偏移值或差額?
另外也移除大小類別中已淘汰的方法。(Iec902、b/166514214)
修正錯誤
- 修正 LazyColumn 項目有時會出現錯誤繪製的情況,在某些情況下這也會導致當機。(Ibcf17、b/163066980、b/165921895)
- 淘汰了 DpConstraints 和使用該項目的 API。(I90cdb、b/167389835)
- 已將
createAndroidComposeRule
和AndroidInputDispatcher
從androidx.ui.test.android
移至androidx.ui.test
(Idef08,b/164060572) - 已將版面配置 API 中使用的 gravity 一致重新命名為 align 或 alignment (I2421a、b/164077038)。
- 已在 ComposeTestRule 中加入 onNode 和其他全域方法,因為目前的全域方法即將淘汰。(Ieae36)
1.0.0-alpha02 版
2020 年 9 月 2 日
發布了 androidx.compose.ui:ui-*:1.0.0-alpha02
。1.0.0-alpha02 版包含此連結所列的修訂項目。
API 變更
- 移除回呼,在版面配置節點邊界變更時通知擁有者。(If654e、b/166106882)
- 為向量圖形路徑新增了 filltype 參數支援,以便依據 evenOdd 或 NonZero 路徑填滿規則挖剪形狀。(I43dd2)
- 運作時間與速度現已變成內嵌類別 (I48f4a)
- 時間長度現在是內嵌類別 (I565eb)
- 新增回呼,在版面配置節點邊界變更時通知擁有者。(Ic40b3)
針對設有 Offset 和半徑的 Rect 函式建構函式,修正了其建立 Rect 時會遵循左、右、上、下順序,而非左、上、右、下順序的問題。
移除了 Rect 中已淘汰的隨附物件方法,改用函式建構函式。
新增了在 Rect.kt 中驗證方法的測試 (I08460、b/165822356)
修正錯誤
- 新增了 MutableRect 這個可以修改的矩形。(I71bd2、b/160140398)
- Matrix4 已由 Matrix 取代。已移除 vectormath 套件的所有其他部分 (Ibd665、b/160140398)。
變更了可組合函式的呼叫慣例。這是二進位檔破壞性變更。所有程式庫都必須重新編譯,才能與這個版本的 Compose 編譯器外掛程式搭配使用。
這項變更不會對原程式碼層級產生重大影響,因為只有已變更的 API 屬於明確選擇啟用的編譯器 API。(I7afd2、b/158123185)
修正了分派到 PointerInputFilter 時可能發生的當機情形,這項分派行為可能導致 PointerInputFilter 同步遭到移除。(I58f25)
1.0.0-alpha01 版
2020 年 8 月 26 日
發布了 androidx.compose.ui:ui-*:1.0.0-alpha01
。1.0.0-alpha01 版包含此連結所列的修訂項目。
0.1.0-dev 版
0.1.0-dev17 版
2019 年 8 月 5 日
發布了 androidx.compose.ui:ui-*:0.1.0-dev17
。0.1.0-dev17 版包含此連結所列的修訂項目。
API 變更
emitView
已淘汰。請盡可能使用AndroidView
,在 Compose 中產生 View。請注意,系統日後將不再支援直接組合 View 和 ViewGroup 的做法,除非這是組合樹狀結構的一部分,且能透過 AndroidView 完成這項作業 (I29b1e、b/163871221)。FocusState2
已淘汰,並由FocusState
取代 (Ia8b79、b/160822876、b/160923332)- 我們淘汰了已移除的 AndroidView 超載。(I946b9、b/163802393)
- 自訂輸出項目現在可以宣告將其一或多個 setter 設為可略過,並在該輸出項目外獨立進行重組。(Ibbd13)
變更後的向量類別不再是資料類別,因為相同的物件執行個體會用於組合。
為 VectorPainter 新增了 mutableStateOf 標記,以便在向量內容變更時依條件重新繪製。
將 VectorComponent 執行個體重構為 VectorPainter 的一環,因為這會在不同組合中重複使用。
將 GroupComponent 和 PathComponent 更新為可變動的名稱欄位 (Ieae45、b/151378808)
移除了
onChildPositioned
和OnChildPositionedModifier
。開發人員應改為在子版面配置使用onPositioned
和OnPositionedModifier
(I4522e、b/162109766)Offset 現在是內嵌類別 (Iaec70)
將 modifier 參數新增至 SelectionContainer (I4aada、b/161487952)
移除了已淘汰的 FocusModifier (I0b4ba、b/160922116、b/160821157、b/162441435、b/160822875、b/160921940)
已將
mergePolicy
lambda 新增至SemanticsPropertyKey
。這可用於定義 mergeAllDescendants 語意合併的自訂政策。根據預設政策,如果有父項值,就會直接使用父項值;如果沒有,則使用子項值 (Iaf6c4、b/161979921)。限制條件現已改為內嵌類別 (I88736)
新增了 FocusManager,將常見的焦點邏輯移出 AndroidComposeView (I528ef、b/161487952、b/162206799)
更新了 Alpha 版的 PointerEventPass 名稱。(Ifda6f)
IntOffset 現已改名為內嵌類別 (Iac0bf)
IntSize 現已改名為內嵌類別 (I2bf42)
將
PlacementScope.placeAbsolute()
重新命名為PlacementScope.place()
,而原先的PlacementScope.place()
則重新命名為PlacementScope.placeRelative()
。因此,PlacementScope.place()
方法不再以由右至左的結構定義自動鏡射位置。如果需要這個方法,請改用PlacementScope.placeRelative()
。(I873ac、b/162916675)。AlertDialog 現在為按鈕使用 FlowRow (I00ec1、b/161809319、b/143682374)
將部分測試公用程式設為非公開,因為這些工具不在其所在位置。日後會公開顯示。(I32ab1)
已重構指標輸入代碼的結構。(Ie3f45)
淘汰了 PxBounds,改用 Rect。以 Rect 更新所有 PxBounds 使用情況,並透過註解加入適當的淘汰/取代作業,協助完成遷移 (I37038、b/162627058)。
移除了已淘汰的 KeyEvent2。請改用 KeyEvent。(Ied2d0、b/162097587)
KeyEvent 有一個萬國碼 (Unicode) 屬性,可用於取得指定鍵和中繼鍵狀態組合所產生的萬國碼字元 (If3afc)
將 DelayUp 自訂事件和相關類別設為選擇性 API,因為這很可能會變更。(I56d6f)
移除了 2 個不再需要的 PointerEventPass。(I3dd9d)
將參數顏色、陰影和 TextDecoration 新增至 Paragraph.paint。這個函式可以避免不必要的段落擷取作業。(I81689)
修正錯誤
- 已從 TextField 移除 onFocusChanged 回呼。請改用 Modifier.focusObserver。(I51089、b/161297615)
- 已淘汰 Modifier.drawBorder。請改用 Modifier.border。Border 資料類別已由 BorderStroke 取代 (I4257d,b/158160576)
移除了已淘汰的 FrameManager 呼叫。
內部的 Compose API 經過變更,可減少追蹤狀態物件 (例如
mutableStateof()
) 的負載量 (I80ba6)移除了 VerticalScroller 和 HorizontalScroller。請改用捲動式資料欄/資料列。已移除 Modifier.drawBackground。使用 Modifier.背景 (I73b0d、b/163019183)
修正了將可儲存狀態的項目用於 for 迴圈時發生的異常終止問題。現已支援在 savedInstanceState() 中使用相同的鍵,並已根據這項新要求調整 UiSavedStateRegistry 的 API (I4ab76、b/160042650、b/156853976、b/159026663、b/154920561)
state { ... }
可組合項現已淘汰,改為明確呼叫remember { mutableStateOf(...) }
以求一目瞭然。這樣可以減少管理狀態所需的整體 API 介面和概念數量,且符合類別屬性委派作業的by mutableStateOf()
模式。(Ia5727)將 RRect 重新命名為 RoundRect,以更符合 Compose 命名模式。另外也建立了與 RRect 類似的函式建構函式,並淘汰了 RRect 函式建構函式 (I5d325)
0.1.0-dev16 版
2020 年 8 月 5 日
發布了 androidx.compose.ui:ui-*:0.1.0-dev16
。0.1.0-dev16 版包含此連結所列的修訂項目。
API 變更
- 淘汰了 OnChildPositioned,請改用子項的 OnPositioned (I87f95、b/162109766)。
- 淘汰了 setViewContent,應改用 setContent。(I7e497、b/160335130)
- 新增了 AndroidViewBinding API,以根據 ViewBinding 加載及組合版面配置資源。(I081c6)
- KeyEvent2 已由 KeyEvent (I2d770、b/162097585) 取代
- 新增了 Alt 硬體金鑰支援 (I9036b)
- FocusManager 已淘汰。請改用 Modifier.focus()、Modifier.focusObserver() 和 Modifier.focusRequester()。(I74ae4、b/162211322)
- loadVectorResource 支援 trimPath 屬性 (I808fe)
- 將對話方塊移至 ui (I47fa6)
- 移除了 2 個不再需要的 PointerEventPass。(I33ca7)
- 實作 PointerInteropModifier 可讓您接收 MotionEvents 並與 Compose 互動,就像您導入 Android View 一樣。(Ieb08c)
- 移除了已淘汰的標記修飾詞。請改用 layoutId。(Idaa05、b/162023919)
- 更新了支援由右至左書寫的 API。新增了 LayoutDirectionAmbient,可用於讀取及變更版面配置方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3)
- 支援減少向量圖形的路徑 (Ie16c9、b/158188351)
- 新增了 Modifier.layout(),方便您建立自訂版面配置調節係數 (I73b69、b/161355194)
- 推出了新的 AndroidView API,並淘汰了現有的 API。(I5bcfd)
- 淘汰了 Modifier.plus,請改用 Modifier.then。「Then」可以更明確地指出先後順序,同時也禁止輸入會破壞鏈結且降低可讀性的
Modifier.padding().background() + anotherModifier
(Iedd58、b/161529964) - 新增 [Abstract]ComposeView View 子類別,以託管在 View 階層中的 Compose 內容。(I46357)
Row
和Column
現在是內嵌函式,可大幅減少使用這些項目的負擔。(I75c10)- 新增了 SubcomposeLayout。這是一種低階原始物件,如果我們想要使用僅在測量子樹狀結構組合後期可用的某些值,便可利用這個原始物件在測量期間組合子項。例如 WithConstraints 不會使用 SubcomposeLayout 導入 (I25cc8)。
- 新增了
SemanticsNode.positionInRoot
,可用於取得 SemanticsNode 相對於 Compose 根階層的位置 (Icdf26、b/161336532) - MotionEvents 一路從 Android 傳遞到 Compose,然後再傳回 Android 中。(I14be8、b/158034713)
- 移除了 dropdownPopup。(I00430)
- 修正了挖剪式顯示區中的彈出式視窗位置。(Idd7dd)
- 新增無障礙動作以取得 TextLayoutResult (I9d6e6)
- 新增了 RemeasurementModifier。可同步重新評估版面配置。這通常不會用到,因為重新測量/重新版面配置會自動執行,不過在捲動過程中,我們會在 LazyColumnItem 內用到此項目。(I5f331、b/160791058)
- 移除 getLineEllipsisOffset/getLineEllipsisCount。請改用 getLineVisibleEnd/getLineEnd/isLineEllipsized。(I85aa2)
- 新增一些標記/註解做為最佳做法。(I66b20)
- 在 TextLayoutResult 中顯示更多行 API。(I79bd2)
- 用來轉換內建單位的內建向量轉換工具現可透過 Foo.VectorConverter 存取,例如 Dp.VectorConverter、Color.VectorConverter、Float.VectorConverter 等 (I3e273)
修正錯誤
- 解決廣泛的 API 問題 (I077bc)
- 移除未使用的 OffsetBase 介面
- 對齊 Offset 和 IntOffset 類別,以便採用一致的 API 介面
- 將 IntOffset.Origin 重新命名為 IntOffset.Zero,使其與 Offset API 一致
- 已將 nativeCanvas 方法從 Canvas 介面移出,以支援取用端建立自己的 Canvas 執行個體
- 建立了虛設常式 EmptyCanvas 類別,藉此將 DrawScope 重構為非空值參數 (而不是 lateinit),並確保該欄位不可為空值
- 已將 ClipOp 列舉重新命名為 Pascal 案件
- 已將 FilterQuality 列舉重新命名為 Pascal 案件
- 已將 StrokeJOIN 列舉重新命名為 Pascal 案件
- 已將 PointMode 列舉重新命名為 Pascal 案件
- 已將 PaintingStyle 列舉重新命名為 Pascal 案件
- 已將 PathFillType 列舉重新命名為 Pascal 案件
- 已將 StrokeCap 列舉重新命名為 Pascal 案件
- 更新 DrawCache 實作方式,不再使用 lateinit 參數
- 更新 DrawScope,不再讓 fillPaint 和 strokePaint 內部參數使用延遲委派功能
- 更新 Image 可組合項,避免使用 Box 並降低負擔
- 將 Outline 類別更新為包含 @Immutable 註解
- 將 PathNode 更新為包含各個路徑指示的 @Immutable 註解
- 由於撰寫作業已經完成,更新向量分子,移除等式的多餘性檢查
- 淘汰 Rect 隨附建構函式方法,改用函式建構函式
- 已使用 @Immutable 和 @Stable API 更新 Brush 類別和函式建構函式
- 已將 VertexMode 列舉更新為 PascalCase
- 更新 DrawScope selectPaint 方法,有條件地覆寫 Paint 的筆劃參數 (如果這些項目有所變更)
- 更新了 Size 來新增解構 API、將 UnspecifiedSize 重新命名為 Unspecified,以及移除未使用的方法
- 更新了撰寫的 BlendMode API 使用量,根據 API 層級,在 Android 架構 BlendModes 和 PorterDuff 模式之間正確對應。引進 BlendMode#isSupported API 做為功能查詢,確認裝置在使用前是否支援 BlendMode。(I0ef42)
- 已為 Lazy 清單的 itemContent 參數新增 LazyItemScope。這可提供修飾符來填滿父項大小上限,解決以下用途問題:項目應填滿可視區域,但因該項目的測量限制為無限,導致一般 Modifier.fillMaxSize() 無法運作 (Ibd3b2、b/162248854)。
- 移除了
SemanticsNodeInteraction.performPartialGesture
。請改用SemanticsNodeInteraction.performGesture
(Id9b62)。 LazyColumnItems
已重新命名為LazyColumnFor
。LazyRowItems
已重新命名為LazyRowFor
(I84f84)foundation.shape.corner
套件已分割為foundation.share
(I46491、b/161887429)AndroidComposeTestRule
已重新命名為createAndroidComposeRule
。(I70aaf)- 已將更多 API 新增至
TextLayoutResult
。(Id7e04) - 素材
FilledTextField
已重新命名為TextField
,基礎TextField
已重新命名為BaseTextField
,以方便尋找及使用 (Ia6242、b/155482676) - Modifier.draw 背景 已重新命名為 Modifier.background (I13677)
0.1.0-dev15 版
2020 年 7 月 22 日
發布了 androidx.compose.ui:ui-*:0.1.0-dev15
。0.1.0-dev15 版包含此連結所列的修訂項目。
依附元件更新
- 如要使用
0.1.0-dev15
版的 Compose,您必須依據上方「宣告依附元件」一節所示的新程式碼片段更新依附元件。
API 變更
- 淘汰了 FocusModifier,改用 Modifier.focus、Modifier.focusRequester、Modifier.focusObserver。淘汰了 FocusState 和 FocusDetailsState,改用 FocusState2 (I46919,b/160822875、b/160922136)
- 新增了觀測焦點狀態變更的修飾詞。(I05866、b/160924455、b/160923326)
- 新增了修飾詞以要求變更焦點 (I8dd73、b/161182057、b/160924778)
- 調整工具列選單,以正確顯示複製、剪下、貼上字樣。(Id3955)
- 單一值語意屬性現在使用呼叫樣式。舉例來說,「semantics { hidden = true }」現在會寫為:
semantics { hidden() }
(Ic1afd、b/145951226、b/145955412)。 - 新增了 Modifier.focus,這會取代 FocusModifier。(Ib852a、b/160924778)
- 為 TextField Selection 新增 FloatingToolbar。(Ie8b07)
- 為金鑰輸入相關 API (I53c0a) 新增實驗性 API 註解
- 已為所有 Focus 相關的 API 新增實驗性 API 註解 (I53b24、b/160903352)
- 新增的 FocusState2 將取代 FocusDetailsState (I0a3ba、b/160822595)
- 新增了 ExperimentFocus,此為 Focus API 的 @OptIn 註解。(I1544b、b/160820961)
- 新增了 IntBounds 單位類別,代表版面配置中的整數像素邊界。PopupPositionProvider 的 API 已更新,以便使用這個類別。(I0d8d0、b/159596546)
- Applier 現在必須使用 clear() 方法來棄置組合 (Ibe697)
- KeyEvent 已淘汰,並由 KeyEvent2 取代 (I68730)
- 為測試搜尋工具新增了一個選用標記 useUnMergedTree。(I2ce48)
- Made LayoutNode 實驗功能 API (I4f2e9)
為各種內嵌類別類型新增複製方法,包括:
- Offset
- Size
- Radius
- Motion
TransformOrigin
淘汰了 Size.copy 這個隨附物件方法,改用執行個體複製方法 (Ife290、b/159905651)
彈出式視窗、對話方塊和選單現在可以沿用相關 MaterialTheme (Ia3665、b/156527485)
TextDirection 已重新命名為 ResolvedTextDirection (I3ff38)
從 Layout() 函式的測量區塊移除了版面配置方向參數。不過,在回呼內可透過測量範圍物件取得版面配置方向 (Ic7d9d)
重構用於 SelectR 來重複使用。(I420e0)
移除了 Clickable。使用 Modifier.clickable (I84bdf)
刪除了 TestTag 和 Semantics。請改用 Modifier.testTag 和 Modifier.semantics (I15ff0、b/158841414)
在這項變更前,如果有輸出運算子,Compose 編譯器外掛程式會以非隨意的方式,攔截對 @Composable 函式所含建構函式的呼叫 (I5205a、b/158123804)
Modifier.tag 已重新命名為 Modifier.layoutId,以避免與 Modifier.testTag 混淆。(I995f0)
從 Placeable#get(AlignmentLine) 傳回的對齊線 Int 位置現在不可為空值。如果缺少查詢的對齊線,就會傳回 AlignmentLine.Unspecified (I896c5、b/158134875)。
AndroidView 可組合項已新增修飾詞參數。(I48a88、b/158746303)
淘汰了 Semantics()。請改用 Modifier.semantics()。(I72407、b/158841414)
新增 viewModel() 可組合項,依據類似在「活動」或「片段」中的方式來建立 ViewModel,或取得已經建立的 ViewModel (I5fdd1)
以 Int 取代使用 IntPx,並以 IntOffset 取代 IntPxPosition。將 IntPxSize 替換成 IntSize。(Ib7b44)
為了整合用於呈現調整大小資訊的類別數量,請將 Size 類別 (而非 PxSize) 的使用方法進行標準化。這樣就能使用內嵌類別,利用一個長整數封裝 2 個浮點值,呈現以浮點表示的寬度和高度 (Ic0191)
為了整合用於呈現地點資訊的資訊類別數量,請將偏移量類別 (而非 PxPosition) 的用量標準化。這樣就能使用內嵌類別,利用一個經度封裝 2 個浮點型數值,呈現以浮點數表示的 x 和 y 偏移量。(I3ad98)
我們進行了大規模重構作業,包括將各種 compose 類別中使用的 Px 類別改為只使用 Dp 和原始類型來處理像素參數。Px 類別也已完整刪除 (I3ff33)
我們進行了大規模重構作業,包括將各種 compose 類別中使用的 Px 類別改為只使用 Dp 和原始類型來處理像素參數 (I086f4)
我們進行了大規模重構工作,其中一部分是將在各種組合中使用 Px 類別來處理像素參數,更換成只使用 Dp 和基本類型 (Id3434)
我們進行了大規模重構作業,包括將各種 compose 類別中使用的 Px 類別改為只使用 Dp 和原始類型來處理像素參數 (I97a5a)
TestTag 現已淘汰。請改用 Modifier.testTag。(If5110、b/157173105)
我們已移除 ParentDataModifier#modifyParentData 的預設執行動作,這與一開始沒有實作介面的功能相同。(I0deaa)
移除了先前已淘汰的 ScaleFit。請改用 ContentScale。(Ifbc5b)
我們進行了大規模重構作業,包括將各種 compose 類別中使用的 Px 類別改為只使用 Dp 和原始類型來處理像素參數 (I19d02)
在 ui-material 中新增了 DropdownMenu 元件,此為 Material Design 選單實作。(I9bb3d)
移除了已淘汰的 LayoutTag(),請改用 Modifier.tag()。移除了已淘汰的 Modifier.matchParent(),請改用 Modifier.matchParentSize()。(If8044)
我們進行了大規模重構作業,包括將各種 compose 類別中使用的 Px 類別改為只使用 Dp 和原始類型來處理像素參數 (I57bff)
我們已取消淘汰 Modifier.semantics,並允許使用高階元件 (I4cfdc)。
整合 CanvasScope 實作項目,因此現在 DrawScope 和 ContentDrawScope 重新命名為 CanvasScope 重新命名為 DrawScope。更新了 DrawScope 來實作 Density 介面,並提供 LayoutDirection。刪除 ContentDrawScope 中的 DrawScope 子類別。Painter 和 PainterModifier 已更新為不再自行維護 RTL 屬性,因為 DrawScope 已有此功能,不必手動設定 (I1798e)
DoubleTapGestureFilter 現可於不同的樹狀結構中區分 SingleTapGestureFilter。(If92b1)
更新了 Alignment API 並新增了絕對對齊支援 (在 Rtl 環境中不會自動提供鏡像) (I38cd3)
變更了 DrawLayer 修飾符 API:outlineShape 已重新命名為 shape,採用 RectangleShape 做為預設值,而且現在不可設為空值;clipToOutline 已重新命名為 clip;移除了 clipToBounds,原因是其等同於 RectangleShape 的 clip == true (I7ef11,b/155075735)
更新了較高階的 Compose API,讓 Canvas 改為顯示 CanvasScope。如此一來,取用者就不必維護自己的 Paint 物件。如果取用者仍要求 Canvas 存取權,則可以使用 drawCanvas 擴充功能方法,這種方法可提供回呼,透過基礎 Canvas 發出繪圖指令 (I80afd)。
WithConstraints 結尾的 lambda API 已變更。我們現在以接收器範圍取代原本的兩個參數,除了 constraints 與 layoutDirection 之外,還提供 Dp 中的 minWidth、maxWidth、minHeight 和 maxHeight 屬性 (I91b9a、b/149979702)
已將 LayoutModifier2 重新命名為 LayoutModifier。(Id29f3)
移除已淘汰的 LayoutModifier 介面 (I2a9d6)。
Layout 和 LayoutModifier2 中的內建測量函式現在設有 IntrinsicMeasureScope 接收器,可提供附有隱性傳播版面配置方向的內建函式查詢 API。(Id9945)
Layout 和 LayoutModifier 子項能夠以不同的版面配置方向測量。(Ibd731)
新增了 Modifier.zIndex() 來控制同一個上層版面配置的子項繪製順序。DrawLayerModifier 的 elevation 屬性已重新命名為 shadowElevation,不再控制繪製順序。變更了 DrawShadow 的參數順序:elevation 現在的順序為第一個,shape 為第二個並採用 RectangleShape 做為預設值 (I20150、b/152417501)。
移除了擁有者的 onSizeChange 和 onPositionChange。(I5c718)
新增了 Constraints2 副本,該副本僅支援 Int Connstraints 值,不支援 IntPx。系統將會移除 IntPx,並假設所有整數限制都是 Android 等像素。
- 同時新增 IntSize,最終會取代 IntPxSize。(I4b43a)
已將 Alignment 設為能以任意值實例化。新增了 1D Alignment。(Ia0c05)
alignToSiblings 現在可接受 Measured 而非 Placeable。(I5788d)
-
- 已將 ScaleFit 重新命名為 ContentScale
- 將 ContentScale 從 ui-graphic 移至 ui-core 模組,然後移至與 Edge API 相同的模組。
- 已將 ReMaxMax 重新命名為 裁剪
- 已將 MinMinDimensions 重新命名為 Fit
- 將 Fit 重新命名為 Inside
- ImageView.ScaleType 對應項
- 新增了說明文件,指出 Crop 和 Alignment.Center 的組合可達到與 ImageView.ScaleType.CENTER_CROP 相同的結果,而 Fit 與 Alignment.Center 搭配使用時,可達到與 ImageView.ScaleType.FIT_CENTER 相同的結果。Inside 與 Alignment.Center 搭配使用時,則可達到與 ImageView.ScaleType.CENTER_INSIDE 相同的結果
Rtl 支援繪製修飾符。(I0aaf9)
推出新的 API,從 XML 加載 Android 資料檢視。詳情請參閱 ViewInCompose 示範。(I42916)
改善 DrawModifier API:
- 已設定 Draw() ContentDrawScope 的接收器範圍
- 移除了 Draw() 的所有參數
- DrawScope 的介面與之前的 CanvasScope 介面相同
- ContentDrawScope 含有 DrawContent() 方法 (Ibaced、b/152919067)
為 LayoutCoordinates 新增了 positionInParent 和 boundsInParent。(Icacdd、b/152735784)
DrawLayerModifier 和 drawLayer() 現已預設 clipToBounds 和 clipToOutline 為 false。(I0eb8b、b/152810850)
已將 LayoutResult 重新命名為 MeasureResult。(Id8c68)
新增了用於定義版面配置修飾符的 API LayoutModifier2,並淘汰 LayoutModifier (If32ac)
將修飾符和運算子替換成工廠擴充功能函式 (I225e4)
新增了 TranslationX/Y 屬性,以補償特定圖層的繪圖指令顯示清單。因應動畫或觸控事件來移動內容時,這項功能就能派上用場。(I8641c)
在 Layer API 中新增了 PivotX 和 PivotY 參數,以支援在圖層上的特定位置旋轉及調度資源 (Icf7c3)
新增 OnPositionedModifier 和 OnChildPositionedModifier,以取代 OnPositiond 和 OnChildPositioned 可組合函式。(I2ec8f)
新增了 LayerModifier 這個修飾符,可為版面配置新增 RenderNode。可讓您設定剪輯、不透明度、旋轉、縮放和陰影。這將取代 RepaintBoundary。(I7100d、b/150774014)
將版面配置方向設為從上層版面配置節點往子項傳播。新增了版面配置方向修飾符 (I3d955)。
堆疊元件支援從右至左方向性 (Ic9e00)
在 Compose 版面配置中提供 Rtl 初始支援 (Ia5519)
Density 和 DensityScope 已合併至單一介面。現在可以使用 DensityAmbient.current 取代 EnvironmentDensity()。使用 with(density) 取代 withDensity(density) (I11cb1)
變更了 LayoutCoordinates,將 providedAlignmentLines 設為 Set (而非 Map),同時讓 LayoutCoordinates 導入 get() 運算子,而不是擷取一個值。這樣一來,修飾符就能輕鬆修改組合的一或多個值,而不必為每個修飾符建立新的集合 (I0245a)
LayoutCoordinates 已不再具備位置屬性。考慮使用 LayoutModifiers、旋轉或資源調度時,排名屬性並不合理。開發人員應改用 parentCoordinates 和 childToLocal() 計算 oneLayoutCoordinate 之間的轉換。
LayoutCoordinates 使用 IntPxSize 做為大小屬性,而非 PxSize。Layout 會使用整數像素大小設定版面配置,因此所有版面配置大小都應使用整數,而不是浮點值 (I9367b)。
改善限制的 API 介面 (I0fd15)
建立 CanvasScope API,以便納入 Canvas 物件以顯示無狀態、宣告式繪圖 API 介面。變形作業侷限在其本身的接收器範圍內,大小調整資訊的範圍也對應插邊的邊界。不需要讓取用端保有自己的 Paint 狀態物件來設定繪圖作業。
- 新增了 CanvasScopeSample 並更新了試用版應用程式,以納入宣告式圖形示範 (Ifd86d)
移除了未使用的 MaskFilter API,原因是該 API 的用途有限,且在大多數應用實例中皆未針對硬體加速完成最佳化 (I54f76)
RectangleShape 已從 androidx.ui.foundation.shape.* 移至 androidx.ui.graphics.* (Ia74d5、b/154507984)
已將 API 中所用可為空值的 Color 全部改為不可為空值,並使用 Color.Unset 取代空值 (Iabaa7)
為 ImagePainter 推出其他選用矩形參數,以支援繪製基礎 ImageAsset 的子區段 (I0ea9e)
新增了「未設定顏色」,代表不設定方塊的顏色。(If901a)
新增了 Canvas.rotate 和 Canvas.scale 擴充功能,用以執行轉換作業的選用資料座標。這些會預設成目前畫布平移的左上角。
也將 Canvas.rotateRad 移至擴充用的一致性方法 (Ibaca6)
建立 PixelMap API 來支援 ImageAsset 查詢像素資訊 (I69ad6)。
將 toFrameworkRect/toFrameworkRectF 重新命名為 toAndroidRect/toAndroidRectF,以符合在 compose 和 Android 架構 API (其會以此為基礎進行建構) 之間的物件轉換命名慣例。也更新了這些 API 的說明文件 (I86337)
新增了 VectorPainter API,取代向量圖形的現有子組合 API。子組合的結果是 VectorPainter 物件,而非 DrawModifier。已淘汰先前的 DrawVector 可組合項,改用 VectorPainter。
將 Image(Painter)API 重新命名為 PaintBox(Painter) 已建立 Vector 可組合項,其行為類似 Image 可組合項,但改用 VectorAsset 而非 ImageAsset (I9af9a、b/149030271)
將 Image 重新命名為 ImageAsset,以進一步區分 Image 資料與即將推出並用於參與版面配置及繪製內容的 Image 可組合項。在 android.graphics.Bitmap、Bitmap.asImageAsset() 上使用 _Body:Created 擴充功能方法,可用於建立 ImageAsset 執行個體,協助結合傳統的 Android 應用程式開發與 Compose 架構 (Id5bbd)
新增了 TextDirection.Content (I48f36)
新增了 TextDecoration.plus 運算子 (I0ad1a)
將
Force
從 TextDirectionAlgorithm 列舉值中移除 (Icc944)TextDirectionAlgorithm 已重新命名為 TextDirection (I75ce8)
針對 TextField Selection 實作 LongPressAndDrag。(I17919)
新增了 AnnotatedString.getStringAnnotations,用來傳回範圍內的所有註解。(I1fa00)
將 Locale 和 LocaleList 的套件名稱從 變更為 androidx.ui.text 到 androidx.ui.intl (I8132c)
TextField 的游標有閃爍的動畫 (Id10a7)
API 變更:AnnotatedString(builder: Builder) 已重新命名為 annotationdString(builder: Builder)。(Ia6377)
API 變更:AnnotatedString.Item 已重新命名為 AnnotatedString.Range。(I2d44d)
將 AnnotatedString.Builder.addAnnotationString 重新命名為 addStringAnnotation。(I5059e)
現在可以使用 SoftwareKeyboardController 由 onTextInputStarted 提供 回呼 (I8dc44、b/151860051)
新增了 (Text/ParaGraph/Span) Style 的加號運算子,可委派到 Merge() 函式。(Ia1add)
FontWeight.lerp 不再提出貼齊功能。這仍然是資料類別。(I521c2)
FontWeight 建構函式為公開狀態,不再是資料類別 (Id6b1f)。
將 getLineStart、getLineEnd、getEllipsisOffset 和 getEllipsisCount 新增至 TextLayoutResult (Ibc801)
ui-text 模組已重新命名為 ui-text-core (I57dec)
移除了未使用的 Size 類別,因為 ui-幾何圖形模組有重複的 Size 類別。(I1b602)
新增了 AdapterList 這個捲動清單元件,僅撰寫及配置顯示的項目。目前已知的問題包括,這個元件僅限直向,且無法完全處理子項的所有變更。(Ib351b)
在 Box 中新增邊框間距、框線、形狀和背景參數 (I05027、b/148147281)
修正錯誤
- 文字欄位中 onFocusChange 回呼已重新命名為 onFocusChanged (Ida4a1)
- VerticalScroller 和 HoriziontalScroller 現已淘汰,使用 ScrollableColumn 和 ScrollableRow,透過資料欄/資料列行為和參數或使用內建功能,或是對元素使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。同樣地,淘汰了 ScrollerPosition,改為使用 ScrollState (I400ce,b/157225838、b/149460415、b/154105299)
runOnIdleCompose
已重新命名為runOnIdle
(I83607)- 將多個測試 API 重新命名,提供更直覺化的使用體驗。將所有 FindXYZ API 都重新命名為 onNodeXYZ。將所有 doXYZ API 都重新命名為 performanceXYZ。(I7f164)。
- 您現在不必新增撰寫,就能在 ViewGroups 中撰寫 Compose UI。如需範例,請參閱 ViewInteropDemo。(I9ab0b、b/160455080)
- 為 MutableVector 新增了 sortWith 和 removeRange (Icccf7)
- 實作「拖曳選取控點」來變更 TextField 的選取範圍。(I27032)
- 移除了包裝 NativeShader 類別的 Shader 內嵌類別,取代預期的 NativeShader 類別。已包裝的 Shader 內嵌類別在 API 介面上並未新增任何重要項目,而且是內嵌類別,因此請直接使用 NativeShader 類別。(I25e4d)
將 PainterModifier 重構為不再根據特定限制和 ContentScale 參數提供資源調度。Paint 的實作方式,是依據其所繪製的 DrawScope 特定大小,自行擴充繪圖內容。
修正了 VectorPainter 的快取點陣圖遭調整成其預設大小,而非指定繪製大小的問題。
更新了 ImagePainter 來擴充內容,而非仰賴 PainterModifier。(I6ba90)
新增頂層 withFrameNanos 函式,用於動畫計時 (Ie34c5)
@Untracked 註解已淘汰。替換為 @ComposableContract(tracked=false) (Id211e)
androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue 已淘汰。使用該類型的 TextField、FilledTextField 和 CoreTextField 可組合項也已淘汰。請改用 androidx.ui.input.TextFieldValue (I4066d,b/155211005)
修正問題:如果在分派過程中透過子組合來移除 PointerInputFilters,指標輸入分派作業會導致系統當機。不過現在我們已順利解決這項問題。(I1f48b、b/157998762)
修正問題:如果在分派過程中透過子組合來移除 PointerInputFilters,指標輸入分派作業會導致系統當機。不過現在我們已順利解決這項問題。(Iab398、b/157998762)
將 Radius 類別重構為內嵌類別。移除具有預設參數的函式建立方法,並使用預設參數讓半徑 Y 軸與必要 X 軸半徑參數的 y 軸相符。
將 DrawScope.drawRoundRect 更新為使用單一 Radius 參數,而非取用沿著 x 和 y 軸半徑的 2 個獨立浮點值 (I46d1b)
Recompose 可組合項已經不再是實用的抽象層。多數重組作業應該都是因為 MutableState 指派項目才會執行。除此之外,建議您使用
invalidate
函式來觸發針對目前範圍的重組作業 (Ifc992)。我們進行了大規模重構作業,包括將各種 compose 類別中使用的 Px 類別改為只使用 Dp 和原始類型來處理像素參數 (Iede0b)
變更 Compose 編譯器的程式碼產生策略。在變更之前,Compose 編譯器會將呼叫轉換為可組合函式。經此變更之後,我們現在可以轉換可組合函式的主體,並在多數情況下維持呼叫位置不變。
也就是說,與 Compose 執行階段進行通訊的大多數邏輯,都是在函式主體的開頭 (而不是在呼叫位置) 執行。
這應該是針對所有 Compose 使用情形的原始碼相容性變更。這項變更生效後,大多數 Compose 使用者都無需更新任何程式碼。
為了配合這項變更,所有可組合函式的 JVM 簽名皆已變更。接受單一參數的可組合函式已轉換為接受 3 個參數的函式,外加的參數為 Composer (也就是「key」整數),是用於透過呼叫傳播中繼資料的位元遮罩整數。
Compose 也會將預設引數轉換為可組合的函式。此舉不會引入函式本身的額外合成預設超載,因此這項變更將導致接受定義的函式變少。
由這種情況產生的已知預期行為變更:
- 部分呼叫會略過先前不會略過的部分
- 系統現可正確訂閱及處理預設引數運算式中的可組合運算式
這項工作包含以下最佳化作業: 1. 參數的比較結果會透過呼叫圖傳播到其他可組合函式。這將導致執行階段的比較項目更少、縮減運算單元資料表的大小,以及略過更多先前未略過的可組合函式。 2. 系統在執行階段不會再比較或儲存在編譯時間判定為「靜態」的參數。這樣可以減少比較項,並縮減運算單元資料表的大小。 3. 函式主體的控制流結構可用於盡可能減少產生的群組數量。這麼做可減少運算單元資料表大小,並降低執行階段 4 的工作負擔。如果未在函式主體內使用調度和接收器參數,則在判斷函式是否可略過時不會將這些參數納入考量。
多數破壞性變更都是針對編譯器直接指定的 API,因此不會影響 Compose 的一般使用情形: 1. Composer::startExpr 已移除 2. Composer::endExpr 已移除 3. Composer::call 已淘汰 4. 已移除
key
的非變化版本超載。往後請使用vararg
版。5. Pivotal 註解已淘汰。請改為使用key
。6. ScopeUpdateScope::updateScope 已變更,現在預期接收 Function3,而不是 Function1 7. restartableFunction 和 restartableFunctionN 經更新後可納入其他編譯時間參數 (I60756、b/143464846)移除了已淘汰的 LayoutAlign 修飾符。(I10877)
移除了 RepaintBoundary,改用 DrawLayerModifier (I00aa4)
Button、FloatingActionButton 和 Clickable 現在有獨立的
enabled
參數。Button 上的部分參數已重新命名或重新排序 (I54b5a)。將 ButtonStyle 替換成專用函式,並移除了文字 (字串) 超載。如需使用資訊,請參閱更新後的範例。(If63ab、b/146478620、b/146482131)
對環境 API 做出破壞性變更。詳情請參閱記錄檔和
Ambient<T>
說明文件 (I4c7ee、b/143769776)將 TextDirection 的預設行為改由 LayoutDirection 判定。例如,如果 LayoutDirection 為 RTL,預設的 TextDirection 就會是 RTL。先前是 TextDirection.ContentOrLtr/Rtl (I4e803)
修正錯誤:將字型粗細和字型樣式以巢狀結構建立在 AnnotatedString 上時,文字無法正常顯示。(I77a9d)
為 Text() 新增常用參數。如果您目前建立的本機文字樣式旨在傳遞這些參數中的一小部分,例如 Text(style = TextStyle(textAlign = TextAlign.Center)),您現在可以直接提供參數:Text(textAlign = TextAlign.Center) (I82768)
ui-android-text 模組已重新命名為 ui-text-android (I68cbe)