Loading...
Loading...
Expert guidance for working with Wear OS Compose Material3. Use this skill when creating, updating, or migrating Wear OS projects. This includes the androidx.wear.compose.material3, androidx.wear.compose.foundation, and androidx.wear.compose.navigation3 libraries. Also working with core components such as AppScaffold, ScreenScaffold, and TransformingLazyColumn, and core Wear OS concepts such as ambient mode. Migration from lower versions such as Material 2.5 and Horologist.
npx skill4agent add android/skills wear-compose-m3gradle/libs.versions.tomlbuild.gradle.kts./gradlew dependencies{VERSION}androidx.wear.compose:compose-material3{VERSION}-alpha-beta-rcorg.jetbrains.kotlin.plugin.composekotlinCompilerExtensionVersioncomposeOptionsminSdklibs.versions.tomlbuild.gradle.kts{VERSION}ChipButton{VERSION}androidx.wear.compose.material3.*| Component / Symbol | Reference Samples |
|---|---|
| AlertDialogSample |
| OneHandedGestureSamples, PageIndicatorSample, PagerScaffoldSample |
| AnimatedTextSample |
| CardSample |
| ListHeaderSample, PagerScaffoldSample, ScaffoldSample, SurfaceTransformationSample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample |
| ProgressIndicatorSample |
| AlertDialogSample, AnimatedTextSample, ButtonGroupSample, ButtonSample, DatePickerSample, DynamicColorSchemeSample, FadingExpandingLabelSample, ListHeaderSample, OneHandedGestureSamples, PageIndicatorSample, PagerScaffoldSample, PickerSample, ScaffoldSample, ScrollIndicatorSample, StepperSample, SurfaceTransformationSample, SwipeToRevealSample, TimePickerSample, TransformationSpecSample, TransformingLazyColumnSample, TransformingLazyColumnSample |
| ButtonSample, CurvedTextSamples, DynamicColorSchemeSample, EdgeButtonSample, ListHeaderSample, PlaceholderSample, ScaffoldSample, ScrollAwaySample, ScrollIndicatorSample, SurfaceTransformationSample, TextButtonSample, TransformationSpecSample, TransformingLazyColumnSample, TransformingLazyColumnSample |
| ButtonGroupSample, TransformationSpecSample |
| CardSample, SwipeToRevealSample, TransformingLazyColumnSample |
| CardSample, SurfaceTransformationSample, SwipeToRevealSample, TransformingLazyColumnSample, TransformingLazyColumnSample |
| CheckboxButtonSample, SwipeToDismissBoxSample |
| ButtonSample |
| DynamicColorSchemeSample |
| ButtonSample, TransformingLazyColumnSample |
| ConfirmationDialogSample |
| CurvedTextSamples |
| DatePickerSample |
| EdgeButtonSample, OneHandedGestureSamples, ScaffoldSample, TransformingLazyColumnSample |
| EdgeButtonSample |
| FadingExpandingLabelSample |
| IconButtonSample |
| AlertDialogSample, ButtonSample, ConfirmationDialogSample, OpenOnPhoneDialogSample, PlaceholderSample, ScrollAwaySample, SwipeToDismissBoxSample |
| ButtonSample, CardSample, OneHandedGestureSamples |
| OneHandedGestureSamples |
| StepperSample |
| PageIndicatorSample |
| AlertDialogSample, ButtonSample, CardSample, CheckboxButtonSample, ConfirmationDialogSample, CurvedTextSamples, DatePickerSample, EdgeButtonSample, IconButtonSample, ListHeaderSample, PlaceholderSample, ProgressIndicatorSample, RadioButtonSample, SwipeToRevealSample, SwitchButtonSample, TimePickerSample |
| IconButtonSample, LevelIndicatorSample, ProgressIndicatorSample |
| IconButtonSample, ProgressIndicatorSample |
| IconToggleButtonSample |
| LevelIndicatorSample |
| LinearProgressIndicatorSample |
| ListHeaderSample, ScrollAwaySample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample |
| ListHeaderSample, ScrollAwaySample, TransformingLazyColumnSample |
| ListHeaderSample |
| AlertDialogSample, ButtonSample, CardSample, CurvedTextSamples, DynamicColorSchemeSample, LinearProgressIndicatorSample, PagerScaffoldSample, ProgressIndicatorSample, SwipeToDismissBoxSample, TimeTextSample, TransformingLazyColumnNotificationsSample |
| OpenOnPhoneDialogSample |
| CardSample, TransformingLazyColumnSample |
| PageIndicatorSample, PagerScaffoldSample |
| PickerSample |
| PickerGroupSample |
| RadioButtonSample |
| SurfaceTransformationSample, TransformationSpecSample |
| SwipeToRevealSample |
| ListHeaderSample, OneHandedGestureSamples, PagerScaffoldSample, ScaffoldSample, SurfaceTransformationSample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample |
| ScrollIndicatorSample |
| ScrollAwaySample |
| SliderSample |
| CheckboxButtonSample |
| SwitchButtonSample |
| LevelIndicatorSample, StepperSample |
| AlertDialogSample, DynamicColorSchemeSample, ListHeaderSample, ScaffoldSample, SurfaceTransformationSample, TransformationSpecSample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample, TransformingLazyColumnSample |
| SwipeToDismissBoxSample |
| AlertDialogSample, OneHandedGestureSamples, SwitchButtonSample |
| AlertDialogSample, AnimatedTextSample, ButtonGroupSample, ButtonSample, CardSample, CheckboxButtonSample, ConfirmationDialogSample, DatePickerSample, DynamicColorSchemeSample, EdgeButtonSample, ListHeaderSample, OneHandedGestureSamples, OpenOnPhoneDialogSample, PageIndicatorSample, PagerScaffoldSample, PickerGroupSample, PickerSample, PlaceholderSample, RadioButtonSample, ScaffoldSample, ScrollAwaySample, ScrollIndicatorSample, StepperSample, SurfaceTransformationSample, SwipeToDismissBoxSample, SwipeToRevealSample, SwitchButtonSample, TextButtonSample, TextToggleButtonSample, TimePickerSample, TransformationSpecSample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample |
| TextButtonSample |
| TextButtonSample, TextToggleButtonSample |
| TextToggleButtonSample |
| TimePickerSample |
| ScrollAwaySample, ScrollIndicatorSample, TimeTextSample |
| TimeTextSample |
| CardSample, SurfaceTransformationSample, SwipeToRevealSample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample |
| TransformationSpecSample |
| CurvedTextSamples, ScrollAwaySample, TimeTextSample |
| TransformingLazyColumnSample |
| PlaceholderSample |
| PickerGroupSample, PickerSample |
| AlertDialogSample, DynamicColorSchemeSample, ListHeaderSample, ScaffoldSample, SurfaceTransformationSample, SwipeToRevealSample, TransformationSpecSample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample, TransformingLazyColumnSample |
| ScrollAwaySample, TimeTextSample |
androidx.wear.compose.foundation.*| Component / Symbol | Reference Samples |
|---|---|
| AmbientModeSample |
| ScalingLazyColumnSample |
| SwipeToDismissBoxSample |
| CurvedWorldSample |
| CurvedTextSamples, CurvedWorldSample |
| CurvedTextSamples, CurvedWorldSample, TimeTextSample |
| SwipeToRevealSample |
| OneHandedGestureSamples, PageIndicatorSample, PagerSamples, PagerScaffoldSample |
| TransformingLazyColumnSample |
| PagerScaffoldSample |
| PagerScaffoldSample, RotarySamples, ScalingLazyColumnSample, TransformingLazyColumnSample |
| RotarySamples |
| ExpandableSample, HierarchicalFocusSample, OneHandedGestureSamples, ScalingLazyColumnSample, SwipeToRevealSample, SwipeToRevealSample |
| ScrollAwaySample |
| SwipeToDismissBoxSample, SwipeToDismissBoxSample |
| DynamicColorSchemeSample, ListHeaderSample, OneHandedGestureSamples, ScaffoldSample, ScrollAwaySample, ScrollIndicatorSample, SurfaceTransformationSample, SwipeToRevealSample, TransformationSpecSample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample, TransformingLazyColumnSample |
| TransformingLazyColumnSample, TransformingLazyColumnSample |
| TransformationSpecSample |
| ExpandableSample |
| ExpandableSample, SwipeToRevealSample |
| HierarchicalFocusSample |
| SwipeToRevealSample, TransformingLazyColumnNotificationsSample |
| TransformingLazyColumnSample |
| OneHandedGestureSamples, ScalingLazyColumnSample, SwipeToRevealSample |
| ListHeaderSample, OneHandedGestureSamples, ScaffoldSample, ScrollAwaySample, ScrollIndicatorSample, SurfaceTransformationSample, SwipeToRevealSample, TransformingLazyColumnNotificationsSample, TransformingLazyColumnSample, TransformingLazyColumnSample |
| HierarchicalFocusSample, RotarySamples |
| CurvedWorldSample, TimeTextSample |
AppScaffoldScreenScaffoldAppScaffoldScreenScaffoldAppScaffoldScreenScaffoldScalingLazyColumnTransformingLazyColumnTransformingLazyColumnimport androidx.wear.compose.foundation.lazy.TransformingLazyColumn
import androidx.wear.compose.foundation.lazy.TransformingLazyColumnDefaults
import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState
// ...
import androidx.wear.compose.material3.lazy.rememberTransformationSpec
import androidx.wear.compose.material3.lazy.transformedHeight
val columnState = rememberTransformingLazyColumnState()
val transformationSpec = rememberTransformationSpec()
ScreenScaffold(
scrollState = columnState
) { contentPadding ->
TransformingLazyColumn(
state = columnState,
contentPadding = contentPadding
) {
item {
ListHeader(
modifier = Modifier
.fillMaxWidth()
.transformedHeight(this, transformationSpec)
.minimumVerticalContentPadding(ListHeaderDefaults.minimumTopListContentPadding),
transformation = SurfaceTransformation(transformationSpec)
) {
Text(text = "Header")
}
}
// ... other items
item {
Button(
modifier = Modifier
.fillMaxWidth()
.transformedHeight(this, transformationSpec)
.minimumVerticalContentPadding(ButtonDefaults.minimumVerticalListContentPadding),
transformation = SurfaceTransformation(transformationSpec),
onClick = { /* ... */ },
icon = {
Icon(
imageVector = Icons.Default.Build,
contentDescription = "build",
)
},
) {
Text(
text = "Build",
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
}
}
}
TransformingLazyColumnScalingLazyColumncontentPaddingScreenScaffoldTransformingLazyColumnminimumVerticalContentPaddingButtonDefaultsCardDefaultsTransformingLazyColumnItemScopetransformedHeighttransform = SurfaceTransform(...)flingBehaviorrotaryScrollableBehaviorval columnState = rememberTransformingLazyColumnState()
ScreenScaffold(scrollState = columnState) { contentPadding ->
TransformingLazyColumn(
state = columnState,
flingBehavior = TransformingLazyColumnDefaults.snapFlingBehavior(columnState),
rotaryScrollableBehavior = RotaryScrollableDefaults.snapBehavior(columnState)
) {
// ...
// ...
}
}
ScreenScaffoldscrollIndicator!LocalScrollCaptureInProgress.currentEdgeButtonTransformingLazyColumnScreenScaffoldTransformingLazyColumnval columnState = rememberTransformingLazyColumnState()
ScreenScaffold(
scrollState = columnState,
edgeButton = {
EdgeButton(
onClick = { /* TODO */ },
modifier = Modifier.scrollable(
columnState,
orientation = Orientation.Vertical,
reverseDirection = true,
// Apply overscroll to the EdgeButton for proper scrolling behavior.
overscrollEffect = rememberOverscrollEffect(),
)
) {
Text("More")
}
}
) { contentPadding ->
TransformingLazyColumn(
contentPadding = contentPadding,
state = columnState,
) {
// ...
// ...
}
}
ColumnScreenScaffoldTransformingLazyColumntypographyMaterialThemecolorSchemeMaterialThemeButtonButtonDefaults*DefaultsWearPreviewDevicesWearPreviewFontScalesLocalAmbientModeManagerAmbientLifecycleObserverSwipeDismissableSceneStrategy()compose-navigation3HorizontalPagerVerticalPagerAppScaffoldHorizontalPagerScaffoldHorizontalPagerAnimatedPageScreenScaffoldVerticalPager