Compose for Wear OS 的清單功能


使用者可透過清單功能,從 Wear OS 裝置上的一組選項中選取所需項目。

由於許多 Wear OS 裝置都採用圓形螢幕,導致使用者難以查看螢幕頂端和底部附近的清單項目,因此,Compose for Wear OS 納入了名為 TransformingLazyColumnLazyColumn 類別版本,藉此支援縮放和變形動畫。項目移至邊緣時,會縮小並淡出。

如要新增縮放和捲動效果,請使用 Modifier.transformedHeight,讓 Compose 計算項目在畫面上捲動時的高度變化,並使用 transformation = SurfaceTransformation(transformationSpec) 套用視覺效果,包括將項目縮小至與先前大小相符。針對不以 transformation 做為參數的元件 (例如 Text),請使用自訂 TransformationSpec

以下動畫展示元素沿著螢幕移動時,大小和透明度會如何變化:

下列程式碼片段說明如何使用 TransformingLazyColumn 版面配置建立清單,以便建立在各種 Wear OS 螢幕尺寸上都能完美呈現的內容。舉例來說,在下列程式碼範例中,系統會為清單的第一個和最後一個元素新增必要的邊框間距,這些元素是在 TransformingLazyColumncontentPadding 中設定。如要顯示捲動指標,請在 ScreenScaffoldTransformingLazyColumn 之間共用 columnState

val columnState = rememberTransformingLazyColumnState()
val contentPadding = rememberResponsiveColumnPadding(
    first = ColumnItemType.ListHeader,
    last = ColumnItemType.Button,
)
val transformationSpec = rememberTransformationSpec()
ScreenScaffold(
    scrollState = columnState,
    contentPadding = contentPadding
) { contentPadding ->
    TransformingLazyColumn(
        state = columnState,
        contentPadding = contentPadding
    ) {
        item {
            ListHeader(
                modifier = Modifier.fillMaxWidth().transformedHeight(this, transformationSpec),
                transformation = SurfaceTransformation(transformationSpec)
            ) {
                Text(text = "Header")
            }
        }
        // ... other items
        item {
            Button(
                modifier = Modifier.fillMaxWidth().transformedHeight(this, transformationSpec),
                transformation = SurfaceTransformation(transformationSpec),
                onClick = { /* ... */ },
                icon = {
                    Icon(
                        imageVector = Icons.Default.Build,
                        contentDescription = "build",
                    )
                },
            ) {
                Text(
                    text = "Build",
                    maxLines = 1,
                    overflow = TextOverflow.Ellipsis,
                )
            }
        }
    }
}

新增貼齊與快速滑過效果

如要新增快速捲動行為,建議使用 ScalingLazyColumn。這種效果可讓使用者更精準地瀏覽清單項目,也可讓他們更快速地瀏覽較長清單。

如要將這個效果新增至 Horologist 版本的 ScalingLazyColumn,請將 columnStaterotaryMode 參數設為 RotaryWithSnap,如以下程式碼片段所示:

val columnState = rememberResponsiveColumnState(
    // ...
    // ...
    rotaryMode = ScalingLazyColumnState.RotaryMode.Snap
)
ScreenScaffold(scrollState = columnState) {
    ScalingLazyColumn(
        columnState = columnState
    ) {
        // ...
        // ...
    }
}