Dans cette section, nous allons apprendre à ajouter des interactions à notre conception via des gestionnaires d'interactions.
![Application d'actualités avec interaction tactile](https://developer.android.google.cn/static/develop/ui/compose/tooling/relay/images/interaction-handlers/newsapp-with-tap-interaction.png?authuser=5&hl=fr)
Les gestionnaires d'interaction permettent de spécifier les endroits où il est possible d'interagir avec un composant (en appuyant une fois ou deux, par exemple). Vous pouvez ajouter des gestionnaires d'interaction à n'importe quelle couche d'une conception.
Ajouter des gestionnaires
Vous pouvez ajouter des gestionnaires d'interaction à n'importe quelle couche. Cela permet aux concepteurs de spécifier les parties du composant qui sont interactives.
Sélectionnez la variante hero-item (le frame), cliquez sur + à côté de Paramètres, puis sélectionnez
tap-handler
pour ajouter une gestionnaire d'interactions. Cela permet aux développeurs d'écrire du code qui réagit lorsqu'un utilisateur appuie sur la vignette.Répétez l'étape précédente avec la couche d'icône menu dans la variante audio-item. Cela permet aux développeurs d'afficher un menu lorsqu'un utilisateur appuie sur l'icône de menu.
Si vous sélectionnez le gestionnaire en appuyant sur le menu, vous remarquerez qu'il ne s'applique qu'à la variante audio-item, car les autres variantes n'ont pas d'icône de menu. Cependant, l'option On NewsCard tapped s'applique aux trois variantes. Cela signifie que vous pouvez fournir un gestionnaire (dans le code) à exécuter lorsque l'utilisateur appuie sur l'une des trois variantes, ce qui supprime la duplication du code et des paramètres. Nous verrons comment cela fonctionne plus en détail dans la section Mettre à jour le composant dans Android Studio.
Enregistrer la version nommée
Nous allons maintenant marquer cette version comme étant prête à être importée dans le code.
Si ce n'est pas déjà fait, ouvrez le plug-in Figma Relay.
Cliquez sur Partager avec un développeur dans le coin inférieur droit de la boîte de dialogue.
Sur l'écran Partager avec un développeur, saisissez un nom et une description pour la version.
Exemple de titre: Interactions ajoutées
Exemple de description: Deux gestionnaires d'interaction ajoutés aux fiches
Cliquez sur Enregistrer.
Appuyez sur CMD-L sur un MAC, ou sur CTRL-L sous Windows pour copier le lien du composant dans le presse-papiers.
Mettre à jour le composant dans Android Studio
Mettez à jour le composant NewsCard :
Dans Android Studio, assurez-vous que la fenêtre d'outil Projet se trouve dans la vue Android. Effectuez ensuite un clic droit sur
app/ui-packages/news_card/
, puis en bas du menu contextuel, cliquez sur Update UI Package (Mettre à jour le package UI).Cliquez sur
pour créer votre projet. Le package UI mis à jour est alors utilisé et une version mise à jour du code composable est générée.
Examinez
app/java/com/example/hellonews/newscard/NewsCard.kt
et constatez que les gestionnaires d'interaction sont ajoutés en tant que paramètres à NewsCard (onNewsCardTapped
,onMenuTapped
).// Design to select for NewsCard enum class View { HeroItem, ArticleItem, AudioItem } /** * Displays a summary of a news article. * * This composable was generated from the UI package 'news_card'. * Generated code; do not edit directly */ @Composable fun NewsCard( modifier: Modifier = Modifier, view: View = View.HeroItem, thumbnail: Painter = EmptyPainter(), headline: String = "", author: String = "", date: String = "", onNewsCardTapped: () -> Unit = {}, onMenuTapped: () -> Unit = {} ) { ...
Intégrer à l'application
Ajoutons maintenant des gestionnaires à nos interactions.
Dans
app/java/com/example/hellonews/ui/home/HomeScreen.kt
, faites défiler l'écran jusqu'àPostListArticleStories
, vers la ligne 175.... @Composable fun HomeScreen(...) @Composable private fun PostList(...) @Composable private fun PostListArticleStoriesSection(...) @Composable private fun SearchArticlesSection(...) @Composable private fun PostListArticleStories( postTop: Post, posts: List<Post>, createOnTapped: (String, String) -> () -> Unit ) {...} @Composable private fun AudioStoriesTitle(...) @Composable private fun PostListAudioStories(...) @Composable fun Dialog(...) ...
Pour
postTop
, ajoutez des gestionnaires pouronNewsCardTapped
.createOnTapped
ouvre une boîte de dialogue contenant ses paramètres de titre et de corps.@Composable private fun PostListArticleStories( postTop: Post, posts: List<Post>, createOnTapped: (String, String) -> () -> Unit ) { ... Column( horizontalAlignment = Alignment.Start, modifier = ... ) { Spacer(modifier = Modifier.size(12.dp)) NewsCard( thumbnail = painterResource(postTop.imageId), headline = postTop.title, author = postTop.metadata.author.name, date = postTop.metadata.date, onNewsCardTapped = createOnTapped("Card Tapped", postTop.title), view = View.HeroItem ) Spacer(modifier = Modifier.size(12.dp)) ... } }
Pour chaque article, ajoutez des gestionnaires pour
onNewsCardTapped
.@Composable private fun PostListArticleStories( postTop: Post, posts: List<Post>, createOnTapped: (String, String) -> () -> Unit ) { ... Column( horizontalAlignment = Alignment.Start, modifier = ... ) { ... posts.forEach { post -> NewsCard( thumbnail = painterResource(post.imageId), headline = post.title, author = post.metadata.author.name, date = post.metadata.date, onNewsCardTapped = createOnTapped("Card Tapped", post.title), view = View.ArticleItem ) Spacer(modifier = Modifier.size(12.dp)) } } }
Toujours dans
HomeScreen.kt
, faites défiler l'écran jusqu'àPostListAudioStories
, vers la ligne 260.... @Composable fun HomeScreen(...) @Composable private fun PostList(...) @Composable private fun PostListArticleStoriesSection(...) @Composable private fun SearchArticlesSection(...) @Composable private fun PostListArticleStories(...) @Composable private fun AudioStoriesTitle(...) @Composable private fun PostListAudioStories( posts: List<Post>, createOnTapped: (String, String) -> () -> Unit ) {...} @Composable fun Dialog(...) ...
Pour chaque article, ajoutez des gestionnaires pour
onNewsCardTapped
. Étant donné que la variante "Audio" comporte un menu, attribuezcreateOnTapped
àonMenuTapped
.@Composable private fun PostListAudioStories( posts: List<Post>, createOnTapped: (String, String) -> () -> Unit ) { Column( horizontalAlignment = ..., modifier = ... ) { posts.forEach { post -> NewsCard( thumbnail = painterResource(post.imageId), headline = post.title, author = post.metadata.author.name, date = post.metadata.date, onNewsCardTapped = createOnTapped("Card Tapped", post.title), onMenuTapped = createOnTapped("Menu Tapped", post.title), view = View.AudioItem ) Spacer(modifier = Modifier.size(12.dp)) } } }
Cliquez sur ▶ pour créer l'appli et l'exécuter dans l'émulateur.
Parfait ! Vous connaissez maintenant les fonctionnalités avancées de Relay.
Pour en savoir plus sur l'utilisation de Relay, consultez la section Workflow de Relay. N'hésitez pas à nous faire part de vos commentaires.
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé
- Paramètres de contenu
- Gérer les variantes de conception