Mit Listen können Nutzer auf Wear OS-Geräten ein Element aus einer Reihe von Optionen auswählen.
Viele Wear OS-Geräte haben runde Displays. Das macht es schwieriger, Listenelemente zu sehen, die sich oben und unten auf dem Display befinden. Aus diesem Grund enthält Compose for Wear OS eine Version der Klasse LazyColumn
namens TransformingLazyColumn
, die Skalierungs- und Morphing-Animationen unterstützt.
Wenn Elemente an den Rand verschoben werden, werden sie kleiner und blenden aus.
Wenn Sie einen Skalierungs- und Scrolleffekt hinzufügen möchten, verwenden Sie Modifier.transformedHeight
, damit Compose die Höhenänderung berechnen kann, während das Element durch den Bildschirm scrollt, und transformation = SurfaceTransformation(transformationSpec)
, um die visuellen Effekte anzuwenden, einschließlich der visuellen Verkleinerung des Elements, damit es zum vorherigen passt.
Verwenden Sie einen benutzerdefinierten TransformationSpec
für Komponenten, die transformation
nicht als Parameter verwenden, z. B. Text
.
Die folgende Animation zeigt, wie sich die Größe und Transparenz eines Elements ändert, wenn es sich über den Bildschirm bewegt:
Im folgenden Code-Snippet wird gezeigt, wie Sie mit dem LayoutTransformingLazyColumn
Inhalte erstellen, die auf verschiedenen Wear OS-Displaygrößen gut aussehen. Im folgenden Beispielcode wird beispielsweise das erforderliche Padding für das erste und das letzte Element der Liste hinzugefügt, die im contentPadding
des TransformingLazyColumn
festgelegt sind. Damit die Scrollmarkierung angezeigt wird, müssen Sie columnState
zwischen ScreenScaffold
und TransformingLazyColumn
aufteilen:
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, ) } } } }
Snap-and-Fling-Effekt hinzufügen
Wenn Sie ein Snap-and-Fling-Verhalten hinzufügen möchten, empfehlen wir die Verwendung vonScalingLazyColumn
. So können Nutzer die Elemente in einer Liste genauer durchgehen und sich gleichzeitig schneller durch eine lange Liste bewegen.
Wenn Sie diesen Effekt der Horologist-Version von ScalingLazyColumn
hinzufügen möchten, legen Sie den Parameter rotaryMode
von columnState
auf RotaryWithSnap
fest, wie im folgenden Code-Snippet gezeigt:
val columnState = rememberResponsiveColumnState( // ... // ... rotaryMode = ScalingLazyColumnState.RotaryMode.Snap ) ScreenScaffold(scrollState = columnState) { ScalingLazyColumn( columnState = columnState ) { // ... // ... } }
Empfehlungen für dich
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Compose for Wear OS Codelab
- Listen und Raster
- Ansichten in Compose verwenden