使用 Compose 为 Wear OS 创建列表

列表允许用户在 Wear OS 设备上从一组选项中选择一项。

许多 Wear OS 设备使用圆形屏幕,这使得难以查看出现在屏幕顶部和底部的列表项。因此,Compose for Wear OS 包含 LazyColumn 类的一个版本,称为 ScalingLazyColumn,它支持缩放和淡出效果。当项目向屏幕中心移动时,它们会变得更大且更不透明。

以下动画显示了元素的大小和透明度在屏幕上移动时的变化方式

以下代码片段展示了如何使用 Horologist 版本的 ScalingLazyColumn 布局创建内容,使其 在各种 Wear OS 屏幕尺寸上看起来都很棒,例如在下面的示例中,它将向列表中第一个和最后一个元素添加必要的填充,这些元素设置在 ScalingLazyColumnscrollState 中。

val columnState = rememberResponsiveColumnState(
    contentPadding = ScalingLazyColumnDefaults.padding(
        first = ScalingLazyColumnDefaults.ItemType.Text,
        last = ScalingLazyColumnDefaults.ItemType.SingleButton
    )
)
ScreenScaffold(scrollState = columnState) {
    ScalingLazyColumn(
        columnState = columnState
    ) {
        item {
            ResponsiveListHeader(contentPadding = firstItemPadding()) {
                Text(text = "Header")
            }
        }
        // ... other items
        item {
            Button(
                imageVector = Icons.Default.Build,
                contentDescription = "Example Button",
                onClick = { }
            )
        }
    }
}

添加吸附和甩动效果

您可以为用户应用于 ScalingLazyColumn 对象的手指手势添加吸附和甩动行为。此效果可帮助用户更精确地浏览列表中的项目,同时也有助于他们更快地浏览长列表。

要将此效果添加到 Horologist 版本的 ScalingLazyColumn 中,请将 columnStaterotaryMode 参数设置为 RotaryWithSnap,如以下代码片段所示

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