Passer de Material 2.5 à Material 3 dans Compose pour Wear OS

Material 3 Expressive est la nouvelle évolution de Material Design. Elle inclut des thèmes et des composants mis à jour ainsi que des fonctionnalités de personnalisation telles que les couleurs dynamiques.

Ce guide traite de la migration de la bibliothèque Jetpack Wear Compose Material 2.5 (androidx.wear.compose) vers la bibliothèque Jetpack Wear Compose Material 3 (androidx.wear.compose.material3) pour les applications.

Approches

Pour migrer le code de votre application de M2.5 vers M3, suivez la même approche que celle décrite dans le guide de migration de Compose Material pour téléphone, en particulier :

Dépendances

M3 possède un package et une version distincts de M2.5 :

M2.5

implementation("androidx.wear.compose:compose-material:1.4.0")

M3

implementation("androidx.wear.compose:compose-material3:1.6.0-alpha01")

Consultez les dernières versions de M3 sur la page des versions de Wear Compose Material 3.

La version 1.6.0-alpha01 de la bibliothèque Wear Compose Foundation a introduit de nouveaux composants conçus pour fonctionner avec les composants Material 3. De même, SwipeDismissableNavHost de la bibliothèque Wear Compose Navigation a une animation mise à jour lorsqu'il est exécuté sur Wear OS 6 (niveau d'API 36) ou version ultérieure. Lorsque vous passez à la version Wear Compose Material 3, nous vous suggérons de mettre à jour également les bibliothèques Wear Compose Foundation et Navigation :

implementation("androidx.wear.compose:compose-foundation:1.6.0-alpha01")
implementation("androidx.wear.compose:compose-navigation:1.6.0-alpha01")

Personnalisation des thèmes

Dans M2.5 et M3, le composable Thème est appelé MaterialTheme, mais les packages et paramètres d'importation diffèrent. Dans M3, le paramètre Colors a été renommé ColorScheme et MotionScheme a été introduit pour implémenter les transitions.

M2.5

import androidx.wear.compose.material.MaterialTheme

MaterialTheme(
        colors = AppColors,
        typography = AppTypography,
        shapes = AppShapes,
        content = content
)

M3

import androidx.wear.compose.material3.MaterialTheme

MaterialTheme(
        colorScheme = AppColorScheme,
        typography = AppTypography,
        shapes = AppShapes,
        motionScheme = AppMotionScheme,
        content = content
)

Couleur

Le système de couleurs de M3 est très différent de celui de M2.5. Le nombre de paramètres de couleur a augmenté, leurs noms sont différents et ils sont mappés différemment aux composants M3. Dans Compose, cela s'applique à la classe M2.5 Colors, à la classe M3 ColorScheme et aux fonctions associées :

M2.5

import androidx.wear.compose.material.Colors

val appColorScheme: Colors = Colors(
   // M2.5 Color parameters
)

M3

import androidx.wear.compose.material3.ColorScheme

val appColorScheme: ColorScheme = ColorScheme(
   // M3 ColorScheme parameters
)

Le tableau suivant décrit les principales différences entre M2.5 et M3 :

M2.5

M3

Color

a été renommé ColorScheme.

13 couleurs

28 couleurs

N/A

Nouveau thème de couleur dynamique

N/A

de nouvelles couleurs tertiaires pour plus d'expression ;

Thèmes de couleurs dynamiques

La thématisation dynamique des couleurs est une nouvelle fonctionnalité de M3. Si les utilisateurs modifient les couleurs du cadran, celles de l'UI changent pour correspondre.

Utilisez la fonction dynamicColorScheme pour implémenter un jeu de couleurs dynamique et fournir un defaultColorScheme comme solution de remplacement si le jeu de couleurs dynamique n'est pas disponible.

@Composable
fun myApp() {
  val myColorScheme = myBrandColors()
  val dynamicColorScheme = dynamicColorScheme(LocalContext.current)
  MaterialTheme(colorScheme = dynamicColorScheme ?: myBrandColors) {...}
}

Typographie

Le système typographique de M3 est différent de celui de M2 et inclut les fonctionnalités suivantes :

  • Neuf nouveaux styles de texte
  • Les polices flexibles, qui permettent de personnaliser les échelles typographiques pour différentes épaisseurs, largeurs et arrondis
  • AnimatedText, qui utilise des polices flexibles

M2.5

import androidx.wear.compose.material.Typography

val Typography = Typography(
   // M2.5 TextStyle parameters
)

M3

import androidx.wear.compose.material3.Typography

val Typography = Typography(
   // M3 TextStyle parameters
)

Polices Flex

Les polices flexibles permettent aux concepteurs de spécifier la largeur et l'épaisseur de la police pour des tailles spécifiques.

Styles de texte

Les TextStyles suivants sont disponibles dans M3. Ils sont utilisés par défaut par les différents composants de M3.

Typographie

TextStyle

Écran

displayLarge, displayMedium, displaySmall

Titre

titleLarge, titleMedium, titleSmall

Label

labelLarge, labelMedium, labelSmall

Corps

bodyLarge, bodyMedium, bodySmall, bodyExtraSmall

Chiffre

numeralExtraLarge, numeralLarge, numeralMedium, numeralSmall, numeralExtraSmall

Arc

arcLarge, arcMedium, arcSmall

Forme

Le système de formes de M3 est différent de celui de M2. Le nombre de paramètres de forme a augmenté, leurs noms sont différents et ils sont mappés différemment aux composants M3. Les tailles de formes suivantes sont disponibles :

  • Très petite
  • Petit
  • Moyenne
  • Grande
  • Très grande

Dans Compose, cela s'applique à la classe Shapes M2 et à la classe Shapes M3 :

M2.5

import androidx.wear.compose.material.Shapes

val Shapes = Shapes(
   // M2.5 Shapes parameters
)

M3

import androidx.wear.compose.material3.Shapes

val Shapes = Shapes(
   // M3 Shapes parameters
)

Utilisez le mappage des paramètres de formes de Passer de Material 2 à Material 3 dans Compose comme point de départ.

Morphing de forme

M3 introduit le morphing de forme : les formes se transforment désormais en réponse aux interactions.

Le comportement de morphing de forme est disponible en tant que variante sur un certain nombre de boutons ronds, voir ci-dessous :

Boutons

Fonction de morphing de forme

IconButton

IconButtonDefaults.animatedShape() anime le bouton d'icône lorsque l'utilisateur appuie dessus.

IconToggleButton

IconToggleButtonDefaults.animatedShape() anime le bouton bascule d'icône lorsque l'utilisateur appuie dessus et

IconToggleButtonDefaults.variantAnimatedShapes() anime le bouton bascule d'icône lors de l'appui et de la sélection/désélection.

TextButton

TextButtonDefaults.animatedShape() anime le bouton de texte lorsque l'utilisateur appuie dessus.

TextToggleButton

TextToggleButtonDefaults.animatedShapes() anime le bouton bascule de texte lors de l'appui, et TextToggleButtonDefaults.variantAnimatedShapes() anime le bouton bascule de texte lors de l'appui et de la sélection/désélection.

Composants et mise en page

La plupart des composants et mises en page de M2.5 sont disponibles dans M3. Cependant, certains composants et mises en page M3 n'existaient pas dans M2.5. De plus, certains composants M3 présentent plus de variantes que leurs équivalents dans M2.5.

Bien que certains composants nécessitent une attention particulière, les mappages de fonctions suivants sont recommandés pour commencer :

Material 2.5

Material 3

androidx.wear.compose.material.dialog.Alert

androidx.wear.compose.material3.AlertDialog

androidx.wear.compose.material.Button

androidx.wear.compose.material3.IconButton ou androidx.wear.compose.material3.TextButton

androidx.wear.compose.material.Card

androidx.wear.compose.material3.Card

androidx.wear.compose.material.TitleCard

androidx.wear.compose.material3.TitleCard

androidx.wear.compose.material.AppCard

androidx.wear.compose.material3.AppCard

androidx.wear.compose.material.Checkbox

Aucun équivalent M3, migrer vers androidx.wear.compose.material3.CheckboxButton ou androidx.wear.compose.material3.SplitCheckboxButton

androidx.wear.compose.material.Chip

androidx.wear.compose.material3.Button ou
androidx.wear.compose.material3.OutlinedButton ou
androidx.wear.compose.material3.FilledTonalButton ou
androidx.wear.compose.material3.ChildButton

androidx.wear.compose.material.CompactChip

androidx.wear.compose.material3.CompactButton

androidx.wear.compose.material.InlineSlider

androidx.wear.compose.material3.Slider

androidx.wear.compose.material.LocalContentAlpha

A été supprimé, car il n'est pas utilisé par Text ou Icon dans Material 3

androidx.wear.compose.material.PositionIndicator

androidx.wear.compose.material3.ScrollIndicator

androidx.wear.compose.material.RadioButton

Aucun équivalent M3, migrer vers androidx.wear.compose.material3.RadioButton ou androidx.wear.compose.material3.SplitRadioButton