Compose for Wear OS 的列表功能


在 Wear OS 设备上,用户可通过列表从一组选项中选择一个项目。

许多 Wear OS 设备都使用圆形屏幕,不方便用户查看靠近屏幕顶部和底部的列表项。因此,Compose for Wear OS 包含一个名为 TransformingLazyColumnLazyColumn 类版本,该版本支持缩放和变形动画。当内容移动到边缘时,它们会变小并淡出。

如需添加缩放和滚动效果,请使用 Modifier.transformedHeight 允许 Compose 在项滚动浏览屏幕时计算高度变化,并使用 transformation = SurfaceTransformation(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
    ) {
        // ...
        // ...
    }
}