Wear Compose:围绕可滚动屏幕组织 UI · AndroidX 源码指南
AAndroidX 源码指南
多形态设备
多形态设备 · androidx.wear.compose

Wear Compose:围绕可滚动屏幕组织 UIWear 1.7.0-alpha07

用 AppScaffold、ScreenScaffold 和 TransformingLazyColumn 组成 Wear Material 3 页面。

最后更新 2026-08-01

复制即用

@Composable
fun WearList(items: List<String>) {
    val state = rememberTransformingLazyColumnState()
    val transformation = rememberTransformationSpec()

    AppScaffold {
        ScreenScaffold(state) { contentPadding ->
            TransformingLazyColumn(
                state = state,
                contentPadding = contentPadding,
            ) {
                items(items) { label ->
                    Button(
                        onClick = {},
                        modifier = Modifier
                            .fillMaxWidth()
                            .transformedHeight(this, transformation),
                        transformation = SurfaceTransformation(transformation),
                    ) { Text(label) }
                }
            }
        }
    }
}

三个 Scaffold 的职责

组件职责
AppScaffold应用级覆盖层(顶层导航、时间显示位置)
ScreenScaffold单屏滚动状态、时间文字、位置指示器
TransformingLazyColumn列表项按弧形视口位置变换(缩放/淡出)

不要只换一个 Wear Button 就认为页面已经适配圆屏——三层结构缺一不可。

屏幕外沿安全区

ScreenScaffold(
    state = state,
    timeText = { TimeText() },
    positionIndicator = { PositionIndicator(state) },
) { contentPadding ->
    // contentPadding 已经考虑圆屏边缘
}

contentPadding 自动包含屏幕边缘安全区,列表内容不能画到圆弧外。

手势与导航

  • 返回手势:SwipeDismissableNavHost(Wear Compose Navigation)或 Navigation 3 集成。
  • 滚动手势:TransformingLazyColumn 自带旋转表冠支持。
  • 真机/模拟器验证:返回手势与表冠滚动在手机 Preview 无法验证。

常见陷阱

  • 预览不代表真机:圆屏裁剪、表冠手势只能真机验证。
  • 内容画到边缘外:不用 ScreenScaffold 的 contentPadding。
  • 复用手机 Composable:手机页面里 LazyColumn 等不感知弧形视口。

要点

  • 三层职责:AppScaffold(应用级)/ ScreenScaffold(单屏)/ TransformingLazyColumn(弧形变换)。
  • contentPadding 处理圆屏安全区;位置指示器用 PositionIndicator。
  • 返回与滚动必须真机/模拟器验证。

相关页面