Compose Foundation
最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 11 月 13 日 | 1.7.5 | - | - | 1.8.0-alpha06 |
結構
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.foundation:foundation:1.7.5" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.foundation:foundation:1.7.5") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。
意見回饋
您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。
詳情請參閱 Issue Tracker 說明文件。
1.8 版
1.8.0-alpha06 版
2024 年 11 月 13 日
發布 androidx.compose.foundation:foundation-*:1.8.0-alpha06
。1.8.0-alpha06 版包含這些修訂項目。
API 變更
- 新增
stylusHoverIcon
修飾符。(Iff20a、b/331289114)。 - 淘汰了
AnchoredDraggableState
的confirmValueChange
。除了否決狀態變更之外,不允許的錨點不應出現在有效錨點組合中,且應使用OverscrollEffect
表示要求的動作無法使用。(Ia717f) - 將自動填入管理員變更為介面。(I84914、b/376080755)。
- 新增
OverscrollEffect#withoutDrawing
和OverscrollEffect#withoutEventHandling
API - 這些 API 會分別建立所提供的捲動超出效果的包裝例項,且不會繪製 / 處理事件,這可讓您在分派事件的元件中,透過個別元件呈現捲動超出效果。例如,在延遲清單中停用繪製超出捲動的功能,然後在頂端 / 其他位置單獨繪製超出捲動。(Idbb3d、b/266550551、b/204650733、b/255554340、b/229537244)。 - 在文字工具列中新增自動填入支援功能。(Ie6a4c)
- 已淘汰
OverscrollConfiguration
和LocalOverscrollConfiguration
,並新增rememberPlatformOverscrollFactory
,以便建立預設捲動實作的例項 / 自訂參數。如要停用超出捲動,請使用LocalOverscrollFactory provides null
,而非LocalOverscrollConfiguration provides null
。如要變更發光顏色 / 邊框間距,請使用LocalOverscrollFactory provides rememberPlatformOverscrollFactory(myColor, myPadding)
,而非LocalOverscrollConfiguration provides OverscrollConfiguration(myColor, myPadding)
。(Ie71f9、b/255554340、b/234451516)。 - 將
OverscrollEffect
的effectModifier
屬性變更為node: DelegatableNode
,與其他 API 保持一致。(Ic0b46、b/255554340)。 - 移除實驗性
GlobalAssertions
API。其主要用途是執行無障礙檢查,請改為參閱enableAccessibilityChecks()
。(I59322)。
1.8.0-alpha05 版
2024 年 10 月 30 日
發布 androidx.compose.foundation:foundation-*:1.8.0-alpha05
。1.8.0-alpha05 版包含這些修訂項目。
新功能
- 支援自動調整文字大小。將
AutoSize
例項 (例如AutoSize.StepBased
) 傳遞至您偏好的文字可組合項 (例如BasicText
),即可看到文字大小會根據可用空間自動調整!(Ice7e0、b/139320827)。 - 新增
OverscrollFactory
和LocalOverscrollFactory
API,以便在階層中設定過度捲動功能。系統會根據預設使用透過LocalOverscrollFactory
提供的值來建立OverscrollEffect
。如要使用目前提供的工廠建立並記住特效,請使用rememberOverscrollEffect()
。(I51ca4、b/255554340)。
API 變更
- 引入
CompositionLocal
,可用於修改自動填入功能成功填入資料時的醒目顯示色調。(I32092)。 - 已移除
ScrollableDefaults.overscrollEffect
,請改用rememberOverscrollEffect
。這會建立LocalOverscrollFactory
提供的目前超出捲動實作項目的例項。(I1651a、b/255554340)、(b/234451516)。 - 推出新的
AutofillManager
介面,可用於微調使用者的自動填入流程,以及isSemanticAutofillEnabled
標記,用於啟用新版自動填入功能。(I9d484) - 移除
CombinedClickableNode
。這項實驗性 API 曾暫時公開,用於解除封鎖效能工作,但現在已無此必要。您應該直接使用Modifier.combinedClickable
,就像使用其他修飾符 API 一樣。(I4b658)。 - 將超載新增至
horizontalScroll
、verticalScroll
、LazyColumn
、LazyRow
、LazyHorizontalGrid
、LazyVerticalGrid
、LazyHorizontalStaggeredGrid
、LazyVerticalStaggeredGrid
、HorizontalPager
和VerticalPager
,並支援指定自訂OverscrollEffect
。提供的OverscrollEffect
會接收事件,並在這些元件的邊界內顯示。請注意,系統不支援繪製相同的OverscrollEffect
兩次,因此您無法使用Modifier.overscroll
分別繪製提供給其中一個元件的相同OverscrollEffect
。日後我們會另外說明在這些元件邊界外繪製超出捲動的用途。(I2dc42、b/266550551、b/234274772、b/224572538、b/353805117)。
1.8.0-alpha04 版
2024 年 10 月 16 日
發布 androidx.compose.foundation:foundation-*:1.8.0-alpha04
。1.8.0-alpha04 版包含這些修訂版本。
API 變更
- 新增
DelegatableNode#onDensityChange
和DelegatableNode#onLayoutDirectionChange
回呼,以便在這些項目變更時更新節點狀態。(I04f3e、b/340662451)。 - 段落和
ParagraphIntrinsics
現在會取得套用至AnnotatedString
的所有註解清單,先前只會取得SpanStyles
清單。(I12f80)。 - 推出
PointerInputModifierNode#touchBoundsExpansion
,可用於放大單一指標輸入修飾符的觸控邊界。(Iccf02、b/335339283)。
修正錯誤
- 修正在某些情況下,系統無法正確考量傳遞至
AnchoredDraggableDefaults.flingBehavior
的位置門檻的錯誤。(Ifdf0d、b/367660226)。 - 針對在持續滑動期間從節點樹狀結構中移除的巢狀可捲動項目,推出修正項目。這些節點現在會取消 fling,並正確傳送含有剩餘速度的
onPostFling
事件。我們也推出了NewNestedScrollFlingDispatchingEnabled
旗標,用於控制回歸情況下的行為。這項標記會在 Beta 版推出前移除。(I05c37、b/371168883)。 - 修正了
OverscrollEffects
傳遞至Modifier.anchoredDraggable
時,會收到 2D 差異而非 1D 的錯誤。(Ie52c0)
1.8.0-alpha03 版
2024 年 10 月 2 日
發布 androidx.compose.foundation:foundation-*:1.8.0-alpha03
。1.8.0-alpha03 版包含這些修訂版本。
API 變更
- Kotlin 版本更新至 1.9 (I1a14c)
- 推出旗標
DraggableAddDownEventFixEnabled
(I848d5) - 推出名為「Carousel」的新語義角色,模擬 Pager 中的清單行為,以便為 a11y 服務提供服務。(Id354b、b/354109776、b/239672673)。
- 已從
BasicText
可組合函式中移除隱含的graphicsLayer
修飾符。新增實驗性ComposeFoundationFlags.RemoveBasicTextGraphicsLayerEnabled
旗標,以便還原舊行為。(Ie478d) - 新增
Modifier.recalculateWindowInsets()
,讓階層中的子項即使在父項未使用consumeWindowInsets()
對齊的情況下,也能使用insetsPadding
。(I7f9e4)
修正錯誤
- 在
detectDragGestures
、draggables 和 scrollables 中實作手勢選取功能。現在,如果子可拖曳項目放棄手勢,父項可拖曳項目就有機會接手。這可讓您更連續且整合手勢處理。(Ic88fe)。 - 更新可捲動的項目中的甩動取消行為。現在,如果可捲動的畫面快速滑動並觸及邊界,系統會正確將快速滑動速度傳遞至鏈結中的下一個可捲動畫面,而不是繼續驅動快速滑動。(I9326a)
1.8.0-alpha02 版
2024 年 9 月 18 日
發布 androidx.compose.foundation:foundation-*:1.8.0-alpha02
。1.8.0-alpha02 版包含這些修訂項目。
API 變更
TextOverflow.StartEllipsis
和TextOverflow.MiddleEllipsis
現已可用,可在單行文字的行首或中間放置刪節號 (I38913、b/185418980)
1.8.0-alpha01 版
2024 年 9 月 4 日
發布 androidx.compose.foundation:foundation-*:1.8.0-alpha01
。1.8.0-alpha01 版包含這些修訂版本。
1.7 版
1.7.5 版
2024 年 10 月 30 日
發布 androidx.compose.foundation:foundation-*:1.7.5
。1.7.5 版包含這些修訂項目。
修正錯誤
- 請確認已固定的項目不會在內容邊框間距區域中重複子組合。(Ic6224)
1.7.4 版
2024 年 10 月 16 日
發布 androidx.compose.foundation:foundation-*:1.7.4
。1.7.4 版包含這些修訂版本。
修正錯誤
- 修正文字欄位中極少發生的異常終止錯誤。(I475c6、b/313010266)。
- 已從 Lazy 版面配置項目的根層級移除
ReusableContentHost
。這可能是導致「在已停用的節點上呼叫的評估」異常終止的潛在根本原因。(Id6e60)
1.7.3 版
2024 年 10 月 2 日
發布 androidx.compose.foundation:foundation-*:1.7.3
。1.7.3 版包含這些修訂項目。
修正錯誤
- 修正當 minLines 設為非預設值時,
BasicText
的記憶體流失問題。
1.7.2 版
2024 年 9 月 18 日
發布 androidx.compose.foundation:foundation-*:1.7.2
。1.7.2 版包含這些修訂項目。
修正錯誤
- 修正 draggable 缺少向下事件的問題,導致 fling 速度看起來比平常慢。
1.7.1 版
2024 年 9 月 10 日
- 不會變更 Android 構件。移除了
-desktop
構件,並新增-jvmStubs
和-linuxx64Stubs
構件。這些目標並非要您使用,而是 Jetbrains Compose 開發時的暫存資料。
1.7.0 版
2024 年 9 月 4 日
發布 androidx.compose.foundation:foundation-*:1.7.0
。1.7.0 版包含這些修訂項目。
自 1.6.0 版以來的重要變更
Modifier.clickable
、Modifier.focusable
、Modifier.indication
、Modifier.scrollable
和Modifier.draggable
的效能已大幅提升。除了內部變更之外,我們也進行了以下 API 變更,以便完成這項工作- 新增了
IndicationNodeFactory
這個新的 Indication API。這會讓指示功能的實作效能提升,相較於先前 (現已淘汰) 的rememberUpdatedInstance
API。如需遷移相關資訊,請前往 developer.android.com。 clickable
/combinedClickable
/selectable
/toggleable
現在可接受 nullableMutableInteractionSource
參數。如果為空值,且提供的指示為IndicationNodeFactory
,則系統只會在需要時延遲建立指示,進而提升效能。如果您沒有提升並使用MutableInteractionSource
,建議傳遞空值,而不要傳遞remember { MutableInteractionSource() }
。- 淘汰了
Indication#rememberUpdatedInstance
。這會導致不可避免的效能損失,並阻止其他最佳化。請改用新的IndicationNodeFactory
API。
- 新增了
- 使用
TextFieldState
的BasicTextField
現已穩定,建議所有呼叫網站開始從BasicTextField(value, onValueChange)
遷移至BasicTextField(TextFieldState)
。 ClickableText
已淘汰。如要在文字中加入可點選的連結,請在AnnotatedString
中使用BasicText
搭配新的LinkAnnotation
註解。LinkAnnotation
可根據連結狀態 (例如已獲得焦點、游標懸停) 自訂樣式。- 使用
MaxLines
和Overflow
介紹ContextualFlowRow
和Enhanced FlowRow/Column
。我們很高興在此宣布,實驗性的FlowRow
和FlowColumn
功能已強化,現在支援maxLines
和溢位功能,同時推出ContextualFlowRow
和ContextualFlowColumn
。這項更新旨在提供最佳效能的元件,其中ContextualFlow*
非常適合大量項目,可利用小型 maxLines 設定和動態 +N 查看更多按鈕,而FlowRow
和FlowColumn
則非常適合少量項目 (少於 100 個項目)。重要事項:如要在FlowRow
或FlowColumn
中維持現有行為,無論所有項目是否符合交叉軸上限,都會組合,請在初始化期間將溢位值設為FlowRowOverflow.Visible
或FlowColumnOverflow.Visible
。請參閱ContextualFlowRowSample
和FlowRowSample
,瞭解這些新功能的實際運作情形。(Ib9135、b/293577082) LazyColumn
和LazyRow
新增了項目顯示和消失動畫支援功能。先前可以新增Modifier.animateItemPlacement()
修飾符,以支援置入 (重新排序) 動畫。我們已淘汰這個修飾符,並推出名為Modifier.animateItem()
的新非實驗性修飾符,可讓您支援三種動畫類型:顯示 (淡入)、消失 (淡出) 和重新排序。(I2d7f7、b/150812265)。- 使用官方 Android API (
ScrollCaptureCallback
),在 Compose 捲動容器中實作長螢幕截圖實驗功能。 NestedScroll
來源的拖曳和彈跳功能已由UserInput
和SideEffect
取代,以便因應這些來源的擴充定義,現在包括動畫 (Side Effect) 和滑鼠滾輪和鍵盤 (UserInput
)。LazyLayout
預先載入要求現在可標示為「緊急」,表示我們預期在下一個影格需要此項目,並且想略過影格預算,確保事先執行更多工作 (Id513f)- 在 Android U 之後的裝置上支援觸控筆手寫功能。(I002e4)
- 多個 API 已升級為穩定版
- 分頁器、固定、視窗插邊
1.7.0-rc01 版
2024 年 8 月 21 日
發布 androidx.compose.foundation:foundation-*:1.7.0-rc01
。1.7.0-rc01 版包含這些修訂項目。
修正錯誤
- 修正迴歸問題:當任何元素在可聚焦 (或可點選) 且已停用的父項中聚焦時,系統會發生異常終止問題。(b/317561689)。
1.7.0-beta07 版
2024 年 8 月 7 日
發布 androidx.compose.foundation:foundation-*:1.7.0-beta07
。1.7.0-beta07 版包含這些修訂版本。
修正錯誤
- 文字輸入相關的
SemanticsNodeInteraction
函式performTextReplacement
、performTextInput
和performTextClearance
在呼叫唯讀TextFields
時,現在會擲回斷言錯誤。(I4ae8f)。 - 修正超連結中的視覺錯誤。(I23311)。
- 修正
contentReceiver
修飾符無法與部分 IME 搭配運作的問題。 - 速度產生:避免在 Compose UI 和 Foundation 中傳播 NaN 值。
1.7.0-beta06 版
2024 年 7 月 24 日
發布 androidx.compose.foundation:foundation-*:1.7.0-beta06
。1.7.0-beta06 版包含這些修訂版本。
1.7.0-beta05 版
2024 年 7 月 10 日
發布 androidx.compose.foundation:foundation-*:1.7.0-beta05
。1.7.0-beta05 版包含這些修訂版本。
修正錯誤
- 修正
SnapFlingBehavior
和 Pager 中 Nan 值的處理方式。
1.7.0-beta04 版
2024 年 6 月 26 日
發布 androidx.compose.foundation:foundation-*:1.7.0-beta04
。1.7.0-beta04 版包含這些修訂版本。
修正錯誤
- 避免在測量非常大的文字行 (例如 10,000 個字元) 時發生當機情形 (8157ab)
- 修正在新的
BasicTextField
中測量超大文字導致異常終止的問題 (6b7575) - 在某些情況下,會導致文字使用方式中斷的資料列/資料欄評估功能,將會恢復變更行為 (69e8ba)
1.7.0-beta03 版
2024 年 6 月 12 日
發布 androidx.compose.foundation:foundation-*:1.7.0-beta03
。1.7.0-beta03 版包含這些修訂項目。
1.7.0-beta02 版
2024 年 5 月 29 日
發布 androidx.compose.foundation:foundation-*:1.7.0-beta02
。1.7.0-beta02 版包含這些修訂項目。
API 變更
- 新增實驗性 API,用於設定
LazyGrids
的預先載入行為,類似LazyLists
現有的實驗性 API。這包括支援在巢狀LazyGrids
中預先載入項目。與LazyListPrefetchStrategy
類似,實作作業的預設做法是預先擷取每個格線的前 2 個巢狀項目,但這項作業可以透過新的LazyGridPrefetchStrategy(nestedPrefetchItemCount)
和LazyListPrefetchStrategy#onNestedPrefetch
API 進行設定。(I591c4)。 - 將
SemanticsProperties.Editable
重新命名為IsEditable
,並將SemanticsPropertyReceiver.editable
變更為 valisEditable
。該屬性現在為布林值,且一律由文字欄位指定。(I8acd8)。 - 將
basicMarquee
預設值移至MarqueeDefaults
物件。(I12ff6)。 - 已將
basicMarquee
delayMillis
參數重新命名為repeatDelayMillis
。(I12ff6)。 - 更新 API 以設定連結樣式:將
TextLinkStyles
移至TextStyle
,並從 Material 中移除TextDefaults
(I5477b)
修正錯誤
LayoutCoordinates.introducesFrameOfReference
已重新命名為LayoutCoordinates.introducesMotionFrameOfReference
,以更能反映其用途。重新命名相關函式,以便根據該標記計算座標。(I3a330)- 已從
MarqueeDefaults
屬性中移除「預設」(I1d8a0) - 已從
MarqueeDefaults
資源中移除「Marquee」(Iad4f4) - 已從
TextStyle
類別中移除TextLinkStyles
。TextLinkStyles
是LinkAnntation
建構函式和AnnotatedString.fromHtml
方法的一部分 (I90b2b) - 修正當 Pager 在已固定在邊界時,快速滑動至邊界時會固定的錯誤。(I9f373、b/339171222)。
- BTF2 現已正確顯示滑鼠選取手勢。(Ibe8c6)
外部貢獻
- 重新提交「根據預先載入功能,將組合/測量時間計算內容類型,以提高準確度」(Iea622)
- 根據預先擷取內容,改為使用組合/評估時間計算內容類型,以提高準確度 (Ibccb1)
- 從常見來源集提供
WindowInsetsPadding
修飾符 (I070b2)
1.7.0-beta01 版
2024 年 5 月 14 日
發布 androidx.compose.foundation:foundation-*:1.7.0-beta01
。1.7.0-beta01 版包含這些修訂版本。
API 變更
- 為確保二進位檔相容性,我們已將
KeyboardOptions.shouldShowKeyboardOnFocus
屬性設為已淘汰的隱藏屬性。(I15cfe)。 Modifier.anchoredDraggable
現在會根據預設,針對在 RTL 版面配置中使用的水平方向元件,反轉拖曳差異。(I3c6d9)AnnotatedString.hasEqualsAnnotations
現在是hasEqualAnnotations
。(I685c0)- 更新 API,以便在文字中取得 Material 主題連結。具體來說,我們從
TextDefaults
中移除了用於建構主題化LinkAnnotations
的方法,並使用主題化連結剖析 HTML。請改為新增TextLinkStyles
類別,讓您可以將連結樣式做為參數新增至 Text 可組合項。(I31b93) - 以非暫停的回呼取代
onDragStarted
和onDragStopped
。(I59de8)
修正錯誤
- 修正當
contentPadding
大於傳入的限制條件時,Pager 會異常終止的問題。Pager 現在會將從PageSize
傳回的負值強制設為 0。(Iba5d8、b/314008560)
1.7.0-alpha08 版
2024 年 5 月 1 日
發布 androidx.compose.foundation:foundation-*:1.7.0-alpha08
。1.7.0-alpha08 版包含這些修訂項目。
新功能
API 變更
LazyLayout
預先載入要求現在可標示為「緊急」,表示我們預期在下一個影格需要此項目,並且想略過影格預算,確保事先執行更多工作 (Id513f)isPositionedByParentWithDirectManipulation
已重新命名為introducesFrameOfReference
。請注意,現在的效果是相反的,也就是說,根據預設,大多數LayoutCoordinates
都會引入參考架構,只有在直接操控時,屬性才會設為 false。如要只查詢引入參考架構的資料位置,請使用positionInLocalFrameOfReference(...)
。或從LookaheadScope
取得positionInLocalLookaheadFrameOfReference
。(Ifc5f7)- 已將
onClicked
重新命名為onClick
(在LinkInteractionListener
中) (Iaa35c) - 根據 API 委員會的意見回饋,變更
getScrollViewportLength
的動作 lambda。(Ibc74a)。 - 重新命名觸控筆手寫委派 API。(Ica45f、b/327271923)。
- 將
TextInclusionStrategy.isInside
重新命名為isIncluded
。讓Paragraph/MultiParagraph#getRangeForRect()
傳回類型不可為空值。(I51f26)。
修正錯誤
- 在
SelectionContainer
中,將「全選」新增至所有文字內容選單。(Ib750e、b/240143283) - 修正使用
reverseScrolling=true
為捲動容器拍攝長螢幕截圖的問題。(I7c59c)。 - 修正
AnchoredDraggableState
的currentValue
在接近狀態邊界時會變更的問題。(Iea30b、b/333846848)
外部貢獻
- 已將
PrefetchExecutor
重新命名為PrefetchScheduler
,以更準確反映其職責。(Ib9154) - 新增對巢狀
LazyLists
中項目的預先載入支援功能 (例如:會轉譯巢狀LazyRows
的LazyColumn
)。這項變更預計可減少這些LazyLists
捲動期間的幀率下降情形。實作方式預設為預先擷取前 2 個巢狀項目,但這項行為可由新的LazyLayoutPrefetchStrategy(nestedPrefetchItemCount)
和LazyListPrefetchStrategy#onNestedPrefetch
API 控制。(I51952)。
1.7.0-alpha07 版
2024 年 4 月 17 日
發布 androidx.compose.foundation:foundation-*:1.7.0-alpha07
。1.7.0-alpha07 版包含這些修訂項目。
新功能
- 新增
TextDefaults
物件,其中包含建構LinkAnnotation
的方法,以及剖析 HTML 標記字串的方法,可將MaterialTheme
套用至連結。(I98532、b/139312671)。 LazyVerticalGrid
和LazyHorizontalGrid
新增了項目顯示和消失動畫支援功能。先前可以新增Modifier.animateItemPlacement()
修飾符,以支援置入 (重新排序) 動畫。我們已淘汰這個修飾符,並推出名為Modifier.animateItem()
的新非實驗性修飾符,可讓您支援三種動畫類型:顯示 (淡入)、消失 (淡出) 和重新排序。(Ib7d12、b/330510929)。LazyVerticalStaggeredGrid
和LazyHorizontalStaggeredGrid
新增了項目顯示和消失動畫支援功能。先前可以新增Modifier.animateItemPlacement()
修飾符,以支援置入 (重新排序) 動畫。我們已淘汰這個修飾符,並推出名為Modifier.animateItem()
的新非實驗性修飾符,可讓您支援三種動畫類型:顯示 (淡入)、消失 (淡出) 和重新排序。(I69bc9、b/330511290)。
API 變更
- 新增
ContextMenuColors
和相關聯的LocalContextMenuTheme
ProvidableCompositionLocal
。您可以提供組合區域,修改文字欄位和可選取文字的內容選單顏色。(Ifa154)。 - 除了一般樣式、滑鼠游標懸停和聚焦狀態,文字連結也提供按下狀態樣式選項。(I5f864、b/139312671)。
- 引入
ViewConfiguration.HandwritingGestureLineMargin
以便使用手寫手勢。支援BasicTextField
的手寫手勢。(Ie6e13、b/325660505)。 - 我們沒有時間完成其餘相關 API 途徑的穩定化,因此在 1.7 版中移除了
DelegatableNode.scrollIntoView
。這項功能將在 1.8 中重新推出 (I6cf61、b/333421581、b/332900232) - 查詢版面配置座標時,您現在可以使用
excludeDirectManipulationOffset
引數排除由使用Placeable.PlacementScope.withDirectManipulationPlacement
放置子項的父項版面配置所設定的偏移量。同樣地,如果版面配置經常變更子項的位置,現在可以使用withDirectManipulationPlacement
(例如預設實作的捲動) 來放置子項。這有助於讓以approachLayout
為基礎的動畫更直覺,讓您在決定動畫處理方式時,能區分要以何種偏移方式進行動畫處理,以及要直接套用哪些偏移。(I60ec7)。 - 為
LazyStaggeredGrid
引入requestScrollToItem
。對於每個測量值傳遞,用戶端現在可以透過呼叫requestScrollToItem
,選擇不根據索引鍵維護索引。除非呼叫requestScrollToItem
,否則這不會以任何方式變更現有行為。(I63983)。 - 在 Pager 中導入
requestScrollToPage
。對於每個測量值傳遞,用戶端現在可以透過呼叫requestScrollToPage
,選擇不根據索引鍵維護索引。除非呼叫requestScrollToPage
,否則這不會以任何方式變更現有行為。(Ic4213) - 為
LazyGrids
導入requestScrollToItem
。對於每個測量值傳遞,用戶端現在可以透過呼叫requestScrollToItem
,選擇不根據索引鍵維護索引。除非呼叫requestScrollToItem
,否則這不會以任何方式變更現有行為。(I0a7a0)。 ClickableText
已標示為已淘汰。如要為文字新增連結,請建立AnnotatedString
,並使用與連結相對應的LinkAnnotation
,然後將此AnnotatedString
傳遞至Text
可組合項 (I34d4b、b/323346994)UrlAnnotation
已淘汰,請改用LinkAnnotation.Url
。如果您使用 Material 主題設定,請使用TextDefaults
物件建立附註,並套用 Material 主題設定 (I8d180、b/323346545)String.parseAsHtml
已重新命名為AnnotatedString.Companion.fromHtml
(I43dcd)。- 在
parseAsHtml
方法中新增樣式設定引數 (linkStyle
、focusedLinkStyle
、hoveredLinkStyle
) 和連結互動事件監聽器。使用<a>
標記剖析 HTML 標記字串時,這個方法會為每個標記建立LinkAnnotation.Url
,並將樣式物件和連結互動事件監聽器傳遞至每個註解。(I7c977)。 LinkAnnotation
現在會採用以狀態為依據的樣式引數和LinkInteractionListener
。將這個註解新增至AnnotatedString
,即可取得超連結。您可以傳遞focusedState
和/或hoveredState
,為連結在聚焦和/或懸停時定義視覺設定。(I81ce4、b/139312671)。- 長螢幕截圖的功能標記已移除。(I28648、b/329128246)。
LazyColumn
現在會在長螢幕截圖中正確顯示固定標頭。(I8d239、b/329296635)。- 穩定了新
BasicTextField
中剩餘的實驗性 API。(I714e2)。 - 在
BasicSecureTextField
中新增textObfuscationCharacter
參數,用於控制在模糊處理內容時要使用的字元。(I0588b)。 NestedScroll
來源的 Drag 和 Fling 已由UserInput
和SideEffect
取代,以便因應這些來源的擴充定義,現在包括動畫 (Side Effect) 和滑鼠滾輪和鍵盤 (UserInput
)。(I40579)- 推出
LocalBringIntoViewSpec
,這是在 Scrollable 修飾符層套用的平台特定焦點捲動行為。(I27aa5、b/317453911)。 - 已移除
TextFieldCharSequence
。TextFieldBuffer.originalValues
已由TextFieldBuffer.originalText
和TextFieldBuffer.originalSelection
取代。(I2c7d6)。 ImeOptions.hintLocales
不再可設為空值。如果您想傳遞空白的語言代碼清單,請使用LocaleList.Empty
。(Ic5bc4)getOffsetFractionForPage
已重新命名為getOffsetDistanceInPages
。(Ia05e2)。
修正錯誤
- 當
InputTransformations
與next
結合時,其KeyboardOptions
現已使用新的KeyboardOptions.merge
方法,透過個別選項正確合併。(Ie5304、b/295951492)。 AnchoredDraggableState
的targetValue
現在「不會」再考量位置門檻。其隱含門檻現在為 50%,也就是說targetValue
會在兩個錨點之間的中點變更。(I82c2c)
外部貢獻
- 重新命名 2 個捲動 API (I56a75)
1.7.0-alpha06 版
2024 年 4 月 3 日
發布 androidx.compose.foundation:foundation-*:1.7.0-alpha06
。1.7.0-alpha06 版包含這些修訂項目。
新功能
LazyColumn
和LazyRow
新增了項目顯示和消失動畫支援功能。先前可以新增Modifier.animateItemPlacement()
修飾符,以支援置入 (重新排序) 動畫。我們已淘汰這個修飾符,並推出名為Modifier.animateItem()
的新非實驗性修飾符,可讓您支援三種動畫類型:顯示 (淡入)、消失 (淡出) 和重新排序。(I2d7f7、b/150812265)。LazyColumn/LazyRow
的用戶端現在可以呼叫非暫停LazyListState.requestToScroll
,選擇不根據即將到來的測量值傳遞金鑰維護索引。(I98036、b/209652366)- 新增樣式字串的
parseAsHtml
方法:可將標示 HTML 標記的字串轉換為AnnotatedString
。請注意,並非所有標記都支援,例如您無法顯示項目符號清單。(I84d3d) - 使用官方 Android API (
ScrollCaptureCallback
),在 Compose 捲動容器中實作實驗性支援功能,以便擷取長螢幕截圖。這項功能仍在實驗階段,目前可能無法正確處理所有情況。因此,這項功能目前預設為停用。如要選擇啟用,請將ComposeFeatureFlag_LongScreenshotsEnabled
標記設為 true。這個標記會在 1.7 Beta 版推出前移除。(I2b055、b/329296471)。 - 推出新的
GraphicsLayer
API,讓您在放置和算繪GraphicsLayer
例項時更具彈性,並支援內在算繪功能,而無需與可組合項實作協調,以指定GraphicsLayer
修飾符例項。
API 變更
- 所有
KeyboardOptions
參數現在預設為未指定的值。新增KeyboardOptions.merge
方法。 - 已將
KeyboardOptions.autoCorrect
重新命名為autoCorrectEnabled
,並將該值設為可為空值,其中空值表示未指定任何值。(Ia8ba0、b/295951492)。 outOfBoundsPageCount
已重新命名為beyondViewportPageCount
。(I129c6)fun ClipEntry.getMetadata()
已變更為val ClipEntry.clipMetadata
。(I50155)- 已移除
TextFieldState.valueAsFlow()
。建議使用snapshotFlow { state.text }
或snapshotFlow { TextFieldCharSequence(state.text, state.selection) }
(I7d629) - 已重新整理
InputTransformation.transformInput
參數。已移除originalValue: TextFieldCharSequence
。TextFieldBuffer
現在會以相同名稱攜帶這個值。同時也移除了valueWithChanges: TextFieldBuffer
參數。TextFieldBuffer
現在是函式上的接收器範圍。(I919cc)。 BasicTextField(state)
變體和BasicSecureTextField
現在使用KeyboardActionHandler
而非KeyboardActions
來處理軟體鍵盤的動作。(I58dda)。- 觸控筆手寫委派 API,可在「假」文字輸入欄位中支援觸控筆手寫功能。(I9c09c、b/327271923)。
KeyboardOptions.shouldShowKeyboardOnFocus
已重新命名為showKeyboardOnFocus
。(Ib4b7a、b/295951492)- 已從
Modifier.contentReceiver
中移除hintMediaTypes
參數。我們已鼓勵開發人員檢查收到的TransferableContent
媒體類型,因為這可能與設定的hintMediaTypes
不相容。(I82f99)。 - 已將
BasicSecureTextField
的參數重新排序。移除keyboardType
和imeAction
參數,改用完整的KeyboardOptions
類別,同時保留適用於BasicSecureTextField
的相同預設值。同時也移除了scrollState
參數。(Ibbfa9)。 TextFieldState.text
的類型已從TextFieldCharSequence
變更為CharSequence
。因此,我們新增了TextFieldState.selection: TextRange
和TextFieldState.composition: TextRange?
,直接從狀態物件讀取目前的選取項目和組合值。- 已移除
TextFieldState.forEachTextValue
。(Idb2a2)。 - 已移除
ClipboardManager.getClipMetadata
和ClipboardManager.hasClip
函式。請使用clipEntry.getMetadata()
讀取目前的短片項目中繼資料。另外,請檢查ClipboardManager.getClip
的結果是否為空值,以瞭解剪貼簿是否有目前的剪輯片段。(I50498)。 ClipboardManager.setClip
現在可接受空值,以便清除剪貼簿。(I7d2e9)。ReceiveContentListener
會轉換為函式介面。此外,由於ReceiveContentListener
現已是函式介面,因此已移除接收 lambda 的Modifier.receiveContent
超載。Modifier.receiveContent
已重新命名為Modifier.contentReceiver
。(I1e6af)TransferableContent.consumeEach
已重新命名為TransferableContent.consume
。(I1e462)rememberTextFieldState
已升級為穩定版 API。(I37999)。
修正錯誤
- 修正
BasicTextField(state)
變化版本無法與 CJK(以組合為基礎) 鍵盤搭配運作的錯誤。(I54425) - 修正錯誤:在某些情況下,
Modifier.dragAndDropTarget()
可能會在Modifier.Node
重複使用時參照舊資料。(I05bb1)。 - 已還原近期的契約變更,在
anchoredDrag
作業結束時,AnchoredDraggableState#anchoredDrag
呼叫會自動連結。(I95715)。
1.7.0-alpha05 版
March 20, 2024
發布 androidx.compose.foundation:foundation-*:1.7.0-alpha05
。1.7.0-alpha05 版包含這些修訂項目。
API 變更
- 移除了實驗性
LocalTextLinkStyle
組合本機,以便設定超連結樣式。(Iebfa7)。 - 移除了使用
onLinkClicked
引數實驗覆寫BasicText
的功能。日後將推出支援超連結的替代 API。(I107d5)。 - 已移除
TextFieldState
和TextFieldBuffer
下 Codepoints 相關的方法和屬性。我們也從其他選取和組合相關 API 中移除inChars
後置字串。(Ief7ce) AnchoredDraggable
的currentValue
會在通過錨點時更新。使用settledValue
接收先前的currentValue
語意,僅在定位於錨點時更新。進度現在會以函式 (需要起點和終點) 的形式公開,而非屬性。(Ibe6e8、b/318707189、b/298271489、b/294991954)。BasicTextField(state)
、TextFieldState
、InputTransformation
、OutputTransformation
、TextFieldLineLimits
、TextFieldDecorator
已升級為穩定版。(I9582b)- 推出
InterceptPlatformTextInput
,協助編寫低階 IME 相關測試和其他低階 IME 用途。PlatformTextInputTestOverride
已淘汰。(I862ed、b/322680547)。 - 將
restrictedConstraints()
分割為兩個方法:fitPrioritizingWidth()
和fitPrioritizingHeight()
(I6d7fd)
外部貢獻
- 新增 2 個 API
isLastScrollForward
/isLastScrollBackward
,用於檢查最新捲動動作的捲動方向,如果尚未執行捲動動作,則會傳回 false。(I63a0e)
1.7.0-alpha04 版
2024 年 3 月 6 日
發布 androidx.compose.foundation:foundation-*:1.7.0-alpha04
。1.7.0-alpha04 版包含這些修訂項目。
API 變更
- 在 Android U 之後的裝置上支援觸控筆手寫功能。(I002e4)
- 將
hintLocales
新增至KeyboardOptions
,讓TextFields
能夠提示 IME 使用特定語言代碼,預先設定偏好語言。(Id18c2)。 - 移除了採用
value: String
和onValueChange: () -> String
參數的實驗性BasicTextField2
和BasicSecureTextField
超載。(I568b4)。 - 將選用的
applySemantics
函式新增至InputTransformation
,以影響所套用的BasicTextField2
語意。(I74a2f、b/170648072)。 - 在這個 CL 中,我們會新增
GetScrollViewportLength
語意動作,以便將在 Compose 中捲動的元件資訊傳送至 a11y 系統。這項 CL 也會將上述屬性用於 Foundation 可捲動清單。(Ic5fa2) BasicTextField2
已重新命名為BasicTextField
。(Ie5713)。FocusRequester.createRefs
現在是穩定版 (I4d92c、b/261436820)- 導入
DelegatableNode.scrollIntoView()
,讓修飾符節點可直接提出scrollIntoView
要求。(I2b3b7、b/299939840) - 推出
DelegatableNode.requireView()
,讓修飾符節點能夠在不讀取本機組合內容的情況下,取得目前的 AndroidView
。(I40768)。 - 在「內容流程列範圍」和「內容流程欄範圍」中引入內容流程版面配置資訊,包括行索引、位置,以及保持在指定位置的最大寬度和高度限制。超出最大寬度/高度的項目可能會流到下一行,或根據溢出設定而省略。(Id13f8、b/292114798)。
修正錯誤
- 修正在特定情況下,切換
TextField
的enabled
或readOnly
屬性會導致應用程式異常終止的問題。(Iae17b)。
1.7.0-alpha03 版
2024 年 2 月 21 日
發布 androidx.compose.foundation:foundation-*:1.7.0-alpha03
。1.7.0-alpha03 版包含以下修訂項目。
API 變更
- 我們推出
DelegatableNode.requireLayoutCoordinates()
,讓您不必覆寫onPlaced
並自行將座標儲存在屬性中,即可取得Modifier.Node
的目前LayoutCoordinates
。(Ia8657) - 我們推出
DelegatableNode.currentLayoutCoordinates
,讓您不必覆寫onPlaced
並自行將座標儲存在屬性中,即可取得Modifier.Node
的目前LayoutCoordinates
。(Iaebaa) AnchoredDraggable
使用的DraggableAnchors
中的效能最佳化。(I89cff)。androidx.compose.foundation.text2
套件下的BasicTextField2
和相關 API 已移至androidx.compose.foundation.text
。(I9f635)。BasicTextField2
不再接受CodepointTransformation
參數。使用BasicSecureTextField
或OutputTransformation
。(Id34ff)- 新增方法,只比較兩個
AnnotatedStrings
的註解。(I32659)。 - 我們推出了
ContextualFlowRow
,並透過MaxLines
和Overflow
提供強化的FlowRow
/Column
。我們很高興在此宣布,實驗性的FlowRow
和FlowColumn
功能已強化,現在支援maxLines
和溢位功能,同時推出ContextualFlowRow
和ContextualFlowColumn
。這次更新旨在提供最佳效能的元件,其中ContextualFlow*
非常適合大量項目,可利用小型maxLines
設定和動態 +N 查看更多按鈕,而FlowRow
和FlowColumn
則非常適合少量項目 (少於 100 個項目)。重要事項:如要在FlowRow
或FlowColumn
中維持現有行為,無論所有項目是否符合交叉軸上限,都會組合,請在初始化期間將overflow
設為FlowRowOverflow.Visible
或FlowColumnOverflow.Visible
。請參閱ContextualFlowRowSample
和FlowRowSample
,瞭解這些新功能的實際運作情形。(Ib9135、b/293577082)
修正錯誤
1.7.0-alpha02 版
2024 年 2 月 7 日
發布 androidx.compose.foundation:foundation-*:1.7.0-alpha02
。1.7.0-alpha02 版包含以下修訂項目。
API 變更
HorizontalPager
、VerticalPager
和PagerState
已升級為穩定版。(I67660、b/316966909)。- 新增
LocalTextLinkStyle
組合本機,可讓您變更應用程式中 Text 中連結的樣式。如果您在應用程式中使用自己的主題,應根據主題設定此組合本機。使用 Material 主題時,連結的顏色預設會設為 Material 的主色。(I7eb10)。 - 推出
receiveContent
修飾符,讓開發人員在 Jetpack Compose 中接收多媒體內容。 receiveContent
會與BasicTextField2
整合,接受軟體鍵盤提供的多媒體內容,或透過剪貼簿貼上動作。(I81b72)- 在這個異動中,我們會在 pager 中將
SnapFlingBehavior
替換為TargetedFlingBehavior
,以便開放其他用途,並提供更大的彈性。(I762ea) - 這項變更會將 Snapping API 設為穩定版。我們也正在清理部分測試程式碼,並在 Snapping 中新增更多範例。(Id8da9)。
- 引入
TargetedFlingBehavior
,這是一個FlingBehavior
,可讓您傳播有關目前動畫狀態的資訊,以及其目標捲動偏移量。(I6a207)
修正錯誤
BasicTextField2
現在會在輸入時,將游標保留在畫面中,即使游標已捲動至畫面外,或因輸入內容而移出畫面,也不例外。(Ieb856、b/237190748)
外部貢獻
- 新增實驗性 API,用於設定 LazyList 的預先載入行為。(I022a4)
1.7.0-alpha01 版
2024 年 1 月 24 日
發布 androidx.compose.foundation:foundation-*:1.7.0-alpha01
。1.7.0-alpha01 版包含這些修訂項目。
新功能
- 新增
Indication API
IndicationNodeFactory
。這會讓Indication
實作項目的效能比先前 (現已淘汰) 的rememberUpdatedInstance
API 更高。如需遷移相關資訊,請前往 developer.android.com。 clickable / combinedClickable / selectable / toggleable
現在可接受可為空值的MutableInteractionSource
參數。如果為空值,且提供的Indication
為IndicationNodeFactory
,則Indication
只會在需要時才以延遲方式建立,進而提升效能。如果您未提升並使用MutableInteractionSource
,建議您傳遞空值。
API 變更
- 在
AnchoredDraggable
中引入DecayAnimation
,這項變更會在AnchoredDraggable
中新增decayAnimationSpec
參數,以便在停留在其中一個錨點時使用衰減動畫。這項變更也包括將現有的animationSpec
重新命名為snapAnimationSpec
,以便瞭解每個規格的用途。 BasicTextField2
可供實驗使用。功能應與BasicTextField
大致相同,且行為應已準備好正式發布。不過,這個 API 目前仍處於實驗階段。在穩定前,會將其重新命名為BasicTextField
,並移至相同套件。- 推出
BasicTextField2
的OutputTransformation
API 第一版草稿。這個 API 可取代舊版BasicTextField
中VisualTransformation
的大部分用途。不過,這項功能尚未完成,有些功能無法正常運作,但我們很樂意聽取您對 API 可用性在您的用途上的任何意見。(aosp/2708848) - 推出
LinkAnnotation
,可在文字中加入連結和可點按項目。連結功能尚未完成,我們會陸續推出更多 API 變更。 - 推出
receiveContent
修飾符,讓開發人員在 Jetpack Compose 中接收多媒體內容。 receiveContent
會與BasicTextField2
整合,以便接受軟體鍵盤提供的多媒體內容,或透過剪貼簿貼上內容。KeyboardOptions.shouldShowKeyboardOnFocus
可讓您停用BasicTextField
的預設行為,也就是在聚焦時要求軟體鍵盤。TextInputService
和LocalTextInputService
現已淘汰。請改用PlatformTextInputModifierNode
直接整合平台 IME API。(aosp/2862698)- 淘汰了
Indication#rememberUpdatedInstance
。這會導致不可避免的效能損失,並阻止其他最佳化。請改用新的IndicationNodeFactory
API。
修正錯誤
BasicTextField
現在會在傳遞VisualTransformation
時,預先驗證一小部分偏移對應項目。這有助於找出導致後續測量或繪製階段發生無法復原例外的常見程式碼錯誤。在組合期間擲回錯誤,開發人員就更有可能在開發期間看到這些錯誤,進而避免在正式版中發生當機問題。(I0fd42)。- 如果您針對無效的索引傳回無效的索引,
VisualTransformation
就不會擲回 (b/316401857 )
1.6 版本
1.6.8 版
2024 年 6 月 12 日
發布 androidx.compose.foundation:foundation-*:1.6.8
。1.6.8 版包含這些修訂版本。
1.6.7 版
2024 年 5 月 1 日
發布 androidx.compose.foundation:foundation-*:1.6.7
。1.6.7 版包含這些修訂版本。
1.6.6 版
2024 年 4 月 17 日
發布 androidx.compose.foundation:foundation-*:1.6.6
。1.6.6 版包含這些修訂版本。
修正錯誤
- 修正在特定情況下,切換
TextField
的enabled
或readOnly
屬性會導致應用程式異常終止的問題。(Iae17b)。
1.6.5 版
2024 年 4 月 3 日
發布 androidx.compose.foundation:foundation-*:1.6.5
。1.6.5 版包含這些修訂項目。
修正錯誤
- 為難以重現的資料列/欄錯誤新增偵錯記錄:(b/300280216 和 b/297974033)
1.6.4 版
March 20, 2024
發布 androidx.compose.foundation:foundation-*:1.6.4
。1.6.4 版包含這些修訂項目。
修正錯誤
- 在拖曳動作的第一個影格中,長按再拖曳選取手勢會移出文字的版面配置邊界,不再發生異常終止。(Icdf90、b/325307463)。
1.6.3 版
2024 年 3 月 6 日
發布 androidx.compose.foundation:foundation-*:1.6.3
。1.6.3 版包含這些修訂版本。
1.6.2 版
2024 年 2 月 21 日
發布 androidx.compose.foundation:foundation-*:1.6.2
。1.6.2 版包含以下修訂項目。
修正錯誤
- 修正
AnimateContentSize
未正確重設的問題。(I07051)。 - 修正在某些情況下,文字的
intrinsicHeight
會過度快取的問題。(3cd398、b/217910352)。
1.6.1 版
2024 年 2 月 7 日
發布 androidx.compose.foundation:foundation-*:1.6.1
。1.6.1 版包含此連結所列的修訂項目。
修正錯誤
- 修正捲動超過限制時的錯開格線測量值。(bffc39)
- 新增檢查大尺寸版面配置的功能。(e74af5)。
- 修正交錯格線開頭處的 0 大小項目放置位置。(785f94)
- 按照與 onForgotten 相同的順序呼叫 onRelease 回呼。(31ce3b)
1.6.0 版
2024 年 1 月 24 日
發布 androidx.compose.foundation:foundation-*:1.6.0
。1.6.0 版包含以下修訂項目。
自 1.5.0 版以來的重要變更
- 新的修飾符
Modifier.anchoredDraggable
可讓您在預先定義的錨點組合之間拖曳並製作動畫。這個修飾符旨在取代Modifier.swipeable
。如要瞭解如何使用這個功能,以及從Modifier.swipeable
遷移,請參閱遷移指南。 - 新增應用程式和元件之間的拖曳功能。請參閱
DragAndDropTarget
、Modifier.dragAndDropSource
和其他 API 的說明文件,瞭解如何開始使用 Modifier.draggable2D
是新的修飾符,可輕鬆支援 2D 拖曳。請參閱「範例」。- 新增了
AndroidExternalSurface
和AndroidEmbeddedExternalSurface
,方便在 Compose 中新增表面驅動元件 Pager
和snapFlingBehaviour
中的各種 API 變更和改善項目- 各種焦點、文字和內嵌 API 已升級為穩定版 API
1.6.0-rc01 版
2024 年 1 月 10 日
發布 androidx.compose.foundation:foundation-*:1.6.0-rc01
。1.6.0-rc01 版包含以下修訂項目。
API 變更
- 已移除
DragAndDropTarget()
擴充功能建構函式。使用object: DragAndDropTarget {}
建立新例項。(I32318)。
1.6.0-beta03 版
2023 年 12 月 13 日
發布 androidx.compose.foundation:foundation-*:1.6.0-beta03
。1.6.0-beta03 版包含以下修訂項目。
修正錯誤
- 修正使用無限限制測量非常大的文字時發生的異常終止問題。(I1a7df、b/312294386)。
PlatformImeOptions
現在是具體類別,而不是介面。(If40a4)。
1.6.0-beta02 版
2023 年 11 月 29 日
發布 androidx.compose.foundation:foundation-*:1.6.0-beta02
。1.6.0-beta02 版包含以下修訂項目。
修正錯誤
- 修正在只重新排版捲動後,
canScroll
未更新的問題。(I60a86) - 修正在小幅捲動後,
Modifier.animateItemPlacement()
和LookaheadScope
的問題。(I3a2b7)。
1.6.0-beta01 版
2023 年 11 月 15 日
發布 androidx.compose.foundation:foundation-*:1.6.0-beta01
。1.6.0-beta01 版包含以下修訂項目。
API 變更
DragAndDropTarget
修飾符現在會明確接收DragAndDropTarget
,並提供 lambda 來選擇拖曳和放置工作階段。DragAndDropModifierNode
目前有兩個工廠函式。一個用於接收轉移作業,另一個用於轉移資料 (I69481)- 已更新
maximumFlingVelocity
,以便以浮點值表示。更新說明文件,更清楚說明maximumFlingVelocity
的一致性。(I8adc7)。 DragAndDropModifierNode
工廠中的onDragAndDropStart
已重新命名為acceptDragAndDropTransfer
。acceptsDragAndDropTransfer
已新增至dragAndDropTarget
Modifier
,以便接受拖曳工作階段。如果感興趣,這個 lambda 會傳回可行的DragAndDropTarget
。其他用於處理拖曳事件的 lambda 已由此取代。新增
DragAndDropTarget
工廠函式,可從拖曳與放置工作階段接收資料 (Iebf3a)在
AnchoredDraggable
中公開startDragImmediately
,即可控制偵測拖曳手勢時的使用方式。當小工具要以動畫效果前往目標錨點時,設定這項屬性會很有幫助。請參閱「範例」一節。(Ie6d13、b/285139987)。Foundation 工具提示 API 現為
@ExperimentalFoundationApi
(I30b0b)移除
DragAndDropInfo
,現在DragAndDropModifierNode.drag
會使用transferData
、裝飾大小和拖曳裝飾DrawScope
lambda 的參數DragAndDropTarget
有特定拖曳和放置事件的方法,而非單一抽象方法DragAndDropModifierNode
工廠函式中的onDragAndDropEvent
已重新命名為onDragAndDropStart
,以便更清楚說明提供的DragAndDropTarget
僅適用於特定拖曳和放置工作階段已移除
DragAndDropEventType
(I645b1)PlatformTextInputModifierNode.runTextInputSession
已重新命名為establishTextInputSession
。(I03cd0)。以
TextSubstitution
取代OriginalText
。(Ifa5a8)PlatformTextInputModifierNode.textInputSession
已重新命名為runTextInputSession
。(Ie9c6b)。SubcomposeLayout
的子項 (以及以此為基礎的LazyColumn
等版面配置) 會保留以供日後重複使用,因此會視為已停用。我們推出了新的assertIsDeactivated()
測試 API,用於測試這類節點。根據預設,其餘測試 API 會篩除已停用的節點。(I2ef84、b/187188981)。Modifier.magnifier
的clippingEnabled
參數已重新命名為clip
。Modifier.magnifier
的magnifierCenter
參數會設為可為空值,並保留相同的預設行為。(I6aa66)。Material
SwipeToReveal
API (適用於資訊卡和方塊) 現在會依據 Compose 建議,使用以版位為基礎的 API 而非以資料類別為基礎的例項,建立這些版位。這是一項破壞性的變更,請參閱示範和程式碼範例,瞭解如何使用新版 API。(Ia8943)。
修正錯誤
- 為
PageSize.Fixed
實作 equals 和 hashcode。(Ie3ede、b/300134276)。 - 修正了在
minWidth
變更且minWidth
小於初始測量限制maxWidth
時,會導致BasicText
版面配置不會縮小的錯誤 (Idb19c) - 在
ArcLine
中新增掃描漸層的轉譯器支援。(I4d5bb)。 - 修正 Window Inset 變更的二進位檔相容性問題 (Iee695)
- 移除 Material3 Chip/Button 的 Material 核心層,因為微基準測試顯示移除後的效能較佳。(I55555)。
1.6.0-alpha08 版
2023 年 10 月 18 日
發布 androidx.compose.foundation:foundation-*:1.6.0-alpha08
。1.6.0-alpha08 版包含以下修訂項目。
新功能
Modifier.draggable2D
是新的修飾符,可輕鬆支援 2D 拖曳。請參閱範例 (Id95f5、b/214412658)
API 變更
Modifier.dragAndDrawSource
的onDrawDragShadow
lambda 已重新命名為drawDragDecoration
,DragAndDropInfo
的 size 參數則已重新命名為dragDecorationSize
。(Id0e30、b/303904810)。BasicTextField2
的decorationBox
參數已重新命名為decorator
。其類型也變更為等同的 fun 介面TextFieldDecorator
。(I23c1c)
修正錯誤
- 改善
BasicTextField
的說明文件,以便瞭解onValueChange
規定。(I90fc9、b/160257648)。
1.6.0-alpha07 版
2023 年 10 月 4 日
發布 androidx.compose.foundation:foundation-*:1.6.0-alpha07
。1.6.0-alpha07 版包含以下修訂項目。
API 變更
- 推出
PlatformTextInputMethodTestOverride
,可用於編寫自訂文字編輯器的測試。(Id159b)。 - 已將
GraphicsSurface
重新命名為AndroidExternalSurface
(I11680) - 新增
DisableNonLinearFontScalingInCompose
暫時性標記,以停用非線性字型縮放功能。如果您需要時間來清理測試,請在測試中設定DisableNonLinearFontScalingInCompose = true
。這個標記會在 Compose 1.6.0-beta01 中移除。(Ic9486) - 新增可避免配置的
ColorList
和ColorSet
集合。(I744bd)。 - 這項變更會移除
shortSnapVelocityThreshold
,該項目已轉換為SnapLayoutInfoProvider
實作項目的實作詳細資料。(I65f6d) - 新增
dragAndDropSource
修飾符,用於啟動拖曳和放置工作階段,以及dragAndDropTarget
修飾符,用於從拖曳和放置工作階段接收資料 (Ib7828、b/286038936) - 更新
SnapPositionInLayout
說明文件和位置方法。在SnapPositionInLayout
中,將內容邊框間距引入至位置方法。(Id7938、b/300116110)。 - 將
UndoState
新增至TextFieldState
,可讓使用者復原/重做所做的變更。(Icc024)
修正錯誤
- 修正
basicMarquee
在速度變更後不會動畫的問題。(Id2e77、b/297974036)。
1.6.0-alpha06 版
2023 年 9 月 20 日
發布 androidx.compose.foundation:foundation-*:1.6.0-alpha06
。1.6.0-alpha06 版包含以下修訂項目。
新功能
- 針對
SurfaceView
、TextureView: GraphicsSurface()
和EmbeddedGraphicsSurface()
提供新的可組合函式包裝函式。這是實驗性質的 API,可能會變更和修改。(I9ddb2)。 Modifier.magnifier()
現在是穩定版 API。這包括移除MagnifierStyle
,並在修飾符中使用內嵌參數。(I83bec、b/298381260、b/262367109、b/261438887)。
API 變更
- 在
ScrollScope
中引入updateCurrentPage
和updateTargetPage
,這是透過PagerState.scroll
自訂動畫捲動畫面所需的最後一個部分。(I9cad5、b/267744105、b/243786897)。 - 從
SnapFlingBehavior
中移除密度。所有SnapLayoutInfoProvider
實作項目都已具備存取密度的做法,因此可以移除接收器範圍,進而簡化SnapFlingBehavior
和SnapLayoutInfoProviders
的實作方式。(I153c3) - 更多已標示為穩定的修飾符。(I56af1、b/298046462)。
- 已從
SnapLayoutInfoProvider
中移除SnapStepSize
。計算應使用版面配置資訊,並透過方法或對齊偏移提供。(If320c)
行為變更
- Compose 現在採用非線性字型縮放功能,可改善可讀性和無障礙性。如果系統設定中的字型縮放比例大於 100%,小字型會正常放大,但原本就大的字型只會放大一點點。此外,在 SP 中定義的行高會自動調整,以便與 100% 比例的預期高度保持比例。詳情請參閱「字型縮放最佳做法」(I11518)。
修正錯誤
- 移除使用
rememberSaveable
的工具提示。(Icc131、b/299500338)。
1.6.0-alpha05 版
2023 年 9 月 6 日
發布 androidx.compose.foundation:foundation-*:1.6.0-alpha05
。1.6.0-alpha05 版包含以下修訂項目。
API 變更
- 為
BasicSecureTextField
新增多載,接受不可變的值和回呼來變更該值,就像目前的BasicTextField
API 一樣。(Ia4882)。 - 新增
Modifier.preferKeepClear()
標示為可組合函式,在 API 33 以上版本中偏好清除浮動視窗。(Ib51d5、b/297260115)。 ScrollView
和RecyclerView
等 View 元件的甩動速度上限為ViewConfiguration.ScaledMaximumFlingVelocity
。Compose 現在包含自己的maximumFlingVelocity
版本,現在可套用至Draggable
。(Ibf974)- 已移除淘汰的
Pager
和PagerState
超載。(Iea07e)。 - 將
BasicTooltipBox
新增至compose.foundation
,並更新PlainTooltipBox
和RichTooltipBox
,以便使用TooltipBox
和新的PlainTooltip
和RichTooltip
可組合函式。(I79e1d)
1.6.0-alpha04 版本
2023 年 8 月 23 日
發布 androidx.compose.foundation:foundation-*:1.6.0-alpha04
。1.6.0-alpha04 版本包含以下修訂版本。
API 變更
- 新增
ReusableComposition
介面,用於管理子組合物的生命週期和重複使用。(I812d1、b/252846775)。 Modifier.focusGroup
已升級為穩定版 API。(I7ffa3)。- 為
BasicTextField2
新增多載,接受不可變的值和回呼來變更該值,就像目前的BasicTextField
API 一樣。(I3f2b8)。 GridItemSpan::currentLineSpan
現在是穩定版 API。(Icc29c)。- 接受
contentDescription
的畫布現在是穩定版 API。(Ib3d29)。 - 在
ScrollState
中引入viewportSize
,這是一種在測量完成後,瞭解使用ScrollState
的元件viewPort
大小的方法。(I8b85a、b/283102682)。 - 修正 Pager 中的預先載入行為與 View 中的行為不一致的問題。(I93352、b/289088847)。
Modifier.consumeWindowInsets(PaddingValues)
現已穩定。Deprecated Modifier.consumedWindowInsets
API 現已移除。請改用Modifier.consumeWindowInsets
。(Id72bb)。
1.6.0-alpha03 版本
2023 年 8 月 9 日
發布 androidx.compose.foundation:foundation-*:1.6.0-alpha03
。1.6.0-alpha03 版包含以下修訂項目。
API 變更
- 新增
LazyLayout
超載,可接受LazyLayoutItemProvider
的 lambda,而非先前的一般物件。先前的超載已淘汰。(I42a5a)。 - 新增了
privateImeOptions
設定支援功能 (Idb772)
修正錯誤
- 修正文字欄位在
readOnly
為 True 時顯示鍵盤並可編輯的情形。此外,當readOnly
在取得焦點時從 true 變更為 false 時,系統不會顯示鍵盤的問題也已修正。(I34a19、b/246909589)。
1.6.0-alpha02 版本
2023 年 7 月 26 日
發布 androidx.compose.foundation:foundation-*:1.6.0-alpha02
。1.6.0-alpha02 版包含以下修訂項目。
API 變更
- 在
Pager
中引入PagerLayoutInfo
,其中包含在Pager
中測量值傳遞後收集的資訊。也引入了PageInfo
,這是Pager
中單一評估網頁的相關資訊。(Iad003、b/283098900)。 - 額外註解,用於指定可向可組合函式輸入的內容 (I51109)
- 新增
SemanticsNodeInteraction.requestFocus
,讓您在測試中要求焦點,這也是更方便且容易發現的方式。(Ie8722)。 - 完全重新設計的
PlatformTextInput*
API。(I6c93a、b/274661182、b/267235947、b/277380808)。 SoftwareKeyboardController
及LocalSoftwareKeyboardController
不再是實驗版,LocalSoftwareKeyboardController
現在也是正確的CompositionLocal
。(I4c364)。Modifier.transformable
現在會在canPan
參數中提供捲動差異,協助判斷捲動方向是否允許或禁止。(I692aa、b/266829800)。- 更新修飾詞
consumeWindowInsets
,以延伸父類別AbstractComposeView
(Iacd74、b/269479941)
1.6.0-alpha01 版本
2023 年 6 月 21 日
發布 androidx.compose.foundation:foundation-*:1.6.0-alpha01
。1.6.0-alpha01 版包含這些修訂項目。
新功能
- 在 Foundation 中推出新的
AnchoredDraggable
API。可用來建構可在不同狀態之間拖曳的元件,例如模態底部資訊列。這個 API 會取代 Material 的Swipeable
API。(I4a2ed)
API 變更
- 支援
InputConnection#requestCursorUpdates
(I0c69b) - 推出
scrollAnimationSpec
,以便自訂動畫規格。已將BringIntoViewCalculator
更新為BringIntoViewScroller
。(Idb741)。 - 新增
ResourceResolutionException
類型,以便在嘗試載入點陣圖資產時,將無法載入的資產路徑說明納入擲回的例外狀況。(I19f44、b/230166331、b/278424788)。 - 新增語意屬性和動作,以支援文字翻譯。(I4a6bc)
- 推出
BringIntoViewCalculator
API,可用於自訂Scrollable
等元件回應bringIntoView
要求的方式。變更 scrollable 的多載,讓其可選擇接受BringIntoViewCalculator
的例項。(Iaf5af)。
修正錯誤
- 新增了 Lint 檢查功能,如果您在組合中建立
MutableInteractionSource
但未記住該組合,系統就會發出警告,這類似於建立可變動狀態 /Animatable
的 Lint 檢查。(I5daae) - 新增滑鼠選取功能。觸控選取功能會以字詞為單位擴大選取範圍,以字元為單位縮小選取範圍。(Ic0c6c、b/180639271)。
- 新增
FocusTargetModifierNode
介面,可用於建立自訂FocusTarget
。(I9790e)。
1.5 版本
1.5.4 版本
2023 年 10 月 18 日
發布 androidx.compose.foundation:foundation-*:1.5.4
。1.5.4 版包含以下修訂項目。
1.5.3 版本
2023 年 10 月 4 日
發布 androidx.compose.foundation:foundation-*:1.5.3
。此版本沒有任何變更。
1.5.2 版本
2023 年 9 月 27 日
發布 androidx.compose.foundation:foundation-*:1.5.2
。1.5.2 版包含以下修訂項目。
修正錯誤
- 修正文字中的錯誤,在某些情況下,當語義無效時會導致當機。
1.5.1 版本
2023 年 9 月 6 日
發布 androidx.compose.foundation:foundation-*:1.5.1
。1.5.1 版包含此連結所列的修訂項目。
修正錯誤
- 修正文字欄位在
readOnly
為 True 時顯示鍵盤並可編輯的情形。此外,當readOnly
在取得焦點時從 true 變更為 false 時,系統不會顯示鍵盤的問題也已修正。(I34a19、b/246909589)。
1.5.0 版本
2023 年 8 月 9 日
發布 androidx.compose.foundation:foundation-*:1.5.0
。1.5.0 版包含此連結所列的修訂項目。
自 1.4.0 版以來的重要異動
- 許多基礎修飾符 (包括
Modifier.clickable
、Modifier.draggable
、Modifier.scrollable
、版面配置修飾符等) 已遷移至Modifier.Node
API,可減少初始組合的額外負擔。 - 改善 Pager 的穩定性。已修正許多錯誤。
pageCount
參數現在位於PagerState
中,而非 Pager 本身
1.5.0-rc01 版
2023 年 7 月 26 日
發布 androidx.compose.foundation:foundation-*:1.5.0-rc01
。1.5.0-rc01 版包含此連結所列的修訂項目。
修正錯誤
您可以使用選用檢查功能,建議將
mutableStateOf()
呼叫遷移至對應的基礎類型。其 Lint ID 為AutoboxingStateCreation
。先前,系統會預設為所有專案啟用這項檢查項目。如要在 Android Studio 的編輯器和專案的 Lint 輸出中顯示這項警告,請在模組的build.gradle
或build.gradle.kts
設定中宣告warning "AutoboxingStateCreation"
,將嚴重性從資訊性變更為警告 (或更高),如圖所示 (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
1.5.0-beta03 版
2023 年 6 月 28 日
發布 androidx.compose.foundation:foundation-*:1.5.0-beta03
。1.5.0-beta03 版包含以下修訂項目。
1.5.0-beta02 版
2023 年 6 月 7 日
發布 androidx.compose.foundation:foundation-*:1.5.0-beta02
。1.5.0-beta02 版包含以下修訂項目。
1.5.0-beta01 版
2023 年 5 月 24 日
發布 androidx.compose.foundation:foundation-*:1.5.0-beta01
。1.5.0-beta01 版包含此連結所列的修訂項目。
API 變更
- 實作
PlatformDataProvider
以提供心率和每日步數。SensorGateway
介面已從公用 API 中移除。(I55b84)。
修正錯誤
- 在延遲清單/格線/等測量期間減少分配 (Iaf9e2)
- 套用快照時減少配置 (I65c09)
- 從彈簧動畫中移除配置 (Ie9431)
- 從
TextLayout
中移除分配 (I0fd11) - 移除指標速度追蹤中的多重配置 (I26bae)
1.5.0-alpha04 版
2023 年 5 月 10 日
發布 androidx.compose.foundation:foundation:1.5.0-alpha04
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha04
。1.5.0-alpha04 版包含以下修訂項目。
API 變更
- 新增經過最佳化的
TextStyle.merge(...)
,並提供完整的參數清單。(Iad234、b/246961787)。 - 引入可與
LazyGridState
搭配使用的SnapLayoutInfoProvider
。(I92134、b/269237141、b/260914964)。 - 實驗性
Modifier.animateItemPlacement()
已新增至延遲不規則格線項目範圍。您可以將其套用至項目,以便實現自動化位置變更/重新排序動畫。(I4b62d、b/257034719) - 將
GridCells.FixedSize
升級為穩定版。FixedSize
定義LazyGrid
,其中每個儲存格在交叉軸上均採用確切大小,而剩餘空間則由交叉軸排列方式分配。(I8542f)。 - 為 Pager 引入接收器範圍
PagerScope
,以及用於計算指定頁面偏移值的工具函式。(If2577)。 - 建立貼齊快速滑過行為時,請引入
snapPositionalThreshold
。您可以使用這個參數,在 Pager 中指定位置門檻,以便短暫貼齊。(If8f7f) - 以
calculateSnappingOffset
取代SnapLayoutInfoProvider.calculateSnappingOffsetBounds
。在這個新方法中,我們只需要求下一個要對齊的偏移量。邊界計算應在實作層級執行,因為這可能因需要的對齊方式而有所不同。(I923a4) LazyStaggeredGrid
API 已升級為穩定版。(I633a5)。- 從
Horizontal/VerticalPager
移除pageCount
。應在建立狀態時提供。已更新PagerState
和rememberPagerState
,以便接受pageCount
。(Ieb52d、b/266965072) - 從
Horizontal/VerticalPager
移除pageCount
。應在建立狀態時提供。已更新PagerState
和rememberPagerState
,以便接受pageCount
。(Ifa3cb、b/266965072)。 - 在 Pager 的
SnapFlingBehavior
中引入shortSnapVelocityThreshold
。(I7379e、b/275579012)。 - 新增
FlowRowScope
和FlowColumnScope
。(I54fe2)
修正錯誤
- 當限制項包含
minWidth
和minHeight
時,呼叫 Text 的語意不再發生當機。(Ibd072)。 - 修正迴歸問題:如果對話方塊不是由
Dialog
可組合項建立,則不會顯示文字欄位的鍵盤。(I82551、b/262140644)。
1.5.0-alpha03 版
2023 年 4 月 19 日
發布 androidx.compose.foundation:foundation:1.5.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha03
。1.5.0-alpha03 版包含以下修訂項目。
這個版本會為 Compose 啟用新的文字算繪堆疊。新的程式碼堆疊已進行效能最佳化,因此您應該不會看到任何明顯變更。
如果您發現轉譯文字有變更,可以設定 NewTextRendering1_5 = false
來進行偵錯,確認行為差異。設定這項值會強制重組。請將任何行為差異回報為錯誤。
偵錯標記會在 1.5 beta01 版本發布前移除。(Iada23、b/246960758)
API 變更
- 將
FlowColumn/FlowRow
設為內嵌。(Idab37)。
1.5.0-alpha02 版
2023 年 4 月 5 日
發布 androidx.compose.foundation:foundation:1.5.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha02
。1.5.0-alpha02 版包含以下修訂項目。
API 變更
- 新增對
LazyGrid
中固定大小的儲存格支援,並以交叉軸排列方式排列這些儲存格。(I83ed9、b/235121277、b/267942510)。 - 新增支援
LazyStaggeredGrid
中的固定大小車道,並以交叉軸排列方式排列車道。(I7d519)。 AnnotatedString
中的UrlAnnotation
現在可透過TalkBack
等無障礙服務開啟。(If4d82、b/253292081)。- 新增文字欄位的
InsertTextAtCursor
語意動作。(I11ed5) - 文字相關測試動作 (例如
performTextInput
) 現在會使用語意動作直接要求聚焦,而非點選欄位。(I6ed05) - 新增支援使用
FlowRow
中的verticalArrangement
和FlowColumn
中的horizontalArrangement
進行跨軸間距/排列。我們也會移除FlowRow/FlowColumn
中的頂層verticalAlignment
和horizontalAlignment
。開發人員可以改用Modifier.align
。這樣可避免verticalAlignment
和verticalArrangement
的命名慣例造成混淆。(I87b60、b/268365538)
1.5.0-alpha01 版本
2023 年 3 月 22 日
發布 androidx.compose.foundation:foundation:1.5.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha01
。1.5.0-alpha01 版包含以下修訂項目。
API 變更
- 文字和
BasicText
已重構,以便使用新的修飾符系統。這麼做可在許多情況下大幅改善效能。畫面上不會顯示任何變更。(If1d17、b/246961435)。 - 新增
PerformImeAction
語意動作,用於在文字編輯器節點上叫用 IME 動作。(Ic606f、b/269633506)。
修正錯誤
- 已更新
Modifier.hoverable
的內部元件。只有在啟用hoverable
修飾符時,才會顯示在檢查器中。(I82103)
1.4 版
1.4.3 版本
2023 年 5 月 3 日
發布 androidx.compose.foundation:foundation:1.4.3
和 androidx.compose.foundation:foundation-layout:1.4.3
,但沒有任何變更 (僅升級版本)。
1.4.2 版
2023 年 4 月 19 日
發布 androidx.compose.foundation:foundation:1.4.2
和 androidx.compose.foundation:foundation-layout:1.4.2
。1.4.2 版包含以下修訂項目。
1.4.1 版本
2023 年 4 月 5 日
發布 androidx.compose.foundation:foundation:1.4.1
和 androidx.compose.foundation:foundation-layout:1.4.1
。1.4.1 版包含此連結所列的修訂項目。
1.4.0 版本
2023 年 3 月 22 日
發布 androidx.compose.foundation:foundation:1.4.0
和 androidx.compose.foundation:foundation-layout:1.4.0
。1.4.0 版本包含這些修訂版本。
自 1.3.0 版以來的重要異動
- 已在
Text
和TextField
以及較低層級的 Paragraph 中新增表情符號相容性整合功能。在設定 emojicompat 時,系統會預設啟用這項功能。 - 您可以使用
PlatformParagraphStyle
在特定文字上設定EmojiCompat
。 - 支援完整行距
LazyStaggeredGrid
(I28252) - 在
ClickableText
中新增實驗性的onHover
( I6938f) - 針對接受
CoroutineContext
參數的runComposeUiTest
函式和create*ComposeRule
函式,推出新的實驗性超載。結構定義將用於測試組合及當中的LaunchedEffect
和rememberCoroutineScope()
呼叫。(I10614、b/265177763) FlowRow
和FlowColumn
現已用@ExperimentalFoundationApi
的形式提供,可在主軸空間不足時,針對會斷行的元件提供更彈性的列與欄式版面配置 (I3a7b2)。- 提供
Modifier.basicMarquee()
實驗性功能,可在顯示內容時呈現捲動式跑馬燈效果 (I2df44、b/139321650)。
1.4.0-rc01 版本
2023 年 3 月 8 日
發布 androidx.compose.foundation:foundation:1.4.0-rc01
和 androidx.compose.foundation:foundation-layout:1.4.0-rc01
。1.4.0-rc01 版包含以下修訂項目。
API 變更
- 推出新的低階
PlatformTextInputAdapter
API,可用於建構直接與平台 API 通訊的自訂文字輸入實作項目。(I58df4) - 在
LazyStaggeredGrid
中新增反向版面配置支援。(I3ef4a)
修正錯誤
BasicTextField
的SetText
語意動作現在會使用與 IME 更新和測試函式 (例如performTextReplacement
) 相同的程式碼路徑來更新文字緩衝區。- 文字測試函式
performTextClearance
、performTextReplacement
和performTextSelection
現在使用SemanticsActions
。(I0807d、b/269633168、b/269624358)。
1.4.0-beta02 版本
2023 年 2 月 22 日
發布 androidx.compose.foundation:foundation:1.4.0-beta02
和 androidx.compose.foundation:foundation-layout:1.4.0-beta02
。1.4.0-beta02 版包含以下修訂項目。
API 變更
- 新增
Modifier.Node.onReset()
回呼,讓您重設部分本機狀態,以便在Layout
重複使用時妥善處理情況 (例如做為LazyColumn
的項目)。修正FocusTargetModifierNode
,以便妥善重設聚焦狀態。(I65495、b/265201972)。 - 已將
BlendMode
參數新增至DrawScope.drawText
、Paragraph.paint
和MultiParagraph.paint
方法,以便在畫布上繪製文字時支援不同的混合演算法。(I57508)。 - 已移除
modifierElementOf()
API。請改為直接從ModifierNodeElement
擴充。(Ie6d21)
修正錯誤
- 調整選取手柄後,系統將無法再選取部分字元。(Idedd1)。
- 修正在空白
TextField
上按 Ctrl+退格鍵時發生的當機問題 (I0427f、b/244185537)
1.4.0-beta01 版本
2023 年 2 月 8 日
發布 androidx.compose.foundation:foundation:1.4.0-beta01
和 androidx.compose.foundation:foundation-layout:1.4.0-beta01
。1.4.0-beta01 版包含此連結所列的修訂項目。
新功能
- 自 1.3 版起,我們已在
Text
和TextField
以及較低層級的 Paragraph 中加入 Emoji 相容性整合功能。在設定 emojicompat 時,系統會預設啟用這項功能。 - 您可以使用
PlatformParagraphStyle
在特定文字上設定EmojiCompat
。
API 變更
- 新增所有
LazyLayouts
中使用的PinnableContainer
API 常見實作項目,以保留退出組合但仍需保持活動的項目。(If45a4) PinnableContainer.PinnedHandle.unpin()
已重新命名為release()
(I4667a)。
外部貢獻
- 在
LazyListLayoutInfo
、LazyGridLayoutInfo
和LazyStaggeredGridItemInfo
中新增mainAxisItemSpacing
屬性 (I52fad)
1.4.0-alpha05 版
2023 年 1 月 25 日
發布 androidx.compose.foundation:foundation:1.4.0-alpha05
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha05
。查看 1.4.0-alpha05 版的修訂項。
新功能
- 支援完整行距
LazyStaggeredGrid
(I28252) - 在
ClickableText
中新增實驗性的onHover
(I6938f) - 針對接受
CoroutineContext
參數的runComposeUiTest
函式和create*ComposeRule
函式,推出新的實驗性超載。結構定義將用於測試組合及當中的LaunchedEffect
和rememberCoroutineScope()
呼叫。(I10614、b/265177763)
API 異動
- 將
OverscrollEffect
的前/後 API 合併至組合的「裝飾器」applyToScroll
和applyToFling
函式。請參閱說明文件中的更新範例,瞭解如何以新 API 的形式實作過度捲動效果。(I8a9c4、b/255554340) - 針對內嵌函式/已淘汰的隱藏函式,提供更多類型/是否可為空值選項 (I24f91)
TextStyle
中的LineBreak
和Hyphens
API 升級為穩定版。(Ic1e1d)
修正錯誤
- 即使停用動畫,文字欄位中的游標也會持續閃爍。(I95e70、b/265177763)
- 即使在系統設定中停用動畫,
Modifier.basicMarquee
也會顯示動畫效果。(I23389、b/262298306、b/265177763)
外部貢獻
TextInputSession
和TextInputService
中的notifyFocusedRect
方法不會再次淘汰。(I23a04、b/262648050)
1.4.0-alpha04 版本
2023 年 1 月 11 日
發布 androidx.compose.foundation:foundation:1.4.0-alpha04
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha04
。查看 1.4.0-alpha04 版的修訂項。
新功能
FlowRow
和FlowColumn
現已用@ExperimentalFoundationApi
的形式提供,可在主軸空間不足時,針對會斷行的元件提供更彈性的列與欄式版面配置 (I3a7b2)。- 提供
Modifier.basicMarquee()
實驗性功能,可在顯示內容時呈現捲動式跑馬燈效果 (I2df44、b/139321650)。
API 變更
FocusRequesterModifier
已淘汰,並改用FocusRequesterNode
(I7f4d7、b/247708726、b/255352203、b/253043481、b/247716483、b/254529934、b/251840112、b/251859987、b/257141589)。- 包含
variationSettings
的AndroidFont
建構函式現在是穩定版 API,可用於建立新類型的字型描述元 (I5adcc、b/261565807)。 - 透過本機組合導入可由 Lazy 清單提供的
PinnableContainer
API,藉此固定目前項目。也就是說,當這類項目因為捲動操作而超出檢視區塊時,並不會遭到捨棄。舉例來說,Modifier.focusable()
會透過這個機制固定目前聚焦的項目 (Ib8881、b/259274257、b/195049010)。 - 重新編寫可捲動項目回應
bringIntoViewRequesters
和可聚焦項目的方式,進一步模擬這些作業的複雜度並處理更多極端情況 (I2e5fe、b/241591211、b/192043120、b/237190748、b/230756508、b/239451114)。 - 更多已淘汰隱藏函式的傳回類型為空值 (Ibf7b0)。
- 新增實驗性
TextMotion
至TextStyle
,將文字定義為Static(default)
或動畫。如要透過動畫縮放、變換或旋轉文字,請使用TextMotion.Animated
(I24dd7)。 - 新增
TextFieldFocusModifier
,修正 Android 平台的焦點導覽行為 (I00303)。 - 將
drawText
中的maxSize: IntSize
引數替換為size: Size
,以便內嵌於其他DrawScope
函式。size
預設為Size.Unspecified
,這應該不會變更先前的預設行為 (Icd27d)。
修正錯誤
- 調整
SnapFlingBehaviour
中的貼齊物理行為,讓效果更自然。
已知問題
- 從
androidx.compose.foundation:1.4.0-alpha03
更新為androidx.compose.foundation:1.4.0-alpha04
時,您可能會遇到java.lang.NoSuchFieldError
錯誤,這個網頁是最初回報問題的地方。我們已提交修正程式,預計下次 Compose 更新時就會發布。目前暫時性的解決方法是將androidx.compose.material
和androidx.compose.material3
程式庫更新為最新版本 (1.1.0-alpha04),或將androidx.compose.foundation
降級為 1.4.0-alpha03。
1.4.0-alpha03 版本
2022 年 12 月 7 日
發布了 androidx.compose.foundation:foundation:1.4.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha03
。查看 1.4.0-alpha03 版的修訂項。
API 變更
- 在使用 Compose 規則的 UI 測試中,系統會等所有影格回呼執行完畢,才會分派在
withFrameNanos
回呼期間恢復的連續作業。這與 Compose 正常執行時的行為相符。不過,仰賴舊行為的測試可能會失敗。這只會影響直接呼叫withFrameNanos
或withFrameMillis
的程式碼,並將回呼外的邏輯傳遞至可能需要在回呼內移動的函式。請參閱這份 CL 範例中的動畫測試變更。 - 將選用的
onPerformTraversals: (Long) -> Unit
參數新增至TestMonotonicFrameClock
建構函式和工廠函式,以便在withFrameNanos
回呼之後和重新啟用呼叫端協同程式之前執行程式碼。(Idb413、b/254115946、b/222093277、b/255802670) - 導入頁面無障礙動作:
PageUp
、PageDown
、PageLeft
、PageRight
。請注意,這些內容僅適用於 API 29。(Ida4ab) - 導入
HorizontalPager
和VerticalPager
,以 Pager 方式顯示可組合項。導入PagerState
,藉此控制 Pager 和 Pager 目前狀態的查詢資訊。導入PageSize
,這是控制 Pager 頁面大小的一種方法,可用來建立類似 Pager 的輪轉介面。導入PagerSnapDistance
,可控制貼齊功能在 Pager 的快速滑過行為的運作方式。(I01120) - 已在
SnapFlingBehavior.performFling
中引入超載,幫助您瞭解快速滑過發生的位置。(I569f6) - 已移除
OverscrollEffect#isEnabled
。您不必記住並設定這個標記,而不要在不顯示過度捲動的情況下,將事件分派到過度捲動效果 (例如,如果ScrollableState#canScrollForward/backward
都傳回 false)。(I1a4b0、b/255554340、b/255557085) - 新增
ScrollableState#canScrollForward
和ScrollableState#canScrollBackward
以查詢ScrollableState
是否有向任何方向捲動的空間 (是否位於其範圍的最小 / 最大範圍內)。為了兼顧與ScrollableState
現有實作的回溯相容性,這個欄位預設為 true。取用者可利用這項功能,向使用者顯示指示,讓使用者知道是否還有捲動空間;也可以用於避免將差異遷移調度至ScrollableStates
,其沒有空間在指定方向捲動,以減少不必要的工作。(Idf1a0、b/255557085) - 新增用於查詢祖系捲動資訊的 Modifier API。(I2ba9d、b/203141462)
- 如果手勢可能產生捲動事件,用在
Clickable
中可正確延遲按下的互動動作。 - 修正了在
Scrollable ViewGroup
中使用Clickables
時無法正確延遲漣漪效果的問題。 - 更新導覽匣和試算表,以便在手勢變為捲動事件時正確延遲按下動作。
- 更新
snapStepSize
命名方式,使其與SnapLayoutInfoProvider
中的其他方法保持一致。(Ife67c) - 將
EmojiCompat
新增至Compose
(Ibf6f9、b/139326806) - 已將
consumedWindowInsets()
重新命名為consumeWindowInsets()
,並將withConsumedWindowInsets()
重新命名為onConsumedWindowInsetsChanged()
,並將修飾符設為公開。(Ie44e1)
修正錯誤
- 修正
Modifier.animateItemPlacement()
和 Lazy 格線異常終止的問題。以前若新項目的數量比先前的項目少,有時就會發生這種情況。(I0bcac、b/253195989)
1.4.0-alpha02 版本
2022 年 11 月 9 日
發布了 androidx.compose.foundation:foundation:1.4.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha02
。1.4.0-alpha02 版本包含以下修訂項目。
API 變更
awaitFirstDown
和waitForUpOrCancellation
現在接受PointerEventPass
,靈活性更高 (I7579a、b/212091796)。- 從 Lazy* API 還原
beyondBoundCount
API (I12197) - 在 Lazy API 中導入了參數,用於撰寫和放置可視區域外項目 (I69e89、b/172029355)
- 在
BasicText
和BasicTextField
中新增了minLines
參數。這樣即可使用行數來設定這些可組合項的最小高度 (I24294、b/122476634)
1.4.0-alpha01 版
2022 年 10 月 24 日
發布了 androidx.compose.foundation:foundation:1.4.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha01
。1.4.0-alpha01 版本包含這些修訂版本。
API 變更
- 新增了適用於手勢偵測工具的新方法:
awaitEachGesture()
。運作方式與forEachGesture()
類似,但手勢的迴圈完全在AwaitPointerEventScope
內運作,因此事件不會在疊代之間遺失。 - 由於
forEachGesture()
會導致事件在手勢間遺失,因此已將其淘汰並改用awaitEachGesture()
(Iffc3f、b/251260206) - 新增
WindowInsets.imeAnimationSourc
e 和WindowInsets.imeAnimationTarget
,可協助判斷動畫進度,並掌握輸入法編輯器在動畫結束後的位置 (I356f1、b/217770337)
1.3 版本
1.3.1 版本
2022 年 11 月 9 日
發布了 androidx.compose.foundation:foundation:1.3.1
和 androidx.compose.foundation:foundation-layout:1.3.1
。1.3.1 版包含以下修訂項目。
修正錯誤
- 修正
BeyondBoundsLayout
中的效能問題 (aosp/2255266) - 除非附加
ContentInViewModifier
,否則不會讀取版面配置座標 (aosp/2241316)
1.3.0 版本
2022 年 10 月 24 日
發布了 androidx.compose.foundation:foundation:1.3.0
和 androidx.compose.foundation:foundation-layout:1.3.0
。1.3.0 版本包含以下修訂項目。
自 1.2.0 版以來的重要異動
- 推出
LazyVerticalStaggeredGrid
和LazyHorizontalStaggeredGrid
的實驗版本。 - 已將
SnapFlingBehavior
、rememberSnapFlingBehavior
和其他對應的 API 新增為實驗功能。 - 現在,如果使用鍵盤或遙控器上的 D-Pad 按一下
Modifier.clickable
、Modifier.toggleable
和Modifier.selectable
,會顯示漣漪效果。
1.3.0-rc01 版本
2022 年 10 月 5 日
發布了 androidx.compose.foundation:foundation:1.3.0-rc01
和 androidx.compose.foundation:foundation-layout:1.3.0-rc01
。1.3.0-rc01 版本包含以下修訂項目。
API 變更
- 在沒有足夠的快速滑過速率可減慢時,採用方法步驟使用的
lowVelocityAnimationSpec
(Iaeb27) - 新增了實驗性 API Hyphens,以支援 Text 中的自動連字號 (Iaa869)
1.3.0-beta03 版本
2022 年 9 月 21 日
發布了 androidx.compose.foundation:foundation:1.3.0-beta03
和 androidx.compose.foundation:foundation-layout:1.3.0-beta03
。1.3.0-beta03 版本包含以下修訂項目。
API 變更
- 新增自訂文字斷行選項 (I86907)
BringIntoViewResponder
現在在處理要求時,可以取得最新的邊界 (If86a5、b/241591211)。- 實驗性
Staggered Grid
現在支援項目間距 (I10b82) - 在實驗性
Staggered Grid
新增內容邊框間距 (I342ea) - 變更
TextMeasurer.measure
方法中的size:IntSize
引數與constraints: Constraints
,來處理最小的寬度限制 (I37530、b/242707525) - 新增
Modifier.withConsumedWindowInsets()
,這個函式會取得已使用的WindowInsets
,可供在windowInsetsPadding
之外使用。 - 新增了
MutableWindowInsets
,以便在不重新組合的情況下輕鬆變更WindowInsets
(I7fd28、b/237019262、b/243119659)
1.3.0-beta02 版本
2022 年 9 月 7 日
發布了 androidx.compose.foundation:foundation:1.3.0-beta02
和 androidx.compose.foundation:foundation-layout:1.3.0-beta02
。1.3.0-beta02 版本包含以下修訂項目。
API 變更
- 實驗性
StaggeredGrid
的初始版本 (Ia48be) - 已將
FocusDirection.In
和FocusDirection.Out
重新命名為FocusDirection.Enter
和FocusDirection.Exit
(Ia4262、b/183746982) - 推出了
rememberSnapFlingBehavior
超載,以便快速在LazyLists
中啟用貼齊功能 (Ifb48a) - 使用具體的
SnapFlingBehavior
類別取代了snapFlingBehavior
工廠。將SnapLayoutInfoProvider
方法的範圍限定為「密度」,讓 API 使用者更容易進行 Dp<->Px 轉換 (I54a11) - 更新
LazyLayoutMeasureScope.measure
以傳回可置放的值清單,突顯傳回的值所需的不變性 (I48b7c) - 推出了
SnapLayoutInfoProvider
,取用LazyListState
來建立SnapLayoutInfoProvider
的執行個體,可用於為LazyLists
啟用貼齊FlingBehavior
(I2dd10)
修正錯誤
- 重構
AwaitPointerEventScope#awaitLongPressOrCancellation
以比對其他 await 函式 (I646e6)
1.3.0-beta01 版本
2022 年 8 月 24 日
發布了 androidx.compose.foundation:foundation:1.3.0-beta01
和 androidx.compose.foundation:foundation-layout:1.3.0-beta01
。1.3.0-beta01 版本包含以下修訂項目。
API 變更
- 從
OverscrollEffect
中移除pointerPosition
- 需要注意指標位置的特效,可以使用effectModifier
中的Modifier.pointerInput { }
,來取得目前的指標位置 (I9f606、b/241239306)。 - 公開
AwaitPointerEventScope#awaitLongPressOrCancellation
做為其他用於更複雜手勢偵測的建構區塊 (I04374、b/181577176) - 推出了
lazyListSnapLayoutInfoProvider
用來在 Lazy 清單中啟用貼齊功能 (I3ecdf) - 推出了
SnapFlingBehavior
,這是可啟用清單貼齊功能的快速滑過行為。提供一個SnapLayoutInfoProvider
的執行個體,內容包含貼齊版面配置的相關資訊 (Ie754c)
1.3.0-alpha03 版本
2022 年 8 月 10 日
發布了 androidx.compose.foundation:foundation:1.3.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.3.0-alpha03
。1.3.0-alpha03 版本包含以下修訂項目。
API 變更
- 資源字型現在支援字型變化版本設定 (API 26 以上級別) (I900dd、b/143703328)
DeviceFontFamilyNameFont
中的可變字型支援 (Ic1279、b/143703328)- 從
PlatformTextStyle
和LineHeightStyle
中移除實驗性註解 (I64bef) - 如果
VisualTransformation
提供的OffsetMapping
傳回無效索引,文字欄位現在會擲回更詳細的例外狀況 (Ie73f9、b/229378536)。 - 推出實驗性 API,在多個 Lazy 版面配置之間共用項目提供者的邏輯 (Ic891c)
ScrollableDefaults.reverseDirection()
已不再處於實驗階段 (Iba646)- 淘汰了
SemanticsModifier.id
,並將語意 ID 移至LayoutInfo.semanticsId
(Iac808、b/203559524) checkScrollableContainerConstraints()
不再處於實驗階段 (I2c290)Modifier.clipScrollableContainer()
不再處於實驗階段 (Ia2b44)- 淘汰
TextInputService.show|hideSoftwareKeyboard
。請在應用程式程式碼中改用SoftwareKeyboardController
,並在輸入法編輯器管理程式碼中使用TextInputSession
。(I14e4c、b/183448615)
1.3.0-alpha02 版本
2022 年 7 月 27 日
發布了 androidx.compose.foundation:foundation:1.3.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.3.0-alpha02
。1.3.0-alpha02 版包含以下修訂項目。
API 變更
- 在
DrawScope
上新增drawText
擴充功能函式,這樣就能針對在DrawScope
(例如Canvas
和drawBehind
) 上運作的可組合項和修飾符,繪製多樣式的文字。(I16a62、b/190787898)
修正錯誤
- 現在如果聚焦的文字欄位處於停用狀態,就會隱藏文字鍵盤 (I6e3e4、b/237308379)。
- 將
InputEventChange
事件加入至速率追蹤器時,我們現在會考慮使用差異值而非位置,所以即使目標元素移動,也能確保所有案例的速度計算正確 (Icea9d、b/216582726、b/223440806、b/227709803) - 如果可捲動項目中有聚焦的子項,現在當整個項目縮小,甚至大小因動畫改變時,都能正常捲動並讓聚焦的子項保持在畫面中。(I80867、b/230756508、b/220119990)
- 修正在選擇狀態下清除並重新填入
TextField
會導致異常終止的問題。(I1235b、b/208655565、b/214253689)
1.3.0-alpha01 版本
2022 年 6 月 29 日
發布了 androidx.compose.foundation:foundation:1.3.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.3.0-alpha01
。1.3.0-alpha01 版本包含以下修訂項目。
API 變更
- 推出
UrlAnnotation
註解類型與相關的方法,能夠支援AnnotatedString
中的TalkBack
連結支援。(I1c754、b/231495122)
修正錯誤
BasicTextField
cursorBrush
現在可以動畫處理,無須重新啟動游標計時器 (I812e6、b/236383522)
1.2 版本
1.2.1 版本
2022 年 8 月 10 日
發布了 androidx.compose.foundation:foundation:1.2.1
和 androidx.compose.foundation:foundation-layout:1.2.1
。1.2.1 版本包含以下修訂項目。
1.2.0 版
2022 年 7 月 27 日
發布了 androidx.compose.foundation:foundation:1.2.0
和 androidx.compose.foundation:foundation-layout:1.2.0
。1.2.0 版本包含以下修訂項目。
自 1.1.0 版以來的重要異動
LazyVerticalGrid
和LazyHorizontalGrid
現已穩定。- 您現在可以為 Lazy 清單和格線項目中的項目指定內容類型。如此一來,元件就能更有效率地重複使用元素。
- Lazy 清單和格線現在包含
userScrollEnabled
參數,可透過使用者手勢停用捲動功能。 - 新增了名為
LazyLayout
的實驗性 API。這是我們在內部使用的 API,用來支援 Lazy 清單和格線。 OverscrollEffect
API 推出實驗性版本。您可以定義自訂過度捲動效果,也可以將標準平台新增至自訂的可捲動容器。- 推出了巢狀捲動互通性 API,以允許檢視畫面和 compose 捲動操作者之間的互通性。
- 滑鼠和觸控板的捲動功能已新增至所有捲動容器。
1.2.0-rc03 版本
2022 年 6 月 29 日
發布了 androidx.compose.foundation:foundation:1.2.0-rc03
和 androidx.compose.foundation:foundation-layout:1.2.0-rc03
。1.2.0-rc03 版本包含以下修訂項目。
- 自 1.2.0-rc02 以來沒有變更。
1.2.0-rc02 版
2022 年 6 月 22 日
發布了 androidx.compose.foundation:foundation:1.2.0-rc02
和 androidx.compose.foundation:foundation-layout:1.2.0-rc02
。1.2.0-rc02 版本包含以下修訂項目。
1.2.0-rc01 版
2022 年 6 月 15 日
發布了 androidx.compose.foundation:foundation:1.2.0-rc01
和 androidx.compose.foundation:foundation-layout:1.2.0-rc01
。1.2.0-rc01 版本包含以下修訂項目。
API 變更
- 我們推出了實驗性
OverscrollEffect
,可以支援自訂過度捲動功能,以及接受Modifier.scrollable
的超載。 - 實驗性
LocalOverScrollConfiguration
已從foundation.gesture
移至基礎套件,並重新命名為LocalOverscrollConfiguration
(If19fb、b/204650733) - 撰寫程式庫中的介面現已使用 jdk8 預設介面方法建立 (I5bcf1)
- 推出實驗性 API
checkScrollableContainerConstraints()
,檢查我們是否並未為捲動容器建立巢狀結構。透過LazyLayout
建立自訂捲動式延遲版面配置時就可以使用。(Id6fab、b/233352497) - 已從
androidx.compose.foundation.lazy
套件中移除已淘汰的LazyVerticalGrid
。新版穩定 API 位於androidx.compose.foundation.lazy.grid
(I73c76、b/225192009)
1.2.0-beta03 版本
2022 年 6 月 1 日
發布了 androidx.compose.foundation:foundation:1.2.0-beta03
和 androidx.compose.foundation:foundation-layout:1.2.0-beta03
。1.2.0-beta03 版本包含以下修訂項目。
API 變更
- 新增了實驗性
IntervalList
和MutableIntervalList
。這可讓您透過多個間隔來表示部分值的清單。如果要定義類似LazyColumn
使用的自訂 DSL,而其中清單項目可透過多個項目呼叫定義,這個功能就非常實用 (I2d05e、b/228580728)
修正錯誤
- 釐清有關
WindowInsets.ime
的說明文件,指出 API 23 以上級別皆可回報ime
插邊,但只有 API 30 以上級別會採用「動畫」(Ia7fc0、b/230756508)。 - 當游標移到文字欄位結尾時,按下向前刪除鍵不會再當機。
- 現在
DeleteSurroundingTextCommand
和DeleteSurroundingTextInCodePointsCommand
的建構函式引數不得為負數。(Ica8e6、b/199919707)
1.2.0-beta02 版
2022 年 5 月 18 日
發布了 androidx.compose.foundation:foundation:1.2.0-beta02
和 androidx.compose.foundation:foundation-layout:1.2.0-beta02
。1.2.0-beta02 版本包含以下修訂項目。
- 不會變更 Text 或
TextField
配置大小的可下載字型解析度先前不會重繪,導致字型顯示過時。這項錯誤修正可確保文字版面配置一定會觸發重繪 (b/229727404)。(I1d49e、b/229727404)
1.2.0-beta01 版本
2022 年 5 月 11 日
發布 androidx.compose.foundation:foundation:1.2.0-beta01
和 androidx.compose.foundation:foundation-layout:1.2.0-beta01
。1.2.0-beta01 版本包含以下修訂項目。
新功能
- 這是 1.2 版的第一個 Beta 版!
API 變更
- 新增了實驗性的
BeyondBoundsInterval
,可供LazyList
的自訂實作用於布局範圍超出可見邊界的情況 (Ifabfb、b/184670295) LineHeightBehavior
已重新命名為LineHeightStyle
。LineVerticalAlignment
已重新命名為LineHeightStyle.Alignment
。LineHeightTrim
已重新命名為LineHeightStyle.Trim
。- 移除
LineHeightStyle
中的預設建構函式值 (I582bf、b/181155707)。 - 新增了
LazyLayoutItemProvider
介面選用成員的預設值。(Iba8a0) - 在
LazyLayoutItemProvider
API,我們現在不再需要由工廠按照索引傳回可組合的 lambda,而能用更簡單的可組合函式項目接受索引。(Id2196) - LazyLayoutItemsProvider 已重新命名為 LazyLayoutItemProvider (I0638c)
LazyLayoutItemsProvider.itemsCount
已重新命名為itemCount
(Id409c)- 針對
TextStyle
和SpanStyle
新增 Brush,可供繪製漸層上色的文字。(I53869、b/187839528) LineHeightBehavior
的trimFirstLineTop
、trimLastLineBottom
屬性已變更為單一列舉:LineHeightTrim
。LineHeightTrim
有由兩個布林值定義的 4 種狀態值:FirstLineTop
、LastLineBottom
、Both 和 None (Ifc6a5、b/181155707)為
TextStyle
和ParagraphStyle. LineHeightBehavior
新增了LineHeightBehavior
,可控制是否要將行高套用於第一行的頂部和最後一行的底部,以及定義TextStyle
(lineHeight
) 所提供空間中的行對齊方式。舉例來說,您可以透過
LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)
,獲得與 CSS 定義行為類似的結果。trimFirstLineTop
、trimLastLineBottom
設定只有在includeFontPadding
設定為 False 時才能正確運作。(I97332、b/181155707)新增實驗性的
imeNestedScroll()
修飾符,方便開發人員以捲動方式控制輸入法編輯器。(I60759)
修正錯誤
- 修正迴歸問題:從可組合項中移除位於焦點的文字欄位時,文字欄位不會隱藏鍵盤。(I7a410、b/230536793、b/225541817)
- 在高度有限且無法容納所有文字行時支援刪節號 (Ie528c、b/168720622)。
BringIntoViewRequester.bringIntoView
將一直處於暫停狀態,直到要求完成或由較新的非重複要求中斷為止。重疊的要求將排入佇列 (I43e7f、b/216790855)。- 針對完全重疊矩形的並行
BringIntoViewRequester.bringIntoView
呼叫,現在只會處理較大矩形的要求。(I34be7、b/216790855、b/184760918) - 已開啟預設
includeFontPadding
。您可以使用TextStyle.platformTextStyle
屬性關閉includeFontPadding
。我們即將變更預設行為。但在此之前,這種做法能以較好的方式整合行高改善項目 (aosp/2058653),並解決TextField
裁剪問題 (I01423、b/171394808) Modifier.bringIntoViewRequester
已不再使用onGloballyPositioned
。(I630f5)
外部貢獻
- 現在垂直捲動時,就會在 Android 上反轉
MouseInjectionScope.scroll(delta = someDelta)
(如果 someDelta 為正值,則會向下捲動) (Ifb697、b/224992993)
1.2.0-alpha08 版
2022 年 4 月 20 日
發布 androidx.compose.foundation:foundation:1.2.0-alpha08
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha08
。1.2.0-alpha08 版本包含以下修訂項目。
API 變更
- 使用
FontFamily.SansSerif
時,可在 Android 的系統字型中顯示所有可用權重。這會在 API 21-28 內部使用備用廣告字型名稱,例如 Santa-serif-medium。由於之前 API 21-28 上僅支援 400 和 700 粗細,因此這是行為變更。(I380fe、b/156048036、b/226441992) - 「段落」和「多段落」目前接受限制參數。傳送
Constraints.maxHeight
目前為免人工管理,但未來會進行一些計算,例如根據高度進行刪節。(I6afee、b/168720622) SubcomposeSlotReusePolicy.getSlotsToRetain()
可接受自訂 MutableSet 類別,該類別不允許在其中新增項目。(Icd314)- 已從
PointerInputChange
淘汰部分消耗功能 (減少或定位)。可使用consume()
徹底使用變更。可使用isConsumed
判斷其他使用者是否曾經使用過該變更。 PointerInputChange::copy()
現在會一律建立淺層複本。這表示只要使用一份複本,系統就會使用PointerInputChange
的複本。如要建立未繫結的PointerInputChange
,請改用建構函式。(Ie6be4、b/225669674)- 已推出新的實驗性
LazyLayout
API。這可讓您建構自己的元件,例如LazyVerticalGrid
中的LazyColumn
。請注意,此 API 處於早期階段,在後續版本中可能有所調整 (Iba2bc、b/166591700)。 AndroidFont
現在使用typefaceLoader
做為建構函式參數 (I2c971)。WindowInsets
companion 現在無論是否在螢幕上、或是否與視窗相交,都會顯示出來。如果裝置上有此物件、但目前並未處於運作狀態,也可以得知可能的大小。(I65182、b/217770337)
1.2.0-alpha07 版本
2022 年 4 月 6 日
發布了 androidx.compose.foundation:foundation:1.2.0-alpha07
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha07
。1.2.0-alpha07 版本包含以下修訂項目。
API 變更
- 新增
PinnableParent
API,讓 Lazy 版面配置能夠避免目前組合的項目遭到捨棄 (Ibbdd0、b/184670295) LazyListLayoutInfo
和LazyGridLayoutInfo
現在有beforeContentPadding
和afterContentPadding
欄位 (I3b628、b/200920410)- 新增
KeyboardType.Decimal
做為Keyboard.Number
的替代項,專用於在輸入法編輯器中加入小數分隔符。(Iec4c8、b/209835363) - 新增字型描述元 Font(DeviceFontFamilyName),可選擇在字型備用廣告鏈中查詢系統已安裝的字型。(I30468、b/219754572)
PointerEventType.Scroll
和PointerEvent.scrollDelta
現在是穩定的 API (I574c5、b/225669674)- 在
TextStyle/ParagraphStyle. includeFontPadding
中新增includeFontPadding
的臨時相容性設定,可透過TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))
變更。這是配合遷移提供的臨時設定選項,日後將移除。(If47be、b/171394808) - 更新
FontFamily.Resolver
,以整合全系統中的粗體文字無障礙設定 (I6c1e7) ComposeView
的consumeWindowInsets
擴充功能屬性可讓開發人員停用 Android WindowInsets 的消耗。這樣一來,階層中的個別ComposeViews
就能分別套用WindowInsets
,不會彼此干擾。(I0ef08、b/220943142)
1.2.0-alpha06 版本
2022 年 3 月 23 日
發布了 androidx.compose.foundation:foundation:1.2.0-alpha06
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha06
。1.2.0-alpha06 版本包含以下修訂項目。
API 變更
- 新增
RequestFocus
語意動作,用於要求聚焦於可聚焦的目標 (I17b71) FocusOrder
現已合併至FocusProperties
,focusProperties()
現已具備focusOrder()
的所有功能。FocusOrder
和focusOrder()
已淘汰。接受focusRequester
的focusOrder()
應替換為focusRequester()
修飾符,並與focusProperties()
搭配使用。如此一來,修飾符就能更妥善區隔問題 (I601b7)- 新增
WindowInsets.asPaddingValues(Density)
,方便開發人員在不需要組合的情況下完成轉換。(I94c35) - 更新向量可繪項目剖析,支援自動鏡像,亦即在目前版面配置的方向為 RTL 時翻轉
VectorPainter
的內容。(I79cd9、b/185760237)
修正錯誤
- 捲動修飾符 (
Modifier.verticalScroll()
、Modifier.horizontalScroll()
和Modifier.scrollable()
) 將在捲動區域大小改變後進行捲動,確保先前聚焦的可組合項仍顯示在畫面上。 - 現在,當 TextField 中有非延遲的可捲動項,而且軟輸入模式是
ADJUST_RESIZE
時,只要文字欄位處於聚焦狀態並顯示鍵盤,TextField 就會一直顯示在鍵盤上方。(I4a485、b/190539358、b/192043120、b/216842427)
1.2.0-alpha05 版本
2022 年 3 月 9 日
發布了 androidx.compose.foundation:foundation:1.2.0-alpha05
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha05
。1.2.0-alpha05 版本包含以下修訂項目。
API 變更
LazyVerticalGrid
和LazyHorizontalGrid
現已轉為穩定版。(I307c0)LazyGridItemInfo.Unknown
已替換為LazyGridItemInfo.UnknownRow
和LazyGridItemInfo.UnknownColumn
(I56d51)LazyVerticalGrid
/LazyHorizontalGrid
和所有相關 API 已移入.grid
子套件。請將匯入內容從androidx.compose.foundation.lazy
更新為androidx.compose.foundation.lazy.grid
。(I2d446、b/219942574)- 文字︰
includeFontPadding
現在預設為關閉。系統會處理includeFontPadding=false
造成的裁剪問題,長指令碼應不致於遭到裁剪。(I31c84、b/171394808) - 測量後的介面現在起會顯示 parentData 屬性 (I3313f)
- 推出實驗性
Modifier.onFocusedBoundsChanged
,以便觀察可聚焦子項的邊界 (I14283、b/220030968、b/190539358、b/192043120、b/216842427)。 - 新增了 LazyHorizontalGrid (I61ae7、b/191238807)。
- 新增用於定義跨軸大小的
LazyVerticalGrid
API (I17723) - 新增 FocusGroup 修飾符 (I64bc0、b/213508274、b/184670295)
修正錯誤
WindowInsets.toString()
現在能顯示正確的值 (I1585d)
外部貢獻
- 已更新為使用 Kotlinx 協同程式 1.6.0 (I3366d)
1.2.0-alpha04 版
2022 年 2 月 23 日
發布了 androidx.compose.foundation:foundation:1.2.0-alpha04
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha04
。1.2.0-alpha04 版本包含以下修訂項目。
API 變更
- 不需再利用
BringIntoViewResponders
手動將傳遞向上傳送給父項回應者,而改為需立即回傳想讓父項帶入檢視畫面的矩形。(I8e66a) - 支援在 Text 中載入非同步字型 (I77057、b/214587005)
LazyVerticalGrid
現在起允許將line breaking
置於跨距超出目前字行的項目之前 (I05c40、b/207462103)。excludeFromSystemGestures
重新命名為systemGesturesExclusion
(I19526)LazyVerticalGrid
現已支援 reverseLayout (I6d7d7、b/215572963、b/211753558)- 新增
WindowInsets.only()
方法,可讓開發人員只納入取自 WindowInsets 的尺寸。(I14c94、b/217768486) 新增
ComposableTarget
、ComposableTargetMarker
和ComposableOpenTarget
,在針對非設計對象的套用者呼叫可組合函式時,可報告編譯時間。在多數情況下,Compose 編譯器外掛程式能夠推論出註解,因此直接使用這些註解的情形應該相當罕見。無法推論的案例包括建立及使用自訂 Applier、抽象的可組合函式 (例如介面方法)、欄位,或是屬可組合 lambda 的全域變數 (本機變數和參數為推論得出),或在使用
ComposeNode
或相關的可組合函式時。對於自訂 Applier,呼叫
ComposeNode
或ReusableComposeNode
的可組合函式需要為函式和任何可組合的 lambda 參數類型新增CompoableTarget
註解。不過,與其直接使用ComposableTarget
,建議您建立以ComposableTargetMarker
加上註解的註解,再使用已標示的註解。使用ComposableTargetMarker
加上標示的可組合註解,等同於使用屬性類別完整名稱做為套用器參數的ComposbleTarget
。如需ComposableTargetMarker
的使用範例,請參閱anroidx.compose.ui.UiComposable
。(I38f11)
修正錯誤
- 現在可將負的捲動偏移值傳遞至
LazyGridState.scrollToItem()
和LazyGridState.animateScrollToItem()
(I025c6、b/211753558) - 支援為 TextField 載入非同步字型。(Icc4bf、b/214587005)
1.2.0-alpha03 版本
2022 年 2 月 9 日
發布 androidx.compose.foundation:foundation:1.2.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha03
。1.2.0-alpha03 版本包含以下修訂項目。
API 變更
- 不會再呼叫
TextInputSession
和TextInputService
中的notifyFocusedRect
方法,此方法現已淘汰。請改用BringIntoViewRequester
(Ia4302、b/192043120、b/216842427、b/178211874)。 - 使用 Modifier.animateItemPlacement() 針對 Lazy 格線項目啟用動畫功能 (Ib6621、b/211753218)
BringIntoViewRequester
現在起可將請求傳播到主控的 Android View (Ia7a51)FontFamilyResolver
現在起可經由LocalFontFamilyResolver.current
取用- 新增
createFontFamilyResolver(context)
和createFontFamilyResolver(context, coroutineScope)
,可在使用 Compose 之外的情況下建立新的 FontFamily 解析器。 - Paragraph 和 MultiParagraph 現在起能接受
FontFamily.Resolver
TextLayoutResult.layoutInput.fontFamilyResolver
現在包含此版面配置使用的解析器,並淘汰不再使用的TextLayoutResult.layoutInput.resourceLoader
(Id5a45、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)
- 淘汰
- 您現在可以為
LazyVerticalGrid
的項目指定內容類型;LazyGridScope
上的項目函式現在可接受這類參數。提供這樣的資訊有助於項目撰寫作業重複使用邏輯,藉此提高效率,並且只在類型相似的項目之間重複使用內容。(I7b355、b/215372836) LazyListLayoutInfo
和LazyGridLayoutInfo
現在有新屬性:viewportSize
、orientation
、reverseLayout
(Ifc8ed、b/200920410)- 現在起可為 LazyColumn/LazyRow 的項目指定內容類型;LazyListScope 上的項目函式現在已可接受這種參數。提供這樣的資訊有助於項目撰寫作業重複使用邏輯,藉此提高效率,並且只在類型相似的項目之間重複使用內容。(I26506)
- 接受
maxSlotsToRetainForReuse
的SubcomposeLayoutState
建構函式現已淘汰,替換為接受SubcomposeSlotReusePolicy
的新建構函式:新版介面可讓您更精準控制要保留哪些運算單元供日後重複使用 (I52c4d)。 - 新增 WindowInset 用以處理邊框間距與大小調整的輔助鍵。這樣就能讓一些內容延伸到插邊區,但主要內容仍不會跨入插邊區。例如,windowInsetsPadding 可用來設定內容區的邊框間距,以避免一些區域完全或部分遭到覆蓋。(Id0395、b/213942085)
修正錯誤
- 當焦點在 TextField 上時,TextField 現在會保持在鍵盤上方;如果軟輸入模式設為
ADJUST_PAN
,則會顯示鍵盤 (I8eaeb、b/190539358、b/192043120) - 電腦版會使用
FontFamily.Resolver
的本機可組合項- 淘汰電腦版
FontLoader
- 新增電腦版適用的新
createFontFamilyResolver
工廠函式 (I6bbbb、b/174162090)
- 淘汰電腦版
- 切換文字欄位時,螢幕鍵盤輸入類型不會再閃爍。(I1bf50、b/187746439)
- 游標控點顯示時,對於文字欄位不再需要額外按返回按鈕。(Ideb4b、b/205726883)
- 調整文字選取放大鏡的行為,讓系統與平台的放大鏡一致。(Idd918、b/206833278)
1.2.0-alpha02 版本
2022 年 1 月 26 日
發布了 androidx.compose.foundation:foundation:1.2.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha02
。1.2.0-alpha02 版本包含以下修訂項目。
API 變更
- 將
NonRestartableComposable
新增至屬於現有方法超載且無複雜邏輯的方法。如此一來,對於呼叫內部函式中重複的所有參數,可減少編譯器產生的記憶檢查 (等於)。(I90490) - 新增
excludeFromSystemGesture
修飾符,便於存取 Android 的setSystemGestureExclusionRects
(I46f07)
修正錯誤
- 調整文字選取放大鏡的行為,讓系統與平台的放大鏡一致。(Idd918、b/206833278)
LazyColumn
、LazyRow
、Modifier.verticalScroll
及其他使用Modifier.scrollable
的容器支援滑鼠滾輪捲動功能。(I2b5e1、b/198214718)
1.2.0-alpha01 版本
2022 年 1 月 12 日
發布了 androidx.compose.foundation:foundation:1.2.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha01
。1.2.0-alpha01 版本包含以下修訂項目。
API 變更
- 已為
LazyColumn
、LazyRow
和LazyVerticalGrid
中加入新參數userScrollEnabled
,讓使用者能透過觸控手勢或無障礙功能,暫時或永久性地停用使用者啟動的捲動操作。依然能夠經由 state 上的方法以程式輔助方式設定捲動 (I7eae9、b/201150093)。 - 在放大鏡修飾符中新增
onSizeChanged
回呼。(I6879f) - 現在拖曳
SelectionContainer
中的選取控點時,就會顯示放大鏡小工具。(I30b38、b/139320979)
修正錯誤
- 已修正在捲動出視圖之外時,不會隱藏
TextField
游標控點的問題 (I14552、b/208883748)。
依附元件更新
- 現在依附於 Kotlin
1.6.10
。
1.1 版
1.1.1 版
2022 年 2 月 23 日
發布 androidx.compose.foundation:foundation:1.1.1
和 androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.1.0
和 androidx.compose.foundation:foundation-layout:1.1.0
。1.1.0 版本包含以下修訂項目。
自 1.0.0 版以來的重要變更
- 穩定支援 Android 12 的過度捲動效果
- 改善觸控目標縮放功能
- 請注意,對於 Compose 1.0 版,Material 元件會展開版面配置空間,以符合 Material 無障礙功能準則對於觸控目標尺寸的規定。舉例來說,即使您將按鈕的尺寸設為小於最小尺寸 48x48 dp,系統仍會將按鈕的觸控目標擴大為這個尺寸。這樣一來,Compose Material 的行為就會與 Material Design 元件相同,在混用 Views 和 Compose 時便可確保行為一致。利用 Compose Material 元件建立使用者介面時,這項異動還能確保達到觸控目標無障礙功能的最低要求。
- 穩定支援導覽邊欄
- 將先前推出的一些實驗性 API 升級為穩定版
- 支援更新版本的 Kotlin
1.1.0-rc03 版
2022 年 1 月 26 日
發布 androidx.compose.foundation:foundation:1.1.0-rc03
和 androidx.compose.foundation:foundation-layout:1.1.0-rc03
。1.1.0-rc03 版本包含以下修訂項目。
修正錯誤
- 更新為可支援 Compose Material 1.1.0-rc03
1.1.0-rc01 版
2021 年 12 月 15 日
發布了 androidx.compose.foundation:foundation:1.1.0-rc01
和 androidx.compose.foundation:foundation-layout:1.1.0-rc01
。1.1.0-rc01 版本包含以下修訂項目。
修正錯誤
- 現在可將負的捲動偏移值傳遞至
LazyListState.scrollToItem()
和LazyListState.animateScrollToItem()
(Iceb90、b/184252837) - 已修正會造成無障礙捲動遺漏操作的錯誤 (I7cbfb)
1.1.0-beta04 版本
2021 年 12 月 1 日
發布 androidx.compose.foundation:foundation:1.1.0-beta04
和 androidx.compose.foundation:foundation-layout:1.1.0-beta04
。1.1.0-beta04 版本包含以下修訂項目。
新功能
- 已更新為與 Kotlin
1.6.0
相容
API 變更
- 已去除
androidx.core.view
中為空值的可能 (I7078a、b/204917439) - 新增了實驗性 API,允許整體取用 PointerInputchange 或者檢查是否已取用 PointerInputchange。(I2e59d)
- 在文字欄位中拖曳游標或選取控點時,顯示放大鏡小工具。(I5391e、b/203781358)
修正錯誤
- 修正問題:輸入法編輯器瀏覽權限變更時,文字控點不會移動 (I25f2e)。
1.1.0-beta03 版
2021 年 11 月 17 日
發布 androidx.compose.foundation:foundation:1.1.0-beta03
和 androidx.compose.foundation:foundation-layout:1.1.0-beta03
。1.1.0-beta03 版本包含以下修訂項目。
API 變更
- LazyVerticalGrid 支援水平範圍。(I7e2fa、b/176758183)
新增針對 Lazy 清單項目的位置添加動畫效果的實驗性功能。LazyItemScope 中新增一個名為
Modifier.animateItemPlacement()
的新輔助鍵可用。使用範例:var list by remember { mutableStateOf(listOf("A", "B", "C")) } LazyColumn { item { Button(onClick = { list = list.shuffled() }) { Text("Shuffle") } } items(list, key = { it }) { Text("Item $it", Modifier.animateItemPlacement()) } }
- 經由
LazyListScope.item
或LazyListScope.items
提供索引鍵時,這個輔助鍵能夠啟動項目重新排序的動畫。除了項目的重新排序之外,諸如排列或對齊方式改變等事件造成的其餘位置改變情形,也會以動畫呈現。(I59e7b、b/150812265)
- 經由
1.1.0-beta02 版本
2021 年 11 月 3 日
發布 androidx.compose.foundation:foundation:1.1.0-beta02
和 androidx.compose.foundation:foundation-layout:1.1.0-beta02
。1.1.0-beta02 版本包含以下修訂項目。
修正錯誤
- 現在,漣漪效果與其他指示元素只有在位於
Modifier.scrollable()
容器內時才會延遲,不會因為按下事件而一律延遲 (Ibefe0、b/203141462)。 - 新增實驗性的 BringIntoView API,可讓您傳送要求給父項,讓父項透過捲動將項目帶入檢視區塊 (Ib918d、b/195353459)
外部貢獻
- 新增了
Modifier.pointerHoverIcon
(I95f01)
1.1.0-beta01 版本
2021 年 10 月 27 日
發布 androidx.compose.foundation:foundation:1.1.0-beta01
和 androidx.compose.foundation:foundation-layout:1.1.0-beta01
。1.1.0-beta01 版本包含以下修訂項目。
修正錯誤
- 新增實驗性的 BringIntoView API,可讓您傳送要求給父項,讓父項透過捲動將項目帶入檢視區塊 (Ib918d、b/195353459)
1.1.0-alpha06 版本
2021 年 10 月 13 日
發布 androidx.compose.foundation:foundation:1.1.0-alpha06
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha06
。1.1.0-alpha06 版本包含以下修訂項目。
API 變更
- 新增 Layout 的無子項超載,使效率提高 (Ib0d9a)
SemanticsNodeInteraction.performSemanticsAction
現在可傳回所呼叫函式位在的SemanticsNodeInteraction
。(I9e5db)- 新增了
performScrollToNode(matcher: SemanticsMatcher)
,能將可捲動的容器捲動到經過特定的比對器比對為相符的內容。(Ic1cb8)
1.1.0-alpha05 版本
2021 年 9 月 29 日
發布 androidx.compose.foundation:foundation:1.1.0-alpha05
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha05
。查看 1.1.0-alpha05 版的修訂項。
API 變更
- 針對 PointerEventChange 新增實驗性歷史指標。(Ic1fd8、b/197553056、b/199921305)
修正錯誤
- 修正可捲動項 (無論延遲與否) 在捲動方面的無障礙支援 (I6cdb0)
1.1.0-alpha04 版本
2021 年 9 月 15 日
發布 androidx.compose.foundation:foundation:1.1.0-alpha04
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha04
。1.1.0-alpha04 版本包含以下修訂項目。
API 變更
- 淘汰
performGesture
和GestureScope
,並替換為performTouchInput
和TouchInjectionScope
。(Ia5f3f、b/190493367) - 將
touchBoundsInRoot
加入含有最低觸控目標尺寸的SemanticsNode
,讓開發人員能確保觸控目標符合無障礙功能的最低要求 (I2e14b、b/197751214)
修正錯誤
- Android 12 裝置已新增適用延伸過度捲動。(Iccf3c、b/171682480)
1.1.0-alpha03 版
2021 年 9 月 1 日
發布 androidx.compose.foundation:foundation:1.1.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha03
。1.1.0-alpha03 版本包含以下修訂項目。
新功能
- 更新 Compose
1.1.0-alpha03
,使其依附於 Kotlin1.5.30
。(I74545)
API 變更
- 已新增捲動的光暈效果。已新增實驗性 OverScrollConfiguration API,以設定過度捲動的視覺效果。輸入 null 即可關閉過度捲動效果。(I0c304、b/171682480)
- AwaitPointerEventScope 現在起具備 withTimeout() 和 withTimeoutOrNull() (I507f0、b/179239764、b/182397793)
- 新增了測試方法,以取得裁剪邊界 (I6b28e)
- 已對 ViewConfiguration 新增最小觸控目標尺寸,將其用於語意及輸入指標,確保可使用無障礙功能。(Ie861c)
1.1.0-alpha02 版
2021 年 8 月 18 日
發布 androidx.compose.foundation:foundation:1.1.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha02
。查看 1.1.0-alpha02 版的修訂項。
API 變更
- 新增
Modifier.size
和requiredSize
的 DpSize 版本 (I3fc7e、b/194219828)
1.1.0-alpha01 版本
2021 年 8 月 4 日
發布 androidx.compose.foundation:foundation:1.1.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha01
。1.1.0-alpha01 版本包含以下修訂項目。
API 變更
- 已更新利用來源和目的地矩形的
DrawScope#drawImage
方法,以便使用選擇性的 FilterQuality 參數。相當適合像素風格藝術在放大時進行像素化處理之用。已更新 BitmapPainter + Image 可組合項,成為也能取用選擇性的 FilterQuality 參數 (Ie4fb0、b/180311607) - 按下返回按鈕時,TextField 現在可清除選取項目,這與 Android EditText 的行為相符 (I3ca16、b/174173645)。
- 新增游標控點 (I07a82、b/173016579)。
修正錯誤
- 對於延遲清單和一般捲動元件的語意操作之下所執行的捲動,現在能夠呈現動畫 (Id9066、b/190742024)
外部貢獻
LazyVerticalGrid
現在可接受水平與垂直排列參數兩者。(If9c92)
1.0 版本
1.0.5 版
2021 年 11 月 3 日
發布 androidx.compose.foundation:foundation:1.0.5
和 androidx.compose.foundation:foundation-layout:1.0.5
。1.0.5 版包含此連結所列的修訂項目。
修正錯誤
- 修正追蹤 derivedStateOf 例項時的異常終止問題 (aosp/1792247)。
1.0.4 版
2021 年 10 月 13 日
發布了 androidx.compose.foundation:foundation:1.0.4
和 androidx.compose.foundation:foundation-layout:1.0.4
。1.0.4 版包含此連結所列的修訂項目。
依附元件更新
- 已更新為依附 Kotlin
1.5.31
1.0.3 版
2021 年 9 月 29 日
發布 androidx.compose.foundation:foundation:1.0.3
和 androidx.compose.foundation:foundation-layout:1.0.3
。1.0.3 版包含此連結所列的修訂項目。
依附元件更新
- 已更新為依附 Kotlin
1.5.30
1.0.2 版
2021 年 9 月 1 日
發布了 androidx.compose.foundation:foundation:1.0.2
和 androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.1
和 androidx.compose.foundation:foundation-layout:1.0.1
。1.0.1 版包含此連結所列的修訂項目。
依附元件更新
- 已更新為依附 Kotlin
1.5.21
。
1.0.0 版
2021 年 7 月 28 日
發布了 androidx.compose.foundation:foundation:1.0.0
和 androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.0-rc02
和 androidx.compose.foundation:foundation-layout:1.0.0-rc02
。查看 1.0.0-rc02 版的修訂項。
- 更新一般形狀的邊框轉譯功能,解決使用固定尺寸定義的路徑所發生的問題。(aosp/1748871、b/191817116)
1.0.0-rc01 版本
2021 年 7 月 1 日
發布了 androidx.compose.foundation:foundation:1.0.0-rc01
和 androidx.compose.foundation:foundation-layout:1.0.0-rc01
。查看 1.0.0-rc01 版的修訂項。
API 變更
- Canvas 現已支援 contentDescription 參數以提供無障礙功能。(Ib547c)
修正錯誤
- 停用的按鈕、資訊卡、核取方塊和整體
Modifier.clickable(enabled=false)
會阻止點擊父項。(Ic2c3b、b/183908811)
1.0.0-beta09 版本
2021 年 6 月 16 日
發布 androidx.compose.foundation:foundation:1.0.0-beta09
和 androidx.compose.foundation:foundation-layout:1.0.0-beta09
。1.0.0-beta09 版包含此連結所列的修訂項目。
API 變更
- 移除了
ManualFrameClock
。如要控制動畫,請改用composeTestRule.mainClock
。(I3c3e8、b/189951065)。 - 將列舉 Role 和 LiveRegionMode 變更為使用私人建構函式的內嵌類別 (Id1890)
- KeyboardCapitalization 會轉換為內嵌類別。(Id5a1c)
- TextOverflow 已變更為內嵌類別。(I433af)
修正錯誤
- 現在,當您為 LazyColumn/Row 項目指定不重複的按鍵時,會依照該鍵維持住捲動的位置,亦即如果在目前可見的項目之前加入/移除項目,系統會將該鍵所給定的項目維持在第一個顯示的項目。(Id263f、b/184257857)
- 目前索引鍵常數為 @ExperimentalComposeUiApi。穩定之前,使用程式碼可宣告不公開常數。(Ia5d48)
- 已將 IdlingStrategy 新增至 AndroidComposeTestRule,測試架構可用來安裝等待或達成休止的替代機制。請在測試作業開始安裝您本身的策略之前,先使用
AndroidComposeTestRule.setIdlingStrategyFactory()
。(I608fa)
新增設定檔規則
這個版本將設定檔規則新增至下列撰寫模組 (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.foundation:foundation:1.0.0-beta08
和 androidx.compose.foundation:foundation-layout:1.0.0-beta08
。查看 1.0.0-beta08 版的修訂項。
API 變更
- NestedScrollSource 列舉已由內嵌類別取代。(Ie321b、b/187055290)
- 已將列舉用法重構為內嵌類別,以避免在新增列舉值時提供完整陳述式而造成問題(I2b5eb)
- 新增可點擊/可切換項目的輕觸逾時設定,以免在捲動/拖曳時呈現漣漪效果 (Ia2704、b/168524931)
- ContentDescription 和 Text 語意屬性不再只是單一的值,而是清單。如此即可直接合併,無需串連。同時也提供更優質的測試 API,以便善用這些變更 (Ica6bf、b/184825850)
- 已將
Modifier.focusModifier()
淘汰,改為Modifier.focusTarget()
(I6c860) - KeyboardType 列舉改為內嵌類別 (I73045、b/187055290)。
FocusState
列舉已改為FocusState
介面 (Iccc1a、b/187055290)- ImeAction 列舉已由內嵌類別取代。(I18be5、b/187055290)
AnnotatedString.withAnnotation
函式現在是 ExperimentalTextApi,而非 ExperimentalComposeApi。(I0cd0a)- 採用 TextUnitType 的 TextUnit 建構函式現在是 ExperimentalTextApi,而非 ExperimentalComposeApi。
- PaddingValues 現已由
@Immutable
改為@Stable
(I88c50)
修正錯誤
- 已修正長按非空白文字中的空白區域會異常終止的問題 (I33ab5、b/187437299)。
- 於 SelectAll 之後顯示 Toolbar (I495d9、b/185919613)
- 修正可捲動容器會在跨軸時裁剪子項的問題。如果有使用具備 Card 項目的 LazyRow,此問題之前很容易重現;現在起陰影不會被裁切 (Icb635、b/186318448)。
- 已修正使用 Modifier.combinedClickable 下做出長按動作時,漣漪/其他指標有時候會卡住的問題 (I2298c、b/186223077)
- 現在,
detectDragGesures
、detectVerticalGestures
和detectHorizontalGestures
會自動取用位置變更,不需呼叫 onDrag 回呼中的 change.consumePositionChange (I42fc4、b/185096350、b/187320697) - 變更
Modifier.onGloballyPositioned()
,系統會回報此修飾符在修飾符鏈結中的座標,而非套用所有修飾符後的版面配置座標。也就是說,修飾符的排序現在會影響系統回報的座標。(Ieb67d、b/177926591)
1.0.0-beta07 版
2021 年 5 月 18 日
發布 androidx.compose.foundation:foundation:1.0.0-beta07
和 androidx.compose.foundation:foundation-layout:1.0.0-beta07
。1.0.0-beta07 版包含此連結所列的修訂項目。
API 變更
- 導入 LazyColumn/Row 的下一個可見項預先擷取邏輯 (I8a4bc、b/184940225)
- 新增了剪輯片段選取控點 (Iff80d、b/183408447)
修正錯誤
- LazyColumn/Row 現在會保留最多 2 個先前顯示項目的有效狀態 (而非加以丟棄),即使這些項目已被捲出畫面也一樣。如此一來,當我們需要組合新項目時,元件可重複使用有效的子組合,達到提升捲動效能的效果 (Ie5555)
- 移除 paintBackground。(I38660)
- 使用 DrawScope 繪製選取項目背景。(I73c61、b/186674472)
- 修正會影響 Row/Column 使用 spacedBy 排列方式配置加權子項的 beta06 迴歸問題 (Ifaf8c、b/187326588)。
1.0.0-beta06 版本
2021 年 5 月 5 日
發布了 androidx.compose.foundation:foundation:1.0.0-beta06
和 androidx.compose.foundation:foundation-layout:1.0.0-beta06
。查看 1.0.0-beta06 版的修訂項。
API 變更
- 解決手勢操作衝突的問題 (I1145e)
- 新增了 CollectionInfo 和 CollectionItemInfo 無障礙 API,可為無障礙服務對集合及其項目進行標示 (Id54ef、b/180479017)
- 新增了
SemanticsActions.ScrollToIndex
,可將含有索引項目的項目清單捲動到含有特定索引的項目,並新增SemanticsProperties.IndexForKey
以取得包含索引鍵項目清單的項目索引。這兩個動作均是透過 LazyList 實作。- 新增了
SemanticsNodeInteraction.performScrollToIndex
和SemanticsNodeInteraction.performScrollToKey
,前者可將清單捲動至指定的索引,後者則能將清單捲動到含有指定鍵的項目上。(I4fe63、b/178483889、b/161584524)
- 新增了
- 對 TextFieldValue.Saver 新增儲存 AnnotatedString 的支援。新增了 addTtsAnnotation 和 withAnnotation 公用函式至 AnnotatedString.Builder (I8cbdc、b/178446304)
- 已將預設
0.dp
參數值新增至PaddingValues(horizontal, vertical)
(I05571、b/181336792)
修正錯誤
- 含有
weight(fill = false)
的 Row 和 Column 子項不再能讓父項填滿完整的主軸可用空間。(Ied94d、b/186012444、b/184355105)
1.0.0-beta05 版
2021 年 4 月 21 日
發布 androidx.compose.foundation:foundation:1.0.0-beta05
和 androidx.compose.foundation:foundation-layout:1.0.0-beta05
。查看 1.0.0-beta05 版的修訂項。
API 變更
- FlingBehavior 介面現在標示為 @Stable。所有實作項目都必須遵守
@Stable
合約。(I93354、b/184830577)
修正錯誤
- 修正
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.foundation:foundation:1.0.0-beta04
和 androidx.compose.foundation:foundation-layout:1.0.0-beta04
。1.0.0-beta04 版包含此連結所列的修訂項目。
API 變更
- SoftwareKeyboardController 上的 hideSoftwareKeyboard 和 showSoftwareKeyboard 分別重新命名為
hide()
和show()
。- 為 LocalSoftwareKeyboardController 提供完整的 CompositionLocal 介面,以便設定該物件 (在測試中特別實用) (I579a6)
- 加入
TextOverflow.Visible
。(Ic8f89) - 移除
RowScope
、ColumnScope
、BoxScope
、BoxWithConstraintsScope
的公開例項。(I4e83e、b/181869067)
修正錯誤
- 已修正快速滑過後,位於邊緣的
LazyColumn
/LazyRow
項目位置擺放錯誤的問題 (Ie4d13、b/183877420) 在這項變更之前,本機可組合函式可根據其參數而略過。在此變更之後,系統就不會略過任何本地可組合函數。之所以要做這樣的更改,是因為本地函數通常會擷取父項參數,而略過參數是常見的錯誤原因。
總結來說,建議您參考以下範例:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
在此變更之前,即使
count
參數已更新,ShowCount
可組成的函數也會一律略過。不過現在已非如此。(I5648a)
1.0.0-beta03 版本
2021 年 3 月 24 日
發布 androidx.compose.foundation:foundation:1.0.0-beta03
和 androidx.compose.foundation:foundation-layout:1.0.0-beta03
。查看 1.0.0-beta03 版的修訂項。
API 變更
- 淘汰
DefaultMonotonicFrameClock
。現在呼叫無MonotonicFrameClock
的withFrameNanos
或Recomposer.runRecomposeAndApplyChanges
會擲回IllegalStateException
(I4eb0d)
修正錯誤
- 即使速率為 0,現在系統仍會呼叫
FlingBehavior.performFling()
(I0b6e5、b/181237123)
1.0.0-beta02 版
2021 年 3 月 10 日
發布了 androidx.compose.foundation:foundation:1.0.0-beta02
和 androidx.compose.foundation:foundation-layout:1.0.0-beta02
。查看 1.0.0-beta02 版的修訂項。
API 變更
- 在 LazyColumn 測量邏輯中新增多個小型最佳化項目 (Ic6889)
- 新增
LocalSoftwareKeyboardController
組合本機 API,取代 TextField 的 SoftwareKeyboardController 舊介面。(I5951e、b/168778053)。 - 新增了
LocalSoftwareKeyboardController
組合本機 API,以取代 TextField 中的舊 SoftwareKeyboardController 介面 (I84472、b/168778053)
修正錯誤
- 強制限制對實驗性 API 的公開使用 (I6aa29、b/174531520)
1.0.0-beta01 版
2021 年 2 月 24 日
發布 androidx.compose.foundation:foundation:1.0.0-beta01
和 androidx.compose.foundation:foundation-layout:1.0.0-beta01
。1.0.0-beta01 版包含此連結所列的修訂項目。
這是 Compose 1.0.0 Beta 版的第一個版本。
API 變更
- 已將 onStart 回呼新增至
detectDragGestures
(I67269、b/179995594) - 用於依照內建函式調整大小的修飾符不再處於實驗階段。(I15744)
- 已移除 dp 判斷提示 (I798d2)
- SoftwareKeyboardController 回呼已從所有文字欄位中移除,而且很快就會替換為新的 API。(Iae869、b/168778053)
- MeasureBlock 已重新命名為 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)。
- 移除了淘汰的 LayoutCoordinate 方法,positionInParent 和 boundsInParent 請使用函式,請勿使用屬性 (I580ed、b/169874631、b/175142755)
- 為 CoreTextField 等低階文字元件的輸入工作階段建立新的 TextInputSession。(I8817f、b/177662148)
- 「位置」指標現在會顯示測距,代表子版面配置實際測量的大小。這個大小可能不受測量限制的影響。(Ib2729、b/172560206、b/172338608)。
- 新增 selectionGroup 修飾符,可為 Tab 或 RadioButton 集合加上無障礙用途標示 (Ie5c29)
新增 LazyListState.animateScrollToItem
這個方法會快速捲動至清單中的特定項目。(I4bfd7)
ScrollableState.smoothScrollBy() 已重新命名為 animateScrollBy() LazyListState.snapToItemIndex() 已重新命名為 scrollToItem() ScrollState.smoothScrollTo() 已重新命名為 animateScrollTo() (I35ded)
Modifier.zoomable 已取代為 Modifier.transformable。smoothPanBy、smoothRotationBy 已新增成為功能 (Ifc32b、b/175294473)。
compositionLocalOf
和staticCompositionLocalOf
的defaultFactory
現在是必要元素,而非選用元素。如未提供預設工廠,這項變更可移除非空值的潛在類型錯誤。以前,這會為非空值的類型提供空值的參照。
如果是可為空值類型,請考慮提供
{ null }
做為預設工廠。除非能提供合理的預設值,否則我們不建議搭配不可為空值類型使用本機。如果沒有任何可行的預設值,
defaultFactory
lambda 應擲回例外狀況。不過,擲回例外狀況代表本機取用者會有隱含的依附元件,前提是該元件不會由類型系統強制執行 (Ifbd2a)已將
Indication#createIndication()
變更為Indication#rememberUpdatedIndication(InteractionState)
,並自 IndicationInstance#drawIndication()
移除InteractionState
參數。IndicationInstance 只應負責繪製視覺效果,而非回應 InteractionState 的變更,啟動動畫/寫入狀態。這些動畫和狀態寫入作業應改為在rememberUpdatedIndication()
內執行。此外,Modifier.indication
中的indication
參數也已變更為必要參數 (Ic1764、b/152525426)Text 操作現在會自動檢查焦點 (I13777、b/179648629)
移除了
runBlockingWithManualClock
(I15cdc、b/179664814)Modifier.verticalScroll()/horizontalScroll() 的捲動位置現在起以 Int 表示 (I81298)
smoothScrollBy 和 ScrollBy 方法的套件已變更為
androidx.compose.foundation.gestures.*
(I3f7c1、b/175294473)FlingConfig 已重新命名為 FlingBehavior,現在起可自訂懸浮動畫,而非預先定義的 Decay。(I02b86、b/175294473)
已重新命名大小修飾詞。將 Modifier.width/height/size 重新命名為 requiredWidth/requiredHeight/requiredSize。Modifier.PreferredWidth/PreferredHeight/recommendedSize 已重新命名為 width/height/size。(I5b414)
defaultMinSizeConstraint 已重新命名為 defaultMinSize。(I4eaae)
已移除 Modifier.tapGestureFilter。請改用
Modifier.pointerInput { detectTapGestures(...) }
(I266ed、b/175294473)。部分消耗已從指標輸入系統中移除。協調部分消耗的建議做法是使用 Modifier.nestedScroll (Ie9c9b)。
方向已移至基礎套件。VelocirtTracker 已從 ui.gesture 移至 ui.input.pointer (Iff4a8、b/175294473)
已移除 AnimationClockObservable 和子類別。AnimatedFloat 也已移除。(Icde52、b/177457083)。
drawerState.open() 和 drawerState.close() 現已為暫停函式。可使用 rememberCoroutineScope() 取得組合的範圍以便呼叫 (I16f60、b/175294473)
Provider 已重新命名為 CompositionLocalProvider
- Composition 建構函式不再接受索引鍵參數,且已淘汰。
- currentCompositeKeyHash 已變成可組合的頂層屬性,而非可組合的頂層函式。
- CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空間
- ComposableLambda 已成為介面而非具體類別,並且不再有類型參數。
- ComposableLambdaN 已成為介面而非具體類別,並且不再有類型參數。
- snapshotFlow 函式已移至 androidx.compose.runtime 命名空間。
- SnapshotMutationPolicy 的合併方法不再為實驗性。
- 移除
@TestOnly
頂層 clearRoots 函式,因為不再需要使用。 - 已移除 keySourceInfoOf 和 resetSourceInfo 函式,因為不再需要使用。
- 已移除 Composer.collectKeySourceInformation,因為不再需要使用。
- 已移除 isJoinedKey、joinedKeyLeft 和 joinedKeyRight 方法。因為不再需要使用。
- 重新整理多個頂層 API,分別歸類到不同的檔案中。由於 Kotlin 的檔案類別語意的關係,此舉會破壞二進位檔案相容性,但不影響原始碼相容性,因此對大多數使用者而言應不成問題
- (I99b7d、b/177245490)
Modifier.scrollable 經過重新設計。今後其使用 Scrollable 介面,而非 ScrollableController 類別 (I4f5a5、b/174485541、b/175294473)
Modifier.draggable 現在接受 DraggableState,而非簡單的 lambda。您可以透過
rememberDraggableState { delta -> }
建立狀態,以得到與之前相同的行為 (Ica70f、b/175294473)新增 requiredWidth(IntrinsicSize) 和 requiredHeight(IntrinsicSize) 修飾符,以便視需要調整內建函式尺寸 (I0a6b4)
移除淘汰的
emptyContent()
。請改用{}
(Idb33f、b/179432510)。已刪除一些先前淘汰的 API (Ice5da、b/178633932)
修正錯誤
- 新增 LocalSoftwareKeyboardController 組合本機 API,取代 TextField 的 SoftwareKeyboardController 舊介面 (I658b6、b/168778053)。
1.0.0-alpha12 版
2021 年 2 月 10 日
發布了 androidx.compose.foundation:foundation:1.0.0-alpha12
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha12
。1.0.0-alpha12 版包含此連結所列的修訂項目。
API 變更
- Modifier.pointerInput 目前規定 remember 鍵必須指出指標輸入偵測處理常式何時該重新啟動,以設定新的依附元件。(I849cd)
- 測試更新:hasText() 會檢查文字欄位中的輸入和標籤/提示/預留位置文字 (Iab803)
- 已新增 PaddingValues.Absolute 且可於接受 PaddingValue 的 API 中使用。(Ia5f30)
- onImeActionPerformed 已淘汰,請改用 KeyboardAction (If0bbd、b/179071523)
- 為更符合 ImageBitmap 和 ImageVector 的命名慣例,ImagePainter 已重新命名為與 VectorPainter 並行的 BitmapPainter。(Iba381、b/174565889)
- 已改良子字串測試 API,現在起以子字串作為引數 (Icbe78)
- 推出
InfiniteAnimationPolicy
協同程式結構定義元素,這將套用於無限動畫。根據預設,系統不會安裝任何政策,除非使用ComposeTestRule
執行測試。(I50ec4、b/151940543)。 - Animatable.snapTo 和 Animatable.stop 現已為暫停函式 (If4288)
- ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模組中的 androidx.activity.compose.setContent。(Icf416)
- Destructuring 和 copy() 方法在幾個類別中極少使用,現已將其從中移除。(I26702、b/178659281)
已新增支援 LazyColumn/LazyRow 的自訂索引鍵。如此一來,項目重新排序可處理得更佳。因此在將元素重新排序、或從中間移除項目時,儲存在記憶 {} 區塊中的狀態可隨項目一起移動
LazyColumn { items(users, key = { user -> user.id }) { ... } }
已將 Indication#createInstance 變更為 @Composable,並將 LocalIndication 更改為含有 Indication,而非 () -> Indication。(I5eeea、b/157150564)
Constraints.enforce
已改為Constraints.constrain
。(I8b8ea)loadFontResource 已淘汰,請改用 fontResource。imageResource、loadImageResource、vectorResource 和 loadVectorResource 也已淘汰,請改用 painterResource。(I6b809)
出於效能考量,ScrollAxisRange 語意現在接受傳回 Float (而非直接 Float 值) 的 lambda。(If4a35、b/178657186)。
新增了 EditableText 語意,可為文字欄位的可編輯輸入文字加上無障礙標示,同時新增對應的測試方法以檢查語意 (I8e07a)
Modifier.clickable 現在不支援連按兩下和長按。如要達到此功能,請使用 Modifier.combinedClickable。(Iafad1)
toIntPx() 已重新命名為 roundToPx() (I9b7e4、b/173502290)
IntBounds 已重新命名為 IntRect,且該 API 已改善 (I1f6ff)
已淘汰 Modifier.dragGestureFilter。請改用
Modifier.pointerInput { detectDragGestures (...)}
。或者,也可使用 Modifier.draggable 進行單一軸線拖曳 (I0ba93、b/175294473)已將 Ambient 重新命名,以配合 Ambient -> CompositionLocal 的更名。Ambient 原本名為 AmbientFoo,現在已將 CompositionLocal 命名為 LocalFoo。(I2d55d)
選取項目已移至 Foundation。(I7892b)
如同我們先前移除
state { 0 }
可組合項且現在鼓勵使用remember { mutableStateOf(0) }
等項目,我們也將移除savedInstanceState { 0 }
可組合項。請改用rememberSaveable { mutableStateOf(0) }
,如果 MutableState 中使用的類型可以存放在 Bundle 中,系統將自動儲存並還原資料。如果您之前傳遞的是自訂 Saver 物件,現在就必須使用含有stateSaver
參數的新 rememberSaveable 超載。用法形式如下:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }
(Ib4c26、b/177338004)新增了無障礙功能密碼語意 (I231ce)
新增了 ProgressBarRangeInfo.Indeterminate 以標示無障礙功能的不確定進度列 (I6fe05)
動畫中的播放時間現已統一為奈秒 (If776a)
已淘汰 @ComposableContract,並改用三個更具體的註解。
@ComposableContract(restartable = false)
已成為@NonRestartableComposable
@ComposableContract(readonly = true)
已成為@ReadOnlyComposable
@ComposableContract(preventCapture = true)
已成為@DisallowComposableCalls
@ComposableContract(tracked = true)
已移除。(I60a9d)已淘汰
emptyContent()
和(@Composable () -> Unit).orEmpty()
公用程式,原因是這些公用程式對效能已無正面影響或價值 (I0484d)重新寫入器現在可以關閉。封閉的重組工具將繼續調整,直到構成的子項協同程式完成為止。 將 Recomposer.shutDown 重新命名為「cancel」,以便與關閉對照 (Ib6d76)。
LazyVerticalGrid 的相關 API 會標示為實驗性 (Ia53e3、b/178519862)
rememberSavedInstanceState() 重新命名為 rememberSaveable() 並且移至 androidx.compose.runtime.saveable 套件。(I1366e、b/177338004)
RestorableStateHolder 已重新命名為 SaveableStateHolder,並移至 androidx.compose.runtime.saveable 套件。內部方法 RestorableStateProvider 已重新命名為 SaveableStateProvider。Generic 類型已移除,可直接將 Any 以索引鍵格式傳遞,不再需要使用實驗性註解。(I0902e、b/174598702)。
Saver、listSaver()、mapSaver()、autoSaver 已從 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable (I77fe6)
構件 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)
為了支援形狀在 rtl 方向的自動鏡射,RounderCornerShape、CutCornerShape 和 CornerBasedShape 上的參數已從 left/right 重新命名為 start/end。導入 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape,處理不需要自動鏡像功能的情況 (I61040、b/152756983)
canDrag 已從 Modifier.scrollable 中移除。(Id66e7、b/175294473)
Compose 編譯器外掛程式作為對象的 API 已經重構為採取介面,而不是具體類別。此外,介面也不會再使用類型參數。
這項內部變更應該不會影響原始碼相容性,但屬於二進位破壞性變更 (I3b922、b/169406779)。
已移除 Modifier.scaleGestureFilter。請改用 Modifier.zoomable。或者,請使用
Modifier.pointerInput { detectMultitouchGestures { ... }}
(Id5da1、b/175294473)AnimatedValue/Float 現已淘汰。請改用 Animatable (I71345、b/177457083)
- 已從公用 API 移除 CoreText 和 CoreTextField
- 已移除淘汰的 SelectionContainer 超載 (I99c19)
移除已淘汰的非暫停捲動函式 繼上次發行所作的變更後,非暫停捲動函式現已完全移除。請轉而使用同名的暫停函式。協同程式範圍可經由 rememberCoroutineScope() 取得 (I3d39c、b/178169563)。
已淘汰 androidx.compose.foundation.layout.ConstraintLayout,並改用 androidx.constraintlayout.compose.ConstraintLayout。您需要在
androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha01
上新增依附元件 (I87adc)。已淘汰 tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 及 pressIndicaitonGestureFilter。請改用 Modifier.clickable 或 Modifier.pointerInput 搭配 DetectionTapTouchs 函式。(I6baf9、b/175294473)
移除了
Recomposer.current()
。[Abstract]ComposeView 現已預設為延遲建立、以視窗為範圍的 Recomposers,並由視窗的 ViewTreeLifecycleOwner 所驅動。主機的生命週期停止時,Recomposition 和以withFrameNanos 為基礎的動畫滴答會暫停。(I38e11)。Recomposer.runningRecomposers 現在會提供唯讀 RecomposerInfo 的全域 StateFlow,用於在程序中觀察進行中的組合狀態。建議使用這個 API 取代已淘汰的 Recomposer.current() (If8ebe)
1.0.0-alpha11 版本
2021 年 1 月 28 日
發布 androidx.compose.foundation:foundation:1.0.0-alpha11
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha11
。1.0.0-alpha11 版包含此連結所列的修訂項目。
API 變更
淘汰非暫停 scrollBy、移除非暫停 scrollTo
我們建議使用暫停函式來控制捲動,並等待捲動完成。在此轉換過程中,我們正在淘汰和/或移除這些函式的非暫停版。(Ie9ced)
淘汰非暫停的 smoothScrollBy 我們現在建議使用暫停函式來控制捲動,並等待捲動完成。在此轉換過程中,我們正在淘汰這些函式的非暫停版。(I12880)
已為圖片和圖示新增內容說明參數。用於為無障礙功能服務提供說明 (I2ac4c)
BasicTextField 收到名為「decorationBox」的新參數。可用以對文字欄位新增例如圖示、預留位置、標籤等等裝飾,和增加命中目標區面積。(I16996)
canDrag 參數已從 Modifier.draggable 移除 (Ic4bec、b/175294473)
接受 FlingConfig 的 AnimatedFloat.fling 已經移除。請改用暫停 Animatable.animateDecay。(I4659b、b/177457083)
已將
data class
從以下類別移除:- InlineTextContent
- LocaleList
- (I605c7)
您現在可以在構圖外建立可點選、可切換和可選取的項目 (I0a130、b/172938345、b/175294473)
淘汰了 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)
現已成為擴充功能函式,因此在使用時必須手動匯入。新增 Arrays 的擴充功能超載:items(items: Array) 和 itemsIndexed(Array) (I803fc、b/175562574)已移除淘汰的 AbsoluteArrangement。(Iffa96、b/177641870)
propagateMinConstraints 參數已新增至 Box,以指定收到的最小限制是否應傳遞至 Box 的內容。預設值為 False (I0125b、b/152613457)。
修正錯誤
- 已淘汰 onCommit、onDispose 和 onActive,並改用 SideEffect 和 DisposableEffect API (If760e)
- WithConstraints 已重新作業為 BoxWithConstraints,並移至 foundation.layout。(I9420b、b/173387208)
已將 Font/FontFamily/Typeface 變更為 Factory 函式。
- 新增了以大寫字母開頭的工廠函式
- 淘汰了使用第一個字母小寫的舊版工廠函式
- 新的工廠函式會傳回 FontFamily 而非子類別
- 隱藏子類別的建構函式,確保子類別只能透過工廠函式建構
- 已將 Font.asFontFamily 重新命名為 Font.toFontFamily
- (I42aa7)
引入
ComposeContentTestRule
,其擴充ComposeTestRule
並且定義setContent
,後者已自ComposeTestRule
移除。新增可傳回ComposeTestRule
的工廠方法createEmptyComposeRule()
,且不會代為啟動活動。如要在測試期間啟動活動,請使用此方法,例如使用ActivityScenario.launch
(I9d782、b/174472899)animateAsState 現已改為 animateFooAsState,其中 Foo 是動畫處理的變數類型,例如 Float、Dp、Offset 等 (Ie7e25)
Density 現已成為 Arrangement 介面的接收器範圍。(I18aad)
TextFieldValue 可接受 AnnotatedString。然而,此為 API 變更,尚未導入多樣式文字編輯功能。
- 已從 EditingBuffer 建構函式參數中移除
initial
。(I326d5)
- 已從 EditingBuffer 建構函式參數中移除
invalidate 和 compositionReference() 現已淘汰,並分別以 currentRecomposeScope 和 rememberCompositionReference 取代。(I583a8)
AnnotatedString 已變更為由 kotlin.CharSequence 擴充。因此 length 和 subSequence 現在是執行個體函式,而擴充功能函式則已經移除。(Iaf429)
Duration 和 Uptime 會改為 Long 毫秒,同時此步驟也能移除這些類別上指標輸入的依附元件。(Ia33b2、b/175142755、b/177420019)
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)。TransformedText.transformedText 已重新命名為 TransformedText.text
- TransformedText 不再是資料類別 (Ie672a)
以下類別不再是資料類別:
- AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- FontWeight
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
已移除實驗性的 monotonicFrameAnimationClockOf 方法 (Ib753f、b/170708374)
淘汰全域座標方法,並建構新的視窗式座標方法。(Iee284)
請使用 ImeAction.None 取代 ImeAction.NoAction
- 請使用 ImeAction.Default 取代 ImeAction.Unspecified (Ie1bcc)
FocusRequester.createRefs 因為可能會有所變動,目前標示為實驗性質 (I2d898、b/177000821)。
SemanticsPropertyReceiver.hidden 已重新命名為 invisibleToUser 並標示為 @ExperimentalComposeUiApi。AccessibilityRangeInfo 已重新命名為 ProgressBarRangeInfo。stateDescriptionRange 已重新命名為 progressBarRangeInfo。AccessibilityScrollState 已重新命名為 ScrollAxisRange。horizontalAccessibilityScrollState 已重新命名為 horizontalScrollAxisRange。verticalAccessibilityScrollState 已重新命名為 verticalScrollAxisRange (Id3148)
VisualTransformation 已變更為功能介面 (I3bba4)
運用 TestCoroutineDispatcher 進行測試 (I532b6)
已移除 PointerInputData 並修改 PointerInputChange,為其提供所有 PointerInputData 的欄位。將 PointerInputEvent 和 PointerInputEventData 改為內部使用,因為這些並未用於任何公用 API (Ifff97、b/175142755)
已將 TextInputService.onStateUpdated 重新命名為 updateState (Id4853)
displaySize 應避免使用,因此請移除。一般建議使用 onRoot() 的尺寸,或至少使用視窗尺寸 (I62db4)
1.0.0-alpha10 版本
2021 年 1 月 13 日
發布了 androidx.compose.foundation:foundation:1.0.0-alpha10
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha10
。1.0.0-alpha10 版包含此連結所列的修訂項目。
API 變更
- ImeOptions 和 KeyboardOptions 不再是資料類別 (I3c898、b/168684531)
- VisualTransformation API 的異動
- 已將 OffsetMap 重新命名為 OffsetMapping
- 已將 OffsetMap.identityOffsetMap 重新命名為 OffsetMap.Identity
- PasswordTransformation 不再是資料類別
- 已將 OffsetMapping 移至其檔案。
- (I0bdf3)
- EditOperations API 變更
- 已將 EditOperation 重新命名為 EditCommand
- 為 EditOperation 具體實作的指令後置字串。
- EditCommand 已不再是資料類別
- 已將 EditOperation.process 函式重新命名為 applyTo
- 已將 InputEventListener 重新命名為 InputEventCallback
- (I0a366)
- 已將 Velocity 修改成為具有元件部分和數學運算 (Ib0447)
- @ExperimentalTesting 已重新命名為 @ExperimentalTestApi,與類似的實驗性 API 註解保持一致 (Ia4502、b/171464963)
- 已為 LazyColumn/LazyRow 新增實驗性的 stickyHeader 方法 (I0a81d)
- Color.useOrElse() 已重新命名為 Color.takeOrElse() (Ifdcf5)
- 已淘汰 TestUiDispatcher。請改用 Dispatchers.Main (Ic171f、b/175385255)
- 將 Toggle 新增至 Foundation 的 Strings.kt (I4a5b7、b/172366489)
- 將 nativeClass 移至 ui 模組並設為內部使用。已在同等的實作中更新 nativeClass 的使用情形,改為使用「is MyClass」。(I4f734)
- 淘汰 FlowRow 和 FlowColumn。請改用自訂版面配置。(I09027)
- Modifier.focus() 和 Modifier.focusRequester() 現已淘汰。請改用 Modifier.focusModifier() 和 Modifier.focusReference()。(I75a48、b/175160751、b/175160532、b/175077829)
- 推出 SelectionRegistrar.notifySelectableChange,向 SelectManager 通知 Selectable 更新 (I6ff30、b/173215242)。
- 已將
fun Dp.isFinite()
變更為val Dp.isFinite
(I50e00) - Constraints#satisfiedBy 已重新命名為 isSatisfiedBy。(I9cf5c)
- 為含有 Unspecified 常數的內嵌類別新增了 isSpecified、isUnspecified 和 useOrElse。(I93f7b、b/174310811)
修正錯誤
- 新增以協同程式為主的 API
Animatable
,可確保動畫之間的互斥性。新增 DecayAnimationSpec,可支援多維度衰減動畫 (I820f2、b/168014930) - 新增了對停用和唯讀文字欄位的支援 (I35279、b/171040474、b/166478534)
animate()
現已替換為animateAsState()
,後者會傳回State<T>
而非T
。這樣系統會將無效範圍縮小至讀取 State 值的位置,因此可以提升效能 (Ib179e)。- 新增 Semantics 角色 API,並將 Role 新增為可點選、選取和切換的 SemanticsModifier 參數。Modifier.progressSemantics 已變更,讓 Slider 也能夠使用 (I216cd)
- 現在原生 keyEvent 能透過 keyEvent.nativeKeyEvent 加以存取 (I87c57、b/173086397)
1.0.0-alpha09 版本
2020 年 12 月 16 日
發布 androidx.compose.foundation:foundation:1.0.0-alpha09
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha09
。1.0.0-alpha09 版包含此連結所列的修訂項目。
API 變更
新增可捲動的介面
這可讓 ScrollState 和 LazyListState 視同共通類型,如此一來即可在這兩種類型之間實作自訂捲動功能。
這也會將 smoothScrollBy 移至 Scrollable 上的擴充功能函式,以利用此功能性。(I2153b)
新增 LazyVerticalGrid (I17267、b/162213211)
淘汰 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed。請改用 LazyColumn 和 LazyRow (I5b48c)
如要暫停游標指標輸入 API,請將 RiverPointerInputScope 重新命名為 AwaitPointerEventScope,並將 HandlePointerInput() 重新命名為 awaitPointerEventScope() (Idf0a1、b/175142755)
已新增 LazyListState.layoutInfo,可列出目前顯示項目的尺寸和偏移清單 (If8678、b/170472532)
已移除 ExperimentPointerInput 註解 (Ia7a24)
已為 TextFields 新增 InteractionState 的支援。(I61d91)
新增 LazyColumn/Row 的 reverseLayout 參數。參數為
true
時,代表項目是由下往上組合,LazyListState.firstVisibleItemIndex == 0
則表示第一個項目位於底部 (I552ae、b/166589935)。已為 LazyColumn 新增 verticalArrangement 參數。已為 LazyRow 新增 horizontalArrangement 參數。如果沒有足夠的項目可填滿最小尺寸時,即可利用 Arrangement 在項目之間加入間距,以及指定項目的排列方式。(Icf79a、b/170394300)
detectMultitouchGestures 現在起使用一個回呼,並搭配合併的 centroid、pan、zoom 及 rotate 參數。(Ie6e1c)
已將 ContentDrawScope 移至 ui-graphics 模組,以便與 DrawScope 搭配使用。(Iee043、b/173832789)
修正錯誤
- 現在,偏移修飾符中的 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)
已淘汰 Modifier.focusObserver。請改用 Modifier.onFocusChanged 或 Modifier.onFocusEvent (I30f17、b/168511863、b/168511484)
AutoFill API 現為實驗性 API,必須啟用 (I0a1ec)
新增解構宣告,可建立 FocusRequester 例項 (I35d84、b/174817008)。
已分別將 accessibilityLabel 和 accessibilityValue 重新命名為 contentDescription 和 stateDescription。(I250f2)
引入 SelectionRegistrar 的數種新函式,並將 onPositionChange 重新命名為 notifyPositionChange (Ifbaf7)
已將 AndroidOwner 歸為內部 (Ibcad0、b/170296980)
新建 infiniteRepeatable 函式,可用於建立 InfiniteRepeatableSpec (I668e5)
Applier
介面經過變更,將樹狀結構建構程序從由上往下簡化為由下往上。insert()
方法已重新命名為insertTopDown()
。加入新的方法
insertBottomUp()
。套用器會根據效能表現選用
insertTopDown()
或insertBottomUp()
,將節點插入目前編輯的樹狀結構。對某些樹狀結構 (例如
LayoutNode
和View
) 而言,由下往上的建構方式會比由上往下更有效率。在這項變更之前,如要實作由下而上建構作業,您需要先插入一些堆疊,並必須將其複製到每個需進行由下而上效能建構作業的套用器。這項變更實施後,Applier
會覆寫insertBottomUp()
以由下往上建構樹狀結構,而覆寫insertTopDown()
則會由上往下建構樹狀結構。(Icbdc2)新增了 painterResource API 以從光柵化素材格式 (例如 PNG) 或 VectorDrawable 處理不透明地載入 Painter 物件。取用者不必再事先判斷資產類型,並可呼叫此方法,取得用於 Image 可組合項或 Painter 修飾符的 Painter 物件 (I2c703、b/173818471)。
新增 buildAnnotatedString 工廠函式,可供建構 AnnotatedString。淘汰了 annotatedString 建構工具函式。(Idfe0b)。
1.0.0-alpha08 版本
2020 年 12 月 2 日
發布了 androidx.compose.foundation:foundation:1.0.0-alpha08
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha08
。1.0.0-alpha08 版包含此連結所列的修訂項目。
API 變更
- 已從
CoreTextField
中移除maxLines
參數。如果您要依照行數限制文字欄位的高度,請改用BasicTextField
(Iec002) - 已將
await*TouchSlop()
方法變更為不偵測指標向下,並且重新命名為*OrCancellation
。同時也不再需要使用orientationLock
參數。(Ie96e1) - 新增了可組合 lambda 參數在於命名和位置的 lint 檢查,以檢查是否與 Compose 準則一致。另外也根據 Lint 檢查和指引,將部分使用
children
做為結尾 lambda 名稱的 API 遷移至content
(Iec48e) - 已將
foundation:foundation-text
API 移至foundation:foundation
套件結構維持不變 (Id3eb2) - 新增多點觸控手勢偵測工具,包括偵測旋轉、縮放和平移的協助程式。(Ic459d)
- 新增拖曳手勢偵測工具的暫停指標輸入 API,包括方向鎖定在內。(Icef25)
- 已將 VectorAsset 重新命名為 ImageVector。根據 API 委員會準則,已將 VectorAsset 移動至 Builder 並對其重新命名,使其成為 ImageVector 的內部類別。新增了 VectorAssetBuilder 的 typealias,以便連結至 ImageVector.Builder,使其彼此相容。(Icfdc8)
- 已將 ImageAsset 和相關方法重新命名為 ImageBitmap。(Ia2d99)
- 已將 Foundation 語意屬性移至 ui (I6f05c)
新增協同程式為主的捲動 API:
新增 LazyListState.snapToItem 和 LazyListState.smoothScrollBy,以及較低階的 API 捲動控制 API。這些 API 會提供可控制捲動操作的暫停介面,這個介面會等到捲動操作完成後再傳回。(Ie5642)
已將 singeLine 參數新增至 BasicTextField、TextField 和 OutdashTextField。如要將文字欄位設為可水平捲動的單一行,請將這個參數設為 true (I57004、b/168187755)。
使用新的暫停指標輸入,新增了輕觸、輕觸兩下、長按和輕按指示的手勢偵測工具。我們還新增了一些公用程式,讓開發人員更容易編寫自己的手勢偵測工具。(I00807)
Modifier.focusable 有需要新增至 Foundation。這項工具可讓您為元件新增可聚焦的行為,並採用正確的語意和無障礙功能 (I41eb9、b/152525426、b/162865824)
先前淘汰的 API 已移除:Border 已移除,請改用 BorderStroke。已移除 Modifier.drawBorder,請改用 Modifier.border。已移除 Modifier.gravity,請改用 Modifier.align。已移除 Stack,請改用 Box (I32c2b、b/172470874)
AbsoluteArrangement 已重新命名為 Arrangement.Absolute。(If26f2)
修正錯誤
- 已將 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)
- 已從 SubcomposeLayout 宣告中移除
<T>
,現在不必指定類型即可使用該項目 (Ib60c8) - 將 PointerInputData 的運作時間和位置欄位設定成不可為空值。(Id468a)
- MaterialTheme 現可為選取控點和選取背景設定正確的顏色。非 Material 應用程式可以手動使用 AmbientTextSelectionColors 自訂用於選取項目的顏色 (I1e6f4、b/139320372、b/139320907)
- Box 的對齊參數已重新命名為 contentAlignment。(I2c957)
- offsetPx 修飾符已重新命名為 offset,且現已改用 lambda 參數,而非 State (Ic3021、b/173594846)
- 新增了 WindowManager.isWindowFocused 以檢查主機視窗是否為焦點,並新增提供 onWindowFocusChanged 回呼的 WindowFocusObserver。(I53b2a、b/170932874)
- 已將 resetInput 參數新增至 TextInputService#onStateUpdated (I3e8f5、b/172239032、b/171860947)
- 已更新 TextFieldValue API
- 將 TextFieldValue 組合設為唯讀
- 已移除因無效選取範圍所擲回的例外狀況 (I4a675、b/172239032)
- 依照其他 Ambient 和 Compose API 準則,淘汰以
Ambient
作為字尾所命名的 Ambient,並改為以 Ambient 作為字首的新屬性。(I33440) - 新增了 Android Typeface 包裝函式。您可以透過
typeface
函式 (例如typeface(Typeface.DEFAULT)
) 載入 Android 字體。並將typefaceFromFontFamily()
重新命名為typeface()
(I52ab7) - 新增了 lint 檢查功能,以檢查 Modifier 工廠是否在內部使用
androidx.compose.ui.composed {}
,而非標示為@Composable
。(I3c4bc) - 新增 Lint 檢查,方便檢驗修飾符工廠函式是否依其擴充功能定義,確保兩者能順利鏈結。(I07981)
- 語意引數 mergeAllDescendant 已重新命名為 mergeDescendant。(Ib6250)
- 測試中的時間控制項 (TestAnimationClock 及其用例) 處於實驗階段 (I6ef86、b/171378521)
- 移除舊的 ui-test 模組及其虛設常式 (I3a7cb)
- TextUnit.Inherit 重新命名為 TextUnit.Unspecified,以與其他單元一致。(Ifce19)
- 更新了 Alignment 介面,並使其可正常運作。(I46a07、b/172311734)
- 已將
foundation:foundation-text
模組合併為foundation:foundation
(Idac0f) - 淘汰 place(Offset) 和 placeRelative(Offset)。請改用含有 int 偏移的超載 (I4c5e7)
id
已重新命名為LayoutIdParentData
的layoutId
。Measurable.id
已重新命名為Measurable.layoutId
(Iadbcb、b/172449643)
1.0.0-alpha07 版
2020 年 11 月 11 日
發布 androidx.compose.foundation:foundation:1.0.0-alpha07
、androidx.compose.foundation:foundation-layout:1.0.0-alpha07
和 androidx.compose.foundation:foundation-text:1.0.0-alpha07
。查看 1.0.0-alpha07 版的修訂項。
API 變更
- 比照
Modifier.fillMaxSize[Width|Height]
,我們現在支援在LazyColumn/Row
範圍內的Modifier.fillParentMaxSize[Width|Height]
中使用分數 (I797e2、b/166586426) - 已從公用 API 中移除
KeyboardOptions.toImeOptions
。(Ic2e45) - 淘汰 Foundation 的 AmbientTextStyle、ProvideTextStyle 和 AmbientContentColor。請改用 Material 程式庫中可提供的新版本。對於非 Material 應用程式,您應建立自己的設計系統專屬主題設定環境,並在自己的元件中使用 (I74acc、b/172067770)
- 已淘汰 foundation.Text,並替換為 material.Text。如要瞭解不使用主題值的無預設立場基本文字 API,請參閱 androidx.compose.foundation.BasicText (If64cb)
- 已將 maxLine 新增至 TextField (Ib2a5b)
- 更新 TextField 以接受 KeyboardOption (Ida7f3)
- 新增了於 TextField 中使用的 KeyboardOption (I9ca32)
- 新增 BasicText。這是一個在設計方面不預設立場的文字 API,與 BasicTextField 平行。(I28268)
- 移除了 ExperimentalLazyDsl 註解。現在不必新增 @OptIn 即可使用 LazyColumn/LazyRow (Idab7a、b/166584730)
- 已淘汰 BaseTextField。請改用 BasicTextField。(I896eb)
- BasicTextField 已新增為 CoreTextField 與 BaseTextField 的替代項目 (Id4cea)
- 移除已淘汰的 LazyColumnItems/LazyRowItems (I1d8a8)
- 已移除依照內建函式的測量值調整大小的已淘汰可組合項。(I18537、b/171811496)
- relativePaddingFrom 已重新命名為 paddingFrom。新增 paddingFromBaseline 修飾符,方便您指定版面配置邊界到文字基準線的距離 (I0440a、b/170633813)
- 在 aspectRatio 修飾符中新增 matchHeightConstraintsFirst 參數,可用於指定讓修飾符先依高度限制調整尺寸,再試著調整相應寬度。(Ie7c43、b/155290593)
- 已移除淘汰的 DpConstraint。(I87884、b/171702471)
修正錯誤
- 已引入 ScaleFactor 內嵌類別以表示水平與垂直軸相互獨立的縮放比例係數,以支援縮放比例不統一的用途。
- 已將 ComputeScaleFactor 方法新增至 ContentScale
- 新增了 ContentScale.FillBounds 以執行非統一的資源調度,藉此將 srcs 邊界延伸至完全符合目的地。
- 新增了運算子方法,以便使用大小參數計算 ScaleFactor 參數。
- (Ic96a6、b/172291582)
- captureToBitmap 已移至 captureToImage。(I86385)
- 將 CoreText 標示為 @InternalTextApi。請改用 BasicText (I6aaeb)。
- 將 KeyboardOptions 重新命名為 ImeOptions (I82f36)
- 已將 KeyboardType 和 ImeAction 移入 KeyboardOptions (I910ce)
- CoreTextField 已標示為 @InternalTextApi。請改用 BasicTextField (Ie2469)
- 已移除 ExperimentalSubcomposeLayoutApi 註解。現在可以在不新增 @OptIn 的情況下使用 SubcomposeLayout (I708ad)
- 推出 ui-test-junit4 模組 (Ib91f8)
- 已更新 Icon API 以採用 Color.Unspecified 做為可能的色調顏色,在沒有 ColorFilter 的情況下能以指定素材或繪圖工具繪圖。先前嘗試略過繪製含有 Color.Unspecified 的色調,導致系統使用透明色繪製色調,結果完全沒有顯示任何色彩。(I049e2、b/171624632)
- 已將 MeasureResult 從 MeasureScope 移出 (Ibf96d、b/171184002)
- 將數個版面配置相關符號從 androidx.compose.ui 移至 androidx.compose.layout.ui (I0fa98、b/170475424)
- 已將 androidx.ui.test 移至 androidx.compose.ui.test (I9ffdb)
- 已將 FirstBaseline 和 LastBaseline 移至 androidx.compose.ui.layout 套件 (Ied2e7)
- 新增不使用回呼的 SelectionContainer (Ibfadb)
- 在 SelectionContainer 中為 SelectionHandle 的 Position 新增 Test。(Ie93db)
- 新增了鍵盤自動更正輸入法編輯器選項 (I57b8d)
1.0.0-alpha06 版本
2020 年 10 月 28 日
發布 androidx.compose.foundation:foundation:1.0.0-alpha06
、androidx.compose.foundation:foundation-layout:1.0.0-alpha06
和 androidx.compose.foundation:foundation-text:1.0.0-alpha06
。查看 1.0.0-alpha06 版的修訂項。
API 變更
- androidx.compose.foundation.Icon 已移至 androidx.compose.material.Icon。如果不想使用 Material 程式庫,也可以將 Image 元件/Modifier.paint() 與 Painter 搭配使用 (I9f622)
- 已將 engagementState 新增至 Modifier.scrollable、ScrollableColumn 和 LazyColumnFor (I81566、b/169509805)
- alignByBaseline 已新增至 RowScope,alignWithSiblings 重新命名為 alignBy (I06503、b/170628732)
- 將 Box 實作為內嵌函式。(Ibce0c、b/155056091)
- 已將 maxLines 新增至 CoreTextField (Ibee58、b/143687793)
- 已將 softwrap 新增至 CoreTextField。(I21a4b)
修正錯誤
- 淘汰 VectorPainter 並改用 rememberVectorPainter,以更能指出可組合項 API 於內部利用「記憶」使得資料在撰寫之間持續存在。(Ifda43)
- 在 ComposeTestRule 中啟用轉場功能,並從 ComposeTestRule 中移除啟用閃爍游標的選項。(If0de3)
- 已對 CoreTextField 新增單行鍵盤選項 (I72e6d)
- 已將 Radius API 重新命名為 CornerRadius,以便完善表達於 Compose 中的使用方式。更新說明文件,指出負圓角半徑的限制取值範圍已設為零 (I130c7、b/168762961)
- 新增在經組合的輔助鍵之中指定檢查器相關資訊的功能 (Idee08、b/163494569)
- 新增了 KeyboardCapitalization 輸入法編輯器選項 (I8ac38)
- 修正 Rtl 控點位置。(I6e1e0)
- 破壞性變更:由於指標事件中能夠變更的值應該只有取用資料,因此將 PointerInputFilter.onPointerEvent(...) 的傳回值移除。現在您不必從 PointerInputFilter.onPointerEvent(...) 傳回資料,可直接改變 PointerEvents 傳入的取用資料。(I6acd0)
- 將 SelectAll 選項新增至選單 (Ief02b)
1.0.0-alpha05 版本
2020 年 10 月 14 日
發布 androidx.compose.foundation:foundation:1.0.0-alpha05
、androidx.compose.foundation:foundation-layout:1.0.0-alpha05
和 androidx.compose.foundation:foundation-text:1.0.0-alpha05
。查看 1.0.0-alpha05 版的修訂項。
API 變更
- CoreTextField 現已支援游標功能 (Id23aa)
已淘汰 contentColor() 和 currentTextStyle() API 並分別改為 AmbientContentColor 和 AmbientTextStyle 環境。與搭配使用其他環境時一樣,您可以對環境屬性使用
.current
,藉此存取目前的值。這項變更的用意是要維持一致性,避免採用多種方式來完成同一件事。此外,部分環境屬性已重新命名,以便清楚描述其用途,如下所示:- ContentColorAmbient -> AmbientContentColor
- TextStyleAmbient -> AmbientTextStyle
- IndicationAmbient -> AmbientIndication
- EmphasisAmbient -> AmbientEmphasisLevels
- RippleThemeAmbient -> AmbientRippleTheme (I37b6d)
修正錯誤
- 為將內嵌類別 sentinel 值標準化的一部分,將 Color.Unset 重新命名為 Color.Unspecified,使其與其他內嵌類別一致 (I97611、b/169797763)
- 新增了 Copy/Paste/Cut 等無障礙功能操作 (I6db4f)
- 引入 TextOverflow.None。溢位為 None 時,Text 不會再處理溢位,而是向 LayoutNode 回報實際尺寸 (I175c9、b/158830170)
- 將 size.Unspecified 的參數更新為 Float.NaN,而非 Float.POSITIVE_INFINITY。更新了 Painter 實作方式,以檢查 Size.Unspecified 和非有限大小 (I95a7e)
- 新增了 Paging Compose 模組和分頁整合 (Ib85da)
- 請修改 LazyListScope 以接收可為空的值 (I1765b)
- OnPositionedModifier 已重新命名為 OnGloballyPositionedModifier,onPositioned() 重新命名為 onGloballyPositioned()。(I587e8、b/169083903)
- 新增了 LazyColumn/Row 的範例 (Idc16d)
- 修正項目和 itemsIndexed 方法,以允許使用 emptyList (I06647)
- 新增指定檢查器資訊的 DSL (Ic9a22)
- 將 LongPress 移到文字中。(Iff2bc)
- 停用 Text 中的 Selection 和 Demo。(Ie7e97)
- 支援無障礙功能的 AnnotatedString 轉換至 SpannableString (Ief907)
- 移除了
PointerInputFilter.onPointerInput(...)
。並應改用PointerInputFilter.onPointerEvent(...)
。(I6f04a)
1.0.0-alpha04 版本
2020 年 10 月 1 日
發布 androidx.compose.foundation:foundation:1.0.0-alpha04
、androidx.compose.foundation:foundation-layout:1.0.0-alpha04
和 androidx.compose.foundation:foundation-text:1.0.0-alpha04
。1.0.0-alpha04 版包含以下修訂項目。
API 變更
- Stack 已重新命名為 Box。原先存在的 foundation.Box 會淘汰,改用 compose.foundation.layout 中的新版 Box。Box 的新行為模式為當其擁有多個子項時,會將子項一個一個向上堆疊,這一點與之前的 Box 不同,之前的行為與 Column 較為類似 (I94893、b/167680279)。
- 淘汰了 Box 裝飾參數。如果要為您的方框加上裝飾/邊框間距,請改用 Modifier (Modifier.background、Modifier.border、Modifier.padding) (Ibae92、b/167680279)
- 新增 LazyListState 類別。可用以觀察及控制 LazyRow 和 LazyColumn 元件的捲動位置。您可以使用 rememberLazyListState() 建立執行個體,並傳遞到元件的狀態參數。目前,可在此初始版本中觀察第一個顯示的項目和偏移。(Ic7cb7、b/159307669)
- 現在起,Lazy 清單的位置和捲動偏移可在 Activity 重新建立的全程當中儲存和還原 (Ie045f、b/166589058)
- 新增長按語意語意操作 (I6281b、b/156468846)
- 已新增 MutatorMutex 公用程式,用來長時間維持一個共用狀態的更動子,並且依照優先順序取消衝突的更動子 (I3f975)
- 已使用 @VisibleForTesting 為 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 加上註解,使其成為內部 API,並隱藏其 kdoc (I554eb、b/168308412)
- 已從有 String 輸入的 Text 移除 inlineContent 參數。由於 inlineContent 必須搭配 AnnotatedString,因此不會用到。(Ief403)
- 已移除淘汰的自訂 Arrangement API (Ic576d、b/168297922、b/168297923)
- 將
unbounded
參數新增至 wrapContentSize 修飾符,後者能夠測量最大限制為無限的版面配置元素。(I77951、b/158559319) - 我們已阻止靜態匯入版面配置範圍的內容 (例如 RowScopes 中的 alignWithSiblings)請改用明確範圍替代項:
with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }
(I216be、b/166760797)。
修正錯誤
- 更新了多個圖形 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)
- 藉由不在每次捲動時皆執行不必要的重整,達到 LazyColumnFor/LazyRowFor 捲動的效能最佳化 (I64f65、b/168293643、b/167972292、b/165028371)
- 已修正捲動後 LazyColumnFor/LazyRowFor 的異常終止,接著變更項目並且實作先前顯示的項目移除之後的自動向上捲動,使得再也不會在末端顯示空白間隙 (I220ab、b/161480164、b/167855468)
- 不再允許在同方向的容器 (例如 ScrollableContainer 和 LazyColumnFor) 中嵌套可捲動項目。未曾支援此做法之外,也會破壞組合 LazyColumnFor 項目時的快速滑過和所有延遲 (I6e101)
- 更新多個圖形 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)
- 將 AccessibilityScrollState 新增至語意屬性 (Ifeda9)
- 將 TextRange 設為內嵌,以避免建立物件 (Id034b)
- 已移除 ParagraphConstraint。寬度現在會直接傳遞至 Paragraph (Ica712)
1.0.0-alpha03 版本
2020 年 9 月 16 日
發布 androidx.compose.foundation:foundation:1.0.0-alpha03
、androidx.compose.foundation:foundation-layout:1.0.0-alpha03
和 androidx.compose.foundation:foundation-text:1.0.0-alpha03
。查看 1.0.0-alpha03 版的修訂項。
API 變更
- InnerPadding 已重新命名為 PaddingValues (I195f1、b/167389171)
- 版面配置 API 中用到 gravity 的部分已統一改成 align 或 alignment (I2421a、b/164077038)
- 已在 Stack 上新增對齊參數,以便可指定所有 Stack 子項的預設對齊方式 (Ie80ca、b/164085265)
修正錯誤
- 已淘汰 DpConstraint 和使用該項目的 API (I90cdb、b/167389835)
widthIn
的minWidth
和maxWidth
參數已重新命名為min
和max
。preferredWidthIn
、heightIn
和preferredHeightIn
也比照完成同樣的處理。(I0e5e1、b/167389544)- 已在 ComposeTestRule 中加入 onNode 和其他全域方法,因為目前的全域方法即將淘汰。(Ieae36)
- 已修正 GestureScope 的尺寸和位置的計算方式,以免造成滑動手勢無效等其他問題 (Iaf358、b/166589947)
- 已將
createAndroidComposeRule
和AndroidInputDispatcher
從androidx.ui.test.android
移至androidx.ui.test
(Idef08,b/164060572)
1.0.0-alpha02 版
2020 年 9 月 2 日
發布了 androidx.compose.foundation:foundation:1.0.0-alpha02
、androidx.compose.foundation:foundation-layout:1.0.0-alpha02
和 androidx.compose.foundation:foundation-text:1.0.0-alpha02
。1.0.0-alpha02 版本包含以下修訂項目。
修正錯誤
- TestUiDispatcher 標示為實驗性 (Iae99d、b/161247083)
新增了
ManualFrameClock.hasAwaiters
以查看是否有任何內容正在等待該時鐘的框架;新增runWithManualClock
用來在執行需要 ManualFrameClock 的測試時取代runBlocking
;並新增TestUiDispatcher.Main
,供您輕鬆存取測試中的主要 UI 發送器。例如:
@Test fun myTest() = runWithManualClock { clock -> // set some compose content withContext(TestUiDispatcher.Main) { clock.advanceClock(1000L) } if (clock.hasAwaiters) { println("The clock has awaiters") } else { println("The clock has no more awaiters") } }
1.0.0-alpha01 版本
2020 年 8 月 26 日
發布 androidx.compose.foundation:foundation:1.0.0-alpha01
、androidx.compose.foundation:foundation-layout:1.0.0-alpha01
和 androidx.compose.foundation:foundation-text:1.0.0-alpha01
。1.0.0-alpha01 版本包含以下修訂項目。
0.1.0-dev 版
0.1.0-dev17 版
2020 年 8 月 19 日
發布了 androidx.compose.foundation:foundation:0.1.0-dev17
、androidx.compose.foundation:foundation-layout:0.1.0-dev17
和 androidx.compose.foundation:foundation-text:0.1.0-dev17
。查看 0.1.0-dev17 版的修訂項。
API 變更
- 新增 Row 和 Column 的 spacedBy Arrangement,使版面配置子項能依固定間距定位;另也新增 aligned Arrangment,使 Row/Column 中的版面配置子項可根據 Alignment 方法彼此對齊放置。淘汰之前的 Arrangement.Vertical#arrange 和 Arrangement.Horizontal#arrange 方法,未來也將停止支援編寫自訂的 Arrangement。(I6733d、b/161985975)
- 將 Offset 改為內嵌類別 (Iaec70)
- 已從 TextField 移除 onFocusChanged 回呼。請改用 Modifier.focusObserver。(I51089、b/161297615)
- 已淘汰 Modifier.drawBorder。請改用 Modifier.border。Borde 資料類別已由 BorderStroke 取代 (I4257d、b/158160576)
- 移除了 VerticalScroller 和 HorizontalScroller。請改用捲動式資料欄/資料列。已移除 Modifier.drawBackground。請使用 Modifier.background (I73b0d、b/163019183)
- 自 LazyItemScope 移除標示為淘汰的 fillMax* 修飾符,因為對於非 LazyColumnFor 直接子項的項目而言,其增加了正確新增這些修飾符的難度 (Ifa78d)
- 已將 LazyColumn/LazyRow 實作新增為 DSL (I93cc6)
- 現已將 Constraint 設為內嵌類別 (I88736)
- 利用 fillMaxWidth、fillMaxHeight 和 fillMaxSize 輔助鍵,新增將版面配置的大小設定為可用空間的一部分的功能。(I945bb、b/161562591)
修正錯誤
- 已將 modifier 參數加入至 SelectionContainer (I4aada、b/161487952)
- 已將 mergePolicy lambda 加入至 SemanticsPropertyKey。這可讓您定義 mergeAllDescendants 語意合併的自訂政策。根據預設政策,如果有父項值,就會直接使用父項值;如果沒有,則使用子項值 (Iaf6c4、b/161979921)
- 已將
PlacementScope.placeAbsolute()
重新命名為PlacementScope.place()
,原先的PlacementScope.place()
則重新命名為PlacementScope.placeRelative()
。因此,PlacementScope.place()
方法不再以由右至左的結構定義自動鏡射位置。如果需要這個方法,請改用PlacementScope.placeRelative()
。(I873ac、b/162916675) - 移除淘汰的 FilledTextField 元件。請改用 TextField,取得 Filled 文字欄位的 Material Design 實作方式 (I5e889)
- 已將 backgroundColor 參數加入至 LinearProgressIndicator,並從 CircularProgressIndicator 移除內部邊框間距。新增 ProgressIndicatorConstants.DefaultProgressAnimationSpec,可在各值之間以動畫表示進度時,做為預設的 AnimationSpec (If38b5、b/161809914、b/161804677)
state { ... }
可組合項現已淘汰,改為明確呼叫remember { mutableStateOf(...) }
以求一目瞭然。這樣可以減少管理狀態所需的整體 API 介面和概念數量,且符合類別屬性委派作業的by mutableStateOf()
模式。(Ia5727)- 將 RRect 重新命名為 RoundRect,以更符合 Compose 命名模式 建立了與 RRect 類似的函式建構函式,並淘汰了 RRect 函式建構函式 (I5d325)
- 已移除 onChildPositioned 和 OnChildPositionedModifier。開發人員應改在子版面配置上使用 onPositioned 和 OnPositionedModifier。(I4522e、b/162109766)
- 已將 IntSize 設為內嵌類別 (I2bf42)
- 長按空白區即可編輯。(Ib1e5b)
- 隱藏輕觸文字後的 FloatingToolbar。(If4525)
- 隱藏更新選取項目時的 FloatingToolbar。(I8444c)
- Blur 時取消選取。(I781a2)
0.1.0-dev16 版本
2020 年 8 月 5 日
發布 androidx.compose.foundation:foundation:0.1.0-dev16
、androidx.compose.foundation:foundation-layout:0.1.0-dev16
和 androidx.compose.foundation:foundation-text:0.1.0-dev16
。查看 0.1.0-dev16 版的修訂項。
API 變更
- 已為 Lazy 清單的 itemContent 參數新增 LazyItemScope。這可提供修飾符來填滿父項大小上限,解決以下用途問題:項目應填滿可視區域,但因該項目的測量限制為無限,導致一般 Modifier.fillMaxSize() 無法運作 (Ibd3b2、b/162248854)。
- 將對話方塊移至使用者介面 (I47fa6)
- 新增了 LazyColumnForIndexed/LazyRowForIndexed 此 LazyColumnFor/LazyRowFor 版本,可提供 itemCallback 中的 index 與 item。如果除了現有項目還需瞭解目前的索引,這一點十分實用。(I65ff3)
- 已將 Modifier.deternimateProgress 重新命名為 Modifier.progressSemantics (I9c0b4)
- 已將 LazyColumnItem 重新命名為 LazyColumnFor。已將 LazyRowItem 重新命名為 LazyRowFor (I84f84)
- 新增一些標記/註解,以達到最佳做法 (I66b20)
- foundation.shape.corner 套件已扁平化為 foundation.share (I46491、b/161887429)
- 新增了 LazyRowItems/LazyColumnItems 的跨軸重力參數。LazyRowItems/LazyColumnItems 現在起可支援納入內容的行為模式。(Ib39fc)
- 已將 ZoomableState 重新命名為 ZoomableController。現已加入對 smoothScale 的自訂曲線支援。新增了
enabled
和onZoomStarted
功能 (If8b8f) - 已將 Material FilledTextField 重新命名為 TextField,並將基礎的 TextField 重新命名為 BaseTextField,以便於發現及使用最簡單的所需 API (Ia6242、b/155482676)
- 已移除先前淘汰的 AdapterList。請改用 LazyColumnItems (I12b9b)
- 將 Modifier.drawBackground 重新命名為 Modifier.background (I13677)
- 已移除舊的 ConstraintLayout DSL。已將 ConstraintSet2 重新命名為 ConstraintSet (If58d1、b/162450908)
- 新增了 Modifier.corOffset() 和 Modifier.absoluteOffsetPx()。絕對偏移輔助鍵與偏移輔助鍵不同,不會在由右至左的結構定義中自動鏡射 (I3aa21)
Row
和Column
現為內嵌函式,可大幅降低使用這些項目的負荷。(I75c10)
修正錯誤
- 解決廣泛的 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,並移除不使用的方法
新增了 MonotonicFrameAnimationClock,可用來將 MonotonicFrameClock 作為 AnimationClockObservable,可消除以協同程式為主的新版時鐘與仍使用回呼型舊版時鐘的 API 之間的差異。
MonotonicFrameClock 等同於 ManualAnimationClock,現在為 ManualFrameClock。(I111c7、b/161247083)
移除了
SemanticsNodeInteraction.performPartialGesture
。請改用SemanticsNodeInteraction.performGesture
(Id9b62)已將
SemanticsNodeInteraction.getBoundsInRoot()
重新命名為SemanticsNodeInteraction.getUnclippedBoundsInRoot()
(Icafdf、b/161336532)更新了支援版面配置由右至左的 API。新增了 LayoutDirectionAmbient,可用於讀取及變更版面配置方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3)。
淘汰 Modifier.plus,請改用 Modifier.then。「Then」能更明確地指出排序,同時也禁止輸入會破壞鏈結及降低可讀性的
Modifier.padding().background() + anotherModifier
(Iedd58,b/161529964)新增了
isFocused()
和isNotFocused()
SemanticsMatcher。(I0b760)已新增 RemeasurementModifier。可讓使用者同步性地重新測量版面配置。由於重新測量/版面重新配置程序會自動執行,通常不會用到這個項目,但在捲動時會在 LazyColumnItem 中用到 (I5f331、b/160791058)
依照最新準則,isSystemInDarkTheme 現在一律會考量全系統的深色主題設定,在 Q 之前忽略省電狀態。(I0c10c)
已淘汰 OnChildPositioned。請改用子項的 OnPositioned (I87f95、b/162109766)
已將 AndroidComposeTestRule 重新命名為 createAndroidComposeRule。(I70aaf)
新增無障礙操作,以取得 TextLayoutResult (I9d6e6)
0.1.0-dev15 版本
2020 年 7 月 22 日
發布了 androidx.compose.foundation:foundation:0.1.0-dev15
、androidx.compose.foundation:foundation-layout:0.1.0-dev15
和 androidx.compose.foundation:foundation-text:0.1.0-dev15
。0.1.0-dev15 版本包含以下修訂項目。
如要使用 0.1.0-dev15
版的 Compose,您需要完成以下動作:
依附元件更新
- 如要使用
0.1.0-dev15
版的 Compose,您必須依據上方「宣告依附元件」一節所示的新程式碼片段更新依附元件。
API 變更
- 類似於 ScrollableColumn/ScrollableRow 中的新參數,LazyColumnItems/LazyRowItem 現在也有 contentPadding 參數,能在裁剪內容後在後方增添邊框間距,這是光憑輔助鍵參數所無法做到。此外,還能僅在第一個項目之前/最後一個項目之後增添一個間距 (Ibc24e)
- 已將文字欄位中的 onFocusChange 回呼重新命名為 onFocusChanged (Ida4a1)
- VerticalScroller 和 HoriziontalScroller 現已淘汰,使用 ScrollableColumn 和 ScrollableRow,透過資料欄/資料列行為和參數或使用內建功能,或是對元素使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。同樣地,ScrollerPosition 也已淘汰,並改用 ScrollState (I400ce、b/157225838、b/149460415、b/154105299)
- 已將 Modifier.draggable 和 Modifier.scrollable API 重新作業。因為 DragDirection 被移除以有利於 Orientation。可捲動狀態已被簡化。ScrollableState 已重新命名為 ScrollableController (Iab63c、b/149460415)
- 單一值的語意屬性現在起採用呼叫樣式。舉例來說,「semantics { hidden = true }」現在會寫為:
semantics { hidden() }
(Ic1afd、b/145951226、b/145955412)。 - RoundedCornerShape 和 CutCornerShape 所用的 Corner 大小現在起可以大於 50% (Id2340、b/160400213)
- 已將 Image 可組合項的預設 ContentScale 參數從 Inside 改為 Fit。之所以這麼做,是考量如果版面配置的尺寸大於繪圖工具內建函式的尺寸,同時又要維持顯示比例時,即需要具備將基礎 Painter 放大的行為模式。當內建函式的尺寸只會用在運算可組合項的尺寸時,此種行為模式更符合需為 Image 提供固定尺寸、同時不影響預設行為的預期。(I40ae3、b/159838006)
- 在頂層 API 中使用 AnimationSpec (而非 AnimationBuilder) 來釐清靜態動畫規格的概念 - 透過在建立如 tween、spring 等 AnimationSpec 時,不再需要使用 lambda 的做法來改善 DSL 的轉換。而是直接採用建構函式參數。- 改善使用 AnimationSpec 開啟建構函式 (而非仰賴建構工具) 的整體操作簡易性 - 將 KeyFrame 和 Tween 的時間與延遲時間變更為 Int。這可免除不必要的類型層級轉換和方法超載 (支援 Long 和 Int)。(Ica0b4)
- 已移除 Clickable。請使用 Modifier.clickable (I84bdf)
- 新增了 LazyRowItem - 類比於 LazyColumnItem 的水平捲動 (Ibbcf7)
- 引入低階無狀態動畫 API。這些 API (I63bf7)
- 淘汰 androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue。使用該類型的 TextField、FilledTextField 和 CoreTextField 可組合項也已淘汰。請改用 androidx.ui.input.TextFieldValue (I4066d,b/155211005)
- 已將所使用的 IntPx 取代為 Int。已將 IntPxPosition 改用 IntOffset 取代。將 IntPxSize 替換成 IntSize。(Ib7b44)
- androidx.ui.foundation.shape.RectangleShape 已移除;請用 androidx.ui.graphics.RectangleShape (I94939、b/154507984)
- 為了將呈現大小調整資訊所用的類別數量合併,應將 Size 類別的用法標準化,勿使用 PxSize。這樣就能使用內嵌類別,利用一個長整數封裝 2 個浮點值,呈現以浮點表示的寬度和高度 (Ic0191)
- 為了整合用於呈現地點資訊的資訊類別數量,請將偏移量類別 (而非 PxPosition) 的用量標準化。這樣就能使用內嵌類別,利用一個經度封裝 2 個浮點型數值,呈現以浮點數表示的 x 和 y 偏移量。(I3ad98)
- 已針對雙指撥動縮放的功能新增 Modifier.zoomable (Id5d63)
- 已淘汰 Toggleable 元件。請改用 Modifier.toggleable (I35220、b/157642842)
- 已淘汰 MutuallyExclusiveSetItem。請改用 Modifier.selectable。(I02b47、b/157642842)
- TestTag 現已淘汰,請改用 Modifier.testTag。(If5110、b/157173105)
- 在 Text 中新增之前漏掉的 fontWeight 參數 (I56937)
- 我們進行了大規模的重構工作,包括將各種撰寫類別中所使用的 Px 類別改為只使用 Dp 和基本類型來處理像素參數 (I19d02)
- VerticalScroller 提供立即可用的欄。HorizontalScroller 現在提供立即可用的列。(Ieca5d、b/157020670)
- 我們進行了大規模重構工作,包括將各種撰寫類別中所使用的 Px 類別改為只使用 Dp 和基本類型來處理像素參數 (Iede0b)
- 已將 Modifier.indication 新增至 Foundation 套件。能用來在自訂可互動元素上顯示按下/拖曳/其他指標 (I8425f、b/155287131)
- 現已支援反向捲動的 VerticalScroller 和 HorizontalScroller 是 isReversed,在 ScrollerPosition 上設定 (I953bd)
- 支援在文字版面配置中加入可組合項 (I1373c)
- 已將 CanvasScope 實作項目整合,現在只有 DrawScope 和 ContentDrawScope。已將 CanvasScope 重新命名為 DrawScope。已更新 DrawScope 來實作 Density 介面,並提供 LayoutDirection。刪除 ContentDrawScope 中的 DrawScope 子類別。Painter 和 PainterModifier 已更新為不再自行維護 RTL 屬性,因為 DrawScope 已有此功能,不必手動設定 (I1798e)
- 已移除淘汰的 DrawBackground API,改用 Modifier 上的 drawBackground 擴充 API。重構色彩、筆刷與繪製 drawBackground 的實作,減少程式碼路徑,並移除建立 Modifier 做為部分組成元件的要求。(I0343a)
- 已更新較高層級的 Composer API,將原有顯示 Canvas 改為顯示 CanvasScope。如此一來,取用者就不必維護自己的 Paint 物件。如果取用者仍要求 Canvas 存取權,則可以使用 drawCanvas 擴充功能方法,這種方法可提供回呼,透過基礎 Canvas 發出繪圖指令 (I80afd)。
- HorizontalScroller 和 VerticalScroller 現在可用既存執行個體狀態還原捲動位置 (Ia0fae、b/155075048)
- 移除了 FocusManagerAmbient。使用 FocusModifier.requestFocus 取得專注力。(Ic4826)
- 表格版面配置已暫時移除,至我們以重新整理的 API 提供使用為止。(Id88a7)
已建立 CanvasScope API,可納入 Canvas 物件以顯示無狀態的宣告式繪圖 API 途徑。變形作業侷限在其本身的接收器範圍內,大小調整資訊的範圍也對應插邊的邊界。不需要讓取用端保有自己的 Paint 狀態物件來設定繪圖作業。
新增 CanvasScopeSample 並更新試用版應用程式,加入宣告式圖形示範 (Ifd86d)
已移除 ColoredRect。請改用含有 drawBackground 輔助鍵的 Box (I983c7、b/152753731)
在 TextField 中新增游標色彩自訂 (I6e33f)
現在可以使用 onTextInputStarted 回呼提供的 SoftwareKeyboardController 來隱藏/顯示螢幕鍵盤 (I8dc44、b/151860051)
現在以類似以下的方式將 TextFieldValue 與 TextField 搭配使用,能在活動重建之後繼續存在:
var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
(I5c3ce、b/155075724)將常用的參數加至 Text()。如果您目前是建立本機的文字樣式來傳遞這些少數的參數 (例如
Text(style = TextStyle(textAlign = TextAlign.Center))
),現在可直接提供參數:Text(textAlign = TextAlign.Center)
(I82768)已將 CoreTextField/TextField focusIdentifier 參數改為 FocusNode,以便與聚焦子系統整合 (I7ea48)
TextField 更新 - 在水平維度上,會占滿允許的所有空間 (Ib08df、b/154638552)
新增了 InteractionState 和 Interaction,使得更便於建構能夠回應 UI 狀態改變 (例如按下和拖曳) 的元件 (Icfe25、b/152525426)
已將 RectangleShape 從 androidx.ui.foundation.shape.* 移至 androidx.ui.graphics* (Ia74d5、b/154507984)
將 API 中所有使用到且可為空的 Color 改為不可為空值,並改為使用 Color.Unset (Iabaa7)
TextField API 更新 - 已將 onFocus 和 onBlur 回呼合併至帶有參數的單一 onFocusChange(Boolean) 回呼 (I66cd3)
已將 ScaleFit 重新命名為 ContentScale。已將 ContentScale 從 ui-graphics 移至 ui-core 模組,以與 Alignment API 位於同一模組。將 FillMaxDimension 重新命名為 Crop。將 FillMinDimension 重新命名為 Fit。將 Fit 重新命名為 Inside,使其更加符合 ImageView.ScaleType 的同等項目。新增說明文件,說明 Crop 與 Alignment.Center 的組合所達到的結果與 ImageView.ScaleType.CENTER_CROP 相同,與 Alignment.Center 搭配使用的 Fit 所達到的結果與 ImageView.ScaleType.FIT_CENTER 相同。搭配 Alignment.Center 使用的Inside 所達到的結果與 ImageView.ScaleType.CENTER_INSIDE 相同 (I45f09、b/152842521)
移除 ProvideContentColor,請改為直接搭配
Providers
使用 ContentColorAmbient (Iee942)新增色彩參數至文字,以便無需手動與主題中所提供的樣式合併,即可覆寫文字樣式的色彩。(I41a66)
改善 DrawModifier API:
- 已設定 Draw() ContentDrawScope 的接收器範圍
- 移除了 Draw() 的所有參數
- DrawScope 的介面與之前的 CanvasScope 介面相同
- ContentDrawScope 含有 DrawContent() 方法 (Ibaced、b/152919067)
ColoredRect 已淘汰,請改用
Box(Modifier.preferredSize(width, height).drawBackground(color))
。(I499fa、b/152753731)形狀主題系統的安裝會根據 Material 設計規格進行更新。您現在可以提供大多數元件所使用的小型、中型和大型形狀 (Ifb4d1)
已將 Modifier 加號運算子取代為 Factory 擴充功能函式 (I225e4)
Draggable 已移為修飾符 (Id9b16、b/151959544)
已將 androidx.ui.core 中的
Text
移至 androidx.ui.foundation 套件 (I87ce5)將
enabled
參數加到 Checkbox、Switch 和 Toggleable (I41c16)Ripple 現已改名為 Modifier。Clickable 尚未轉換期間,其建議用法是
Clickable(onClick = { ... }, modifier = ripple())
(Ie5200、b/151331852、b/150060763)新增了 VectorPainter API 以替向量圖形取代現有的子撰寫 API。子組合的結果是 VectorPainter 物件,而非 DrawModifier。已淘汰先前的 DrawVector 元件,改用 VectorPainter。
將
Image(Painter)
API 重新命名為PaintBox(Painter)
建立 Vector 可組合項,其行為類似 Image 可組合項,除了其含有 VectorAsset 而非 ImageAsset (I9af9a、b/149030271)已建立 Image 可組合項,不但可在畫面上繪製指定的 ImageAsset,也能處理大小調整/版面配置。這個可組合項也支援繪製任何任意的 Painter 執行個體,可依照內建函式的尺寸,也支援指定的固定尺寸或最小尺寸 (Ibcc8f)
Button、FloatingActionButton 和 Clickable 現在有獨立的
enabled
參數。Button 上的部分參數已重新命名或重新排序 (I54b5a)已將 Image 重新命名為 ImageAsset 以使參與內容的版面配置與繪製所用的 Image 資料與即將產生的 Image 可組合項之間的差異更容易區分。
在 android.graphics.Bitmap 上建立擴充方法
Bitmap.asImageAsset()
以建立 ImageAsset 執行個體,適合用來將傳統的 Android 應用程式開發與撰寫架構相結合。(Id5bbd)移除 DrawImage 可組合項。使用 ImagePainter 在現有版面配置上繪製圖像,或用 SimpleImage 引入產生的 Image (I595e1、b/149827027)
Stack 元件可支援由右往左的方向性 (Ic9e00)
已新增 Icon、IconButton 和 IconToggleButton,並移除 AppBarIcon。您現在可以用 IconButton 直接取代 AppBarIcon 的現有使用情況,而且現在應具有正確的觸控目標。請參閱相關使用資訊的範例,並查看能直接搭配這些元件使用的 Material 圖示。(I96849)
移除 DrawShape 可組合項。請改用 DrawBackground 修飾符 (I7ceb2)
新增了 AdapterList 這個捲動清單元件,僅撰寫及佈置顯示的項目。目前已知的問題包括,這個元件僅限直向,且無法完全處理子項的所有變更。(Ib351b)
已新增 Scrollable 元件,可用以建立自訂的 Scroller/List (I5fd37)
已將 background 重新命名為 DrawBackground,並成為預設加以記憶 (Ia0bd3)
為 Box 新增邊框間距、框線、形狀和背景參數 (I05027、b/148147281)
新增了 Canvas 元件。這個可組合項會占用某個大小 (由使用者所提供),可供使用 CanvasScope 進行繪圖 (I0d622)
將
Border
輔助鍵重新命名為DrawBorder
(I8ffcc)新增 Box 元件,可用於合併版面配置及繪製常用功能。(I6e2a7)
Scroller 現在會表現出 Android 原生的快速滑過動作行為。(I922af、b/147493715)
已取代 DrawBorder 並改用 Border 輔助鍵 (Id335a)
Modifier.tag 已重新命名為 Modifier.layoutId,以避免與 Modifier.testTag 混淆。(I995f0)
在建立 ConstraintLayout 準則時的 percent 參數已重新命名為 fraction。(Ida2db)
新增了支援 ConstraintLayout 阻隔線的外邊距。(I47ffe)
已修正對 ConstraintLayout 的 RTL 支援。新增了 RTL 無感知 API。(I3b1c7)
已為 ConstraintLayout 新增 DSL。詳情請參閱範例。(Icaa9a)
新增了 @ExperimentalLayout 註解。ConstraintLayout、FlowRow 和 FlowColumn 現已加入該標記,以標示其 API 即將改變 (I412a8)
已新增
Modifier.padding(InnerPadding)
(I94985、b/157133803)已移除 Row 和 Column 中淘汰的 RowAlign、ColumnAlign (If60d4、b/155858731)。
已移除淘汰的 LayoutTag(),請改用 Modifier.tag()移除了已淘汰的 Modifier.matchParent(),請改用 Modifier.matchParentSize()。(If8044)
新增了 offsetPx 版面配置輔助鍵,可用來定義 px 中的 (動態) offset。(I5af57)
AlignmentLineOffset 可組合項已淘汰,請改用 relativePaddingFrom() 輔助鍵。CenterAlignmentLine 可組合項也已移除 (I60107)
新增了 defaultMinSizeConstraint 版面配置輔助鍵,成為僅限收到的對應限制為未指定時,才對包裝的版面配置設定大小限制 (最小限制為 0,最大限制為無限)。(I311ea、b/150460257)。
已移除 Container。請改用 Box (Ibbc2b、b/151407926)
已移除淘汰的 LayoutWidth/Height/Size 輔助鍵。(Ib0bc1)
已為 offset 輔助鍵新增預設參數值。(I37f06)
新增對稱式邊框間距修飾符。(I39840)
移除淘汰的 LayoutAspectRatio 修飾符。(I65a74)
移除淘汰的 LayoutAlign 修飾符。(I10877)
修正寬度和高度修飾符的錯誤,以防納入的版面配置在沒有相反軸限制的情況下受到測量。(I210b8、b/154797971)。
已分別將 verticalGravity 和 horizontalGravity 參數新增至 Row 和 Column。(I7dc5a)
已更新 wrapContentWidth 和 wrapContentHeight 必須使用垂直或水平對齊,而非使用任何對齊。引力調整器已更新為接受垂直或水平對齊。更新 Row、Column 和 Stack,藉此支援自訂的持續對齊方式 (Ib0728)
已將 Alignment 設為能以任意值加以實例化。新增了 1D Alignment。(Ia0c05)。
已將 EdgeInset 重新命名為 InnerPadding。而將 Material Buttons 的 innerPadding 參數重新命名為 paddding。(I66165)
alignToSibling 現在可使用 Measured 而非 Placeable。(I5788d)
新增用於調整內建函式測量資料大小的修飾符,並淘汰相同用途的元件。(I8295d)
支援自訂 ConstraintLayout 子項的尺寸 (Idb1a5)
移除了淘汰的 Wrap 和 Center 可組合項。(I29e23)
新增一個可定義版面配置修飾符的新 API LayoutModifier2;淘汰 LayoutModifier (If32ac)
RowScope 和 ColumnScope 構件現在已可從 Row 和 Column 之外存取。(I3a641)
已淘汰 Container。請改用 Box。(I675ce、b/151407926)。
新增 LayoutOffset 修飾符,可移動版面配置的位置 (I0b8a3)
初步提供對 Compose 版面配置中 Rtl 的支援 (Ia5519)
更新 LayoutAlign,使其不再填滿可用空間 (I2b14f)
移除 AspectRatio 可組合項,改用修飾符。刪除過時的 FlexColumn、FlexRow 可組合項和 Spacing 修飾符 (Iec8a7)
移除 Row 和 Column 的 LayoutInflexible 修飾符 (I0d820)
實作拖曳選取控點,以變更 TextField 的選取項目。(I27032)
針對 TextField 選取實作 LongPressAndDrag。(I17919)
修正錯誤
- 淘汰了 FocusModifier,改用 Modifier.focus、Modifier.focusRequester、Modifier.focusObserver。淘汰 FocusState 和 FocusDetailedState,改用 FocusState2 (I46919、b/160822875、b/160922136)
runOnIdleCompose
已重新命名為runOnIdle
(I83607)- 將多個測試 API 重新命名,提供更直覺化的使用體驗。將所有 FindXYZ API 都重新命名為 onNodeXYZ。將所有 doXYZ API 都重新命名為 performanceXYZ。(I7f164)
- 移除先前淘汰的 Modifier.ripple。Clickable 現在使用波紋做為預設指標 (如果您在應用程式中設定了 MaterialTheme {}),因此在大多數情況下,您只需使用 Clickable,即可免費取得分享指示。如要自訂漣漪效果的顏色/大小/邊界參數,可以手動建立 RippleIndication,並將其做為指示參數傳遞給 Clickable (I663b2、b/155375067)。
- 已移除過時的尺寸測試 API。(Iba0a0)
- 已將 LayoutNode 設為實驗性 API (I4f2e9)
- 於全 Compose 實作第 1 版捲動方向的鎖定。(I1ce7a、b/150289741)。
- Popup、Dialog 和 Menu 現在起承襲結構定義的 MaterialTheme (Ia3665、b/156527485)
- 從 Layout() 函式的測量區塊移除版面配置方向參數。不過,可透過測量範圍物件,在回呼中使用版面配置的方向 (Ic7d9d)
- 新增 StaticArrangement - 允許在 Row 中排列子項,而不使用 RTL 中的自動鏡射 (I3a1df)
- 已淘汰 @Untracked 註解。請改用 @ComposableContract(tracked=false) (Id211e)
- 在這項異動之前,Compose 編譯器外掛程式會顯著攔截對 @Composable 函式內建構函式的呼叫 (如果有) (I5205a、b/158123804)
- 新增
viewModel()
元件,以便建立或建立 View Model 的方式與類似「活動」或「片段」工具 (I5fdd1) 的運作方式相似。 已將 Radius 類別重構為內嵌類別。移除具有預設參數的函式建立方法,並使用預設參數讓半徑 Y 軸與必要 X 軸半徑參數的 y 軸相符。
將 DrawScope.drawRoundRect 更新為使用單一 Radius 參數,而非取用沿著 x 和 y 軸的半徑的 2 個獨立浮點值 (I46d1b)
我們進行了大規模重構工作,包括將各種撰寫類別中所使用的 Px 類別改為只使用 Dp 和基本類型來處理像素參數。Px 類別也已完整刪除 (I3ff33)
我們進行了大規模重構作業,包括將各種 compose 類別中使用的 Px 類別改為只使用 Dp 和原始類型來處理像素參數 (I086f4)
我們進行了大規模重構工作,其中一部分是將在各種組合中使用 Px 類別來處理像素參數,更換成只使用 Dp 和基本類型 (Id3434)
我們進行了大規模重構工作,包括將各種撰寫類別中所使用的 Px 類別改為只使用 Dp 和基本類型來處理像素參數 (I97a5a)
TextField 的游標有閃爍的動畫 (Id10a7)
部分手勢不再需要傳遞 GestureToken (Id7ae5)
我們進行了大規模重構工作,包括將各種撰寫類別中所使用的 Px 類別改為只使用 Dp 和基本類型來處理像素參數 (I57bff)
我們已取消淘汰 Modifier.semantics,並允許使用高階元件 (I4cfdc)
AnnotatedString.Builder.addAnnotationString 重新命名為 addStringAnnotation。(I5059e)
更新了 Alignment API 並新增了絕對對齊支援 (在 Rtl 環境中不會自動提供鏡像) (I38cd3)
Layout 和 LayoutModifier 子項可用不同的版面配置方向加以測量。(Ibd731)
為 ImagePainter 新增其他可用的 rect 參數,以支援繪製一個底下 ImageAsset 的子區 (I0ea9e)
修正移除項目時在 AOSPList 中的異常終止問題 (Ic64b0、b/153195921)
對於您置入 activity.setContent { } 區塊內的第一個版面配置,我們改變了測量方式。先前是強制填滿整個活動畫面,現在的行為模式有如您將版面配置放進 Stack 內:可以比畫面小,這時會放置在左上角。如果想保留原本的行為模式,可以對版面配置套用 Modifier.fillMaxSize() (Ie88a7、b/153453714)
ui-text-compose 模組重新命名為 ui-text。ui-text 現在包含 CoreText 和 CoreTextField 元件 (Ib7d47)
ui-text 模組已重新命名為 ui-text-core (I57dec)
將 ui-framework/CoreText、CoreTextField 可組合項移至 ui-text-pose 下。建議您在專案中納入 ui-text-compose (I32042)。
runOnIdleCompose
和runOnUiThread
現在是全域函式,不是 ComposeTestRule 上的方法 (Icbe8f)。[Mutable]State 屬性委派運算子已移至擴充功能,以支援 Kotlin 1.4 屬性委派最佳化。呼叫端必須新增匯入作業才能繼續使用
by state { ... }
或by mutableStateOf(...)
(I5312c)DrawLayerModifier 和 drawLayer() 現在會將 clipToBounds 和 clipToOutline 預設為 false (I0eb8b、b/152810850)
已將 LayoutResult 重新命名為 MeasureResult。(Id8c68)
淘汰了 Center 可組合項。應改用 LayoutSize.Fill + LayoutAnchor.Center 修飾符,或將其替換為已套用適當修飾符的 Box 或 Stack 可組合項 (Idf5e0)
已將 LayoutFlex 重新命名為 LayoutWeight。將 tight 參數重新命名為 fill。(If4738)
DrawVector 已從一般的可組合函式改為會傳回 Modifier drawVector(),將向量繪製成版面配置的背景。(I7b8e0)
將可組合函式 Clip 替換為修飾符 drawClip()。當只需要將圖層邊界裁剪為矩形時,DrawdClupToBounds 是相當實用的修飾符。(If28eb)
DrawShadow 可組合函式已更換為 DrawShadow() 修飾符。陰影現已繪製成 LayerModifier 的一部分。(I0317a)
androidx.compose.ViewComposer 已移至 androidx.ui.node.UiComposer。此外,我們移除了 androidx.compose.Emittable,它對 ComponentNode 來說是多餘的。androidx.compose.ViewAdapters 已移除。系統已不再支援這些項目。Compose.composeInto 已淘汰,請改用
setContent
或setViewContent
。Compose.disposeComposition 已淘汰,改用setContent
傳回的Composition
上的dispose
方法。 androidx.compose.Compose.subcomposeInto 已移至 androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt 已重新命名為 ComponentNode#insertAt ComponentNode#emitRemoveAt 已重新命名為 ComponentNode#removeAt ComponentNode#emitMode 已重新命名為 ComponentNode#move (Idef00)淘汰了 Wrap 可組合項。這可以替換成 LayoutAnchor 修飾符或 Stack 可組合項 (Ib237f)
使版面配置方向可以從上層布局節點套用到子項。新增了版面配置方向修飾符 (I3d955)
Painter.toModifier 重新命名為 Painter.asModifier,因為新建立的 Modifier 所參照的原始 Painter 能在多個 Modifier 執行個體之間共用 (I7195b)
支援 LayoutPadding 輔助鍵中由右到左的方向 (I9e8da)
Density 和 DensityScope 已合併至單一介面。現在可以使用 DensityAmbient.current 取代 ambientDensity()。勿用 withDensity(density),請用 with(density) (I11cb1)
移除 ValueHolder 類別。已重新建構 AnimatedValue 和 AnimatedFloat 類別,使動畫值欄位變得抽象,讓子類別可以監看數值更新。
- 為 AnimatedValue、AnimatedFloat 等新增了模型類別。
- 新增了一組輕量的 @Composable API,用來在不同的值之間進行動畫。
- (I79530)
對環境 API 做出破壞性變更。詳情請參閱記錄檔和
Ambient<T>
說明文件 (I4c7ee、b/143769776)從 Placeable#get(AlignmentLine) 傳回的 Alignment 行 Int 位置現在起不可為空值。如果缺少查詢的對齊線,就會傳回 AlignmentLine.Unspecified (I896c5、b/158134875)。
修正重組時造成異常終止的 ConstraintLayout 錯誤 (Ibee5a、b/158164341)。
變更 WithConstraints 結尾的 lambda API。我們現在以接收器範圍取代原本的兩個參數,除了 constraints 與 layoutDirection 之外,還提供 Dp 中的 minWidth、maxWidth、minHeight 和 maxHeight 屬性 (I91b9a、b/149979702)
已將 LayoutModifier2 重新命名為 LayoutModifier。(Id29f3)
Layout 和 LayoutModifier2 中的內建測量函式現在設有 IntrinsicMeasureScope 接收器,可提供附有隱性傳播版面配置方向的內建函式查詢 API (Id9945)
淘汰 LayoutDirectionAmbient。如要讀取依照語言代碼所定義的版面配置方向,請使用 ConfigurationAmbient 上的 localeLayoutDirection (I851b1)
已為 LayoutCoordinates 新增 positionInParent 和 boundsInParent。(Icacdd、b/152735784)
淘汰 ParentData 可組合項。您應建立可實作 ParentDataModifier 介面的修飾符;如果只想為版面配置子項加上標記,方便在測量區塊中加以識別,則請使用 LayoutTag 修飾符 (I51368、b/150953183)
新增 OnPositionedModifier 和 OnChildPositionedModifier 以取代 OnPositioned 和 OnChildPositioned 可組合函式 (I2ec8f)
不允許 LayoutPadding 有負值的邊框間距。勿用負值位置偏移,請改用 LayoutOffset (Ifb5b1)
WithConstraint 具有 LayoutDirection 參數 (I6d6f7)
已將
ComposeFlags.COMPOSER_PARAM
旗標更新為true
,這會變更 Compose 外掛程式的程式碼產生策略。大致上來說,這會導致系統產生附加合成參數的 @Composable 函式,這個參數會傳遞至後續的 @Composable 呼叫中,藉此讓執行階段妥善管理執行作業。這是二進位檔的重大破壞性變更,但應在所有 Compose 的合法使用情況中,保留來源層級的相容性。(I7971c)已變更 LayoutCoordinates,將 providedAlignmentLines 成為 Set (而非 Map),同時讓 LayoutCoordinates 實作 get() 運算子,而不是擷取一個值。這樣一來,修飾符就能輕鬆修改組合的一或多個值,而不必為每個修飾符建立新的集合 (I0245a)
LayoutCoordinates 已不再具備位置屬性。考慮使用 LayoutModifiers、旋轉或資源調度時,排名屬性並不合理。開發人員應改用 parentCoordinates 和 childToLocal() 計算 oneLayoutCoordinate 之間的轉換。
LayoutCoordinates 使用 IntPxSize 做為大小屬性,而非 PxSize。Layout 會使用整數像素大小設定版面配置,因此所有版面配置大小都應使用整數,而不是浮點值 (I9367b)。
改善限制的 API 介面 (I0fd15)
新增了 TextDirection.Content (I48f36)
調整工具列選單,使其正確顯示複製、剪下和貼上選項。(Id3955)
為 TextField 的選取新增 FloatingToolbar (Ie8b07)
已將 TextDirectionAlgorithm 重新命名為 TextDirection (I75ce8)
已將 TextDirection 重新命名為 ResolvedTextDirection (I3ff38)
已為 TextField 選取新增 HapticFeedback。(I58050)
已為 TextField 選取新增 Copy、Cut 和 Paste 方法 (Idb70b)
已刪除 TestTag 和 Semantics。請改用 Modifier.testTag 和 Modifier.semantics (I15ff0、b/158841414)
已將 Locale 和 LocaleList 的套件名稱從 androidx.ui.text 變更為 androidx.ui.intl (I8132c)
API 變更:已將
AnnotatedString(builder: Builder)
重新命名為annotatedString(builder: Builder)
(Ia6377)。API 變更:已將
AnnotatedString.Item
重新命名為AnnotatedString.Range
(I2d44d)。為文字相關作業新增工具列。(I49d53)
現已提供新的 LifecycleOwnerAmbient。現在,您以 Compose UI 使用的 Activity 應能擴充 androidx.activity.ComponentActivity (or AppCompatActivity)android.app.Activity 上的 setContent 現已淘汰 (Idb25a、b/153141084)
為配合 androidx 原則,ui-android-text 套件名稱 (androidx.text) 改為 androidx.ui.text.platform。(I42711)