Listes avec Compose pour Wear OS

Grâce aux listes, les utilisateurs peuvent faire leur choix parmi un ensemble d'éléments sur des appareils Wear OS.

De nombreux appareils Wear OS utilisent des écrans ronds, ce qui rend plus difficile la visibilité des éléments de liste qui apparaissent en haut et en bas de l'écran. C'est la raison pour laquelle Compose pour Wear OS inclut une version de la classe LazyColumn appelée ScalingLazyColumn, qui prend en charge les effets de mise à l'échelle et de fondu. Lorsque les éléments se déplacent vers le centre de l'écran, ils deviennent plus grands et plus opaques.

L'animation suivante montre comment la taille et la transparence d'un élément changent à mesure qu'il se déplace sur l'écran :

L'extrait de code suivant montre comment créer une liste contenant du texte pour chaque élément :

val contentModifier = Modifier
    .fillMaxWidth()
    .padding(bottom = 8.dp)

@Composable
fun WearApp() {
    WearAppTheme {
        // Hoist the list state to remember scroll position across compositions.
        val listState = rememberScalingLazyListState()

        ScalingLazyColumn(
            modifier = Modifier.fillMaxSize(),
            autoCentering = AutoCenteringParams(itemIndex = 0),
            state = listState
        ) {
            item { TextItem(contentModifier, stringResource(R.string.first)) }
            item { TextItem(contentModifier, stringResource(R.string.second)) }
        }
    }
}

@Composable
fun TextItem(modifier: Modifier = Modifier, contents: String) {
    Text(
        modifier = modifier,
        textAlign = TextAlign.Center,
        text = contents
    )
}

Ajouter un effet d'ancrage et de glissement

Vous pouvez ajouter un comportement d'ancrage et de glissement aux gestes des doigts que l'utilisateur applique aux objets ScalingLazyColumn. Cet effet aide les utilisateurs à parcourir les éléments d'une liste avec plus de précision, et à se déplacer plus rapidement dans les listes longues.

Pour ajouter cet effet à une liste ou à un sélecteur de votre appli, incluez le paramètre flingBehavior dans votre définition ScalingLazyColumn, comme indiqué dans l'extrait de code suivant :

ScalingLazyColumn(
    modifier = modifier ...,
    flingBehavior = ScalingLazyColumnDefaults.snapFlingBehavior(
        state = listState,
        snapOffset = 0
        // Exponential decay by default. You can also explicitly define a
        // DecayAnimationSpec.
    ) {
        // Contents of the list here.
}

Pour appliquer un comportement d'ancrage et de glissement semblable à celui de ScalingLazyColumn lorsque l'utilisateur interagit avec un cadran rotatif, utilisez RotaryWithSnap, disponible dans Horologist sur GitHub.