0 évaluation 0% ont trouvé ce document utile (0 vote) 72 vues 70 pages Compose
Ce document présente un cours sur Android Compose, une nouvelle méthode pour créer des interfaces Android, en abordant des concepts fondamentaux tels que la sécurité, le moteur de rendu, et l'architecture d'un projet Compose. Il explique également comment configurer un projet, utiliser des composants, et gérer les interactions utilisateur. L'objectif final est de réaliser une application Android fictive qui interagit avec un périphérique Bluetooth, servant de référence pour les étudiants.
Description améliorée par l'IA
Copyright
© © All Rights Reserved
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
Accéder aux éléments précédents Accéder aux éléments suivants
Enregistrer Compose pour plus tard
roinsi2025 09-46, ‘TP Android Compose | Cours
Menu
TP Android Compose
¥ Sommaire
* Introduction
* Fonctionnement de Android
+ Sécurité
‘* Moteur de rendu
* Principe de Compose
+ Multipiateforme
© cre:
«Premier lancement et découverte
+ Llarchitecture d'un projet Compose
+ Les dossiers
* Les textes
+ Le fichier AndroidManifest
* Personnalis:
n de I'applicat
* Afaire:
+ Afaire 2:
+ Linterface
* Imbrication des composants
* Une disposition en « grille »
* Les animations
+ Le material design
* Définir notre layout / composant
+ Afaire
+ Taille et style du texte
+ Les ressources
* Les ressources alternatives
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil
Sommaire
1170roinsi2025 09-46, ‘TP Android Compose | Cours
© Les images
* Les interactions
+ Les Toast
* Les Snackbars
+ Rendre un bouton cliquable
Afaire
* Les dialogues
* Conditionner I'affichage d'un élément
+ Structure, organisation d'un code avec plusieurs Screens
+ Exemple de Screen
* Le scaffold
+ A faire
* Les données
« MVVM : Model View ViewModel
+ Larecomposition
+ Evol
n de la structure
* Quelques libraires a ajouter
‘© Création du ViewModel
* Création de la View
+ Lastructure du composant
* Structure du composant
+ Les données
+ La TopAppBar
* Le bouton flottant
* Laliste
+ Afaire
+ Découper plus finement / améliorer laffichage
* Organisation du code
+ Base du composant
Afaire
« A faire suite
* Vous souhaitez aller plus loin ?
+ Afaire
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hilroinsi2025 09-46, ‘TP Android Compose | Cours
* Les permissions
* Ajouter la librairie
© Utiliser la librai
+ Afaire
+ Afaire
* Slides Android Base
Introduction
Dans ce TP, nous allons découvrir Android Compose, la nouvelle fagon de créer des
interfaces pour Android.
Nous allons y découvrir les bases de Compose, comment créer des interfaces, comment
gérer les états, et comment interagir avec les utilisateurs.
Llobjectif est de vous donner les clefs pour réaliser le projet final de ce cours : Une
application Android qui dialogue avec un périphérique Bluetooth (BLE).
Note importante
Lapplication que nous réalisons dans ce TP est une application « fictive », elle est la pour vous
faire pratiquer Compose. Elle ne sera pas celle a restituer. Cependant, ne la perdez pas, elle
vous sera utile comme « projet de référence » pour votre réalisation.
Elle va surtout nous servir 4 comprendre comment fonctionne Compose, et comment I'utiliser
pour réaliser des interfaces.
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hilsoins12025 09-46 ‘TP Android Compose | Cours
hitpsleous.brosseas.ovhplandroidlcomposetandroid-base. html 4770roinsi2025 09-46 ‘TP Android Compose | Cours
Fonctionnement de Android
Android est une plateforme mobile développée par Google. Elle repose sur un noyau
Linux et est globalement utilis¢e pour des smartphones et des tablettes.
D'un point de vue sécurité et performance, Android est une plateforme trés intéressante.
Elle est également tres populaire, ce qui en fait une plateforme de choix pour le
développement d'applications mobiles.
Android repose sur plusieurs éléments :
+ Kotlin : Kotlin est un langage plus récent qui est devenu le langage de prédilection
pour le développement Android.
* Gradle : Gradle est un outil de build qui permet de compiler, de packager et de
déployer les applications Android.
+ Android SDK : L'Android SDK est un ensemble d'outils et de bibliothéques qui
permettent de développer des applications Android.
* Play Services : Play Services est un ensemble de services qui permettent d'ajouter
des fonctionnalités 4 une application Android.
+ Compose : Compose est une bibliothéque qui permet de créer des interfaces pour
Android.
+ Jetpack : Jetpack est un ensemble de bibliotheques qui permettent de faciliter le
développement d'applications Android.
+ View : Les Views sont les éléments de base qui permettent de créer des interfaces
pour Android (ancien systéme).
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html 570‘010312026 09:46 TP Anois Compose | Cours
Android étant relativement ancien, beaucoup d'éléments reposent sur du XML.
Cependant, récemment, Google a annoncé Compose, une nouvelle fagon de créer des
interfaces pour Android. C'est celle-ci que nous allons découvrir dans ce TP.
Sécurité
Lors de l'installation d'une application Android. Techniquement, l'application est isolée
des autres applications
+ Utilisation de permissions pour accéder a des ressources.
* Isolation des applications (sandbox).
+ Sécurité des données (chiffrement, etc.).
+ Permissions pour accéder a des ressources (caméra, contacts, localisation, etc).
Signature
Lors de installation d'une application, Android vérifie que l'application est signée par un
certificat valide. Cela permet de garantir que l'application n'a pas été modifiée depuis sa
publication.
Cette signature est également utilisée pour identifier I'application et pour gérer les mises a jour.
Elle est de type RSA et est stockée dans le fichier APK.
Moteur de rendu
Depuis l'arrivée de Compose, Android ul
les interfaces. Ce moteur nommé « Skia » est un moteur de rendu 2D qui est utilisé par
de nombreux projets (Chrome, Firefox, etc.).
ise un nouveau moteur de rendu pour afficher
Il est trés performant et permet de créer des interfaces fluides et réactives. Il est
également trés flexible et permet de créer des interfaces complexes.
Principe de Compose
+ Déclaratif : Compose est un framework déclaratif. Cela signifie que vous décrivez ce
que vous voulez afficher, et Compose se charge de mettre a jour I'interface en
fonction des changements.
+ Composable : Compose repose sur le concept de composable. Un composable est
une fonction qui prend des parametres et qui retourne un élément de "interface.
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 670‘010312026 09:46 TP Anois Compose | Cours
+ Observation : Compose permet dobserver des données et de mettre a jour I'interface
en fonction des changements.
Performances
Seul les composants qui ont changé sont mis a jour, ce qui permet d’optimiser les
performances.
Multiplateforme
Avec Compose, il est également possible de créer des interfaces pour d'autres
plateformes (Web, Desktop, iOS.). Plusieurs approches sont possibles :
Trois termes a retenir :
+ Compos:
a librairie de Google pour Android > Interface déclarative.
+ KMM : Kotlin Multiplatform (Jetbrains) > Logique métier partagée.
+ CMP : Compose Multiplatform (Jetbrains) > Interface partagée.
Création du projet
Pour la création du projet, rien de spécial a prévoir. II s'agit ici de suivre le processus de
création d'une application comme habituellement. Pour ca nous allons utiliser « Android
Studio » qui est I'IDE a utiliser pour créer une application Android.
Lors de la création, Android Studio va nous poser plusieurs questions, nous allons donc
choisir :
+ Template : Empty Compose Activity
+ Language : Kotlin
* SDK Min. : SDK 26. (ou plus)
Je vous laisse suivre les étapes de création d'un nouveau projet.
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 710‘TP Android Compose | Cours
Mais quelques petites remarques
* Le choix du package est trés important. Comme nous avons vu ensemble en cours, le «
Package » doit étre unique. En effet deux applications ne peuvent pas avoir le mém.
* Choisir un min SDK qui correspond aux cibles des mobiles souhaités. (Si vous étes en Fran
ou dans un autre pays, il conviendra de faire le bon choix).
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html‘101032026 08-48 ‘TP Androké Compose | Cours
+ Kotlin est maintenant le langage a choisir, Java et Kotlin cohabite sans probleme vous
n’aurez done aucun probleme de compatibilité.
L'émulateur
Comme vu ensemble pendant le cours, 'émulateur va nous permettre de tester «
simplement » notre application avec des performances suffisantes dans les cas simples.
La création de celui-ci est intégrée 4 Android Studio. Dans Android Studio la partie
émulateur s'appelle Device Manager et est disponible dans le menu. tools
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hilsoinsi2025 09-46, ‘TP Android Compose | Cours
un Tools ~~ VCS
Tasks & Contexts
IDE Scripting Console
Generate JavaDoc...
Create Command-line Launcher...
XML Actions
Markdown Converter
JShell Console...
Kotlin
Groovy Console
Cling >
% SDK Manager
we Resource Manager
Troubleshoot Device Connections
App Links Assistant
Firebase
= Layout Inspector
AGP Upgrade Assistant...
hitpsileours brosseau,soins12025 00-46 ‘TP Android Compose | Cours
Pour le choix du type de devices vous étes libres... Mais le mieux est de choisir un «
template de mobile » assez représentatif de ce que I'on trouve chez les clients. Un bon
choix est par exemple un « Pixel 6a » avec Android Oreo.
TIP
Le Logo Playstore présent sur la ligne d'un simulateur indique que celui-ci est équipé des Play
Services. Bien que dans notre cas ca ne change pas grand-chose. Cependant, je vous invite
vivement 8 choisir un émulateur avec les Play Services, car celui-ci sera trés proche d'un vrai
t8léphone trouvable dans le commerce.
Maintenant que votre émulateur est créé, nous allons pouvoir lancer l'application « Run >
Run App ».
Premier lancement et découverte
Pour débuter (et avant de tout retravailler), je vous laisse compiler et lancer une premiere
fois l'application proposée par Google.
Dans mon cas I'application est sur la droite.
Analysons le code
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html 170‘TP Android Compose | Cours
‘soins12025 09-46
art
era reas
Pernt
Drees Cun
oct Sa teCUNesue yet Ose MCL uch ees
Modifier paddingCinnerPadding)
eet
ou (name: String, modifier: Modifier = Modifier) {
aces
cra
difier
ackground = trve)
O4
cee
Ici, nous avons
+ Notre Mainactivity qui est la premiére activité lancée. Elle contient un setcontent qui va
afficher notre interface.
* Greeting qui est un composent. Un composant est une partie de I'interface. Ici, nous avons
un composant qui affiche un texte.
* GreetingPreview qui est une fonction qui a pour but de prévisualiser notre composant
Greeting (une preview qui évite de lancer I'application a chaque fois pour voir le rendu).
Note
Si vous avez des erreurs, il est possible que votre installation d'Android Studio ne soit pas
correcte. Je vous invite & vérifier que vous avez bien installé les composants nécessaires.
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html taroto1032025 09:46 TP Anois Compose | Cours
L'architecture d'un projet Compose
Les dossiers
Un projet Android est composé de plusieurs dossiers :
+ app : C'est le dossier principal de l'application. Il contient le code source, les
ressources, les fichiers de configuration, ete.
+ build : C'est le dossier ou sont stockés les fichiers générés par Gradle lors de la
compilation de I'application.
* grade : C'est le dossier oll sont stockés les fichiers de configuration de Gradle.
+ res :Clest le dossier ott sont stockées les ressources de l'application (images,
fichiers XML, etc). Nous avons dans ce dossier plusieurs sous-dossiers :
= drawable : C'est le dossier oul sont stockées les images.
+ layout : C'est le dossier ott sont stockés les fichiers XML qui définissent I'interface
de l'application.
* mipmap : C'est le dossier ol sont stockées les icénes de |'application.
+ values : C'est le dossier ol sont stockés les fichiers XML qui définissent les
valeurs de I'application (couleurs, dimensions, etc).
Les textes
Android est un systéme d'exploitation pensé pour étre internationalisé. C'est pourquoi il
est important de séparer les textes de I'interface de I'application.
Pour cela, Android utilise des fichiers XML qui contiennent les textes de l'application. Ces
fichiers sont stockés dans le dossier res/values .
Avant de continuer, je vous invite & ouvrir le fichier strings.xnl qui se trouve dans le
dossier res/values pour y observer les textes de l'application.
Le fichier AndroidManifest
Pour rappel le fichier manifest va nous permettre d'exposer « de la configuration »
relative a votre application sur le téléphone, cette configuration est trés large :
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 413170‘010312026 09:46 TP Anois Compose | Cours
+ Le nom de votre application.
+ Les activity accessibles.
+ Llicéne de votre application.
+ Les services de votre application.
+ Les paramétrages spécifiques de vos activités (Orientation, theme, comportement...)
Personnalisation de |'application
A faire:
+ Editer le fichier androidManifest.xml .
+ Changer le nom de votre application (attention a bien utiliser la mécanique it8n ).
+ Regarder l'ensemble des paramétres spécifier dans le XML
+ Tester a nouveau votre application
TIP
Petit raccourci pratique d'Android Studio. Si vous appuyez deux fois sur la touche shiftshift
Android Studio vous proposera de chercher des actions / fichiers / menus dans l'ensemble de
votre projet.
Afaire 2:
Changer l'icéne de l'application en utilisant les outils fournis par Google dans Android
Studio « Image asset » :
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 14170‘TP Androld Compose | Cours
Ot ett
ec ice ea
elec ea ciay
Parent Sample Data Directory
rag (le
Po Sma
Praca
Peres ces ter cy
Gone es
anne reel
Poe ae (oer aay
rier) Orne sere tai
Cer racds Tec
Vector Asset
PO Rede)
Cony
POC uur eet) CaaS Cd
OP es
oi
Cones eu
Pretec eas
Cem are I Cae)
Oe OCs
PE eluryd
le
eo
eee] le
COPE meg Picts
eoeeiy
Ucn a Otte
eeu gay
Ce et
erences
Poe acy
Crea crac
CUCU Guy
ReeC eee ct cs
Rreriatecsac
Couto]
Coe rc mcs
Crue Onn
Une fois fait, regarder les modifications dans votre projet.
Notamment
+ Le fichier AndroidManifest.xml est-ce que celui-ci a été modifié ?
* Si oui, quel(s) élément(s) sont différents ?
* Sinon, pouvez-vous me dire pourquoi ?
Liinterface
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html‘010312026 09:46 TP Anois Compose | Cours
Compose repose sur l'utilisation du code pour définir interface que l'utilisateur va voir.
Elle reprend les principes de la programmation en composant qui est largement utilisée
dans le développement web.
Nous avons a notre disposition un ensemble de composants « fonctionnels » qui vont
nous permettre de créer les éléments de notre interface :
+ Text : Un composant qui permet d'afficher du texte.
+ sutton : Un composant qui permet diafficher un bouton.
* switch : Un composant qui permet d'afficher un toggle (un bouton qui peut étre
activé ou désactivé)
+ Image : Un composant qui permet diafficher une image.
+ LazyColumn : Un composant qui permet d'afficher une liste.
* Scaffold : Un composant qui permet de créer une structure de base pour notre
application (barre de navigation, etc.).
+ TopAppBar : Un composant qui permet de créer une barre de navigation en haut de
application.
+ card : Un composant qui permet de créer une carte.
+ Icongutton : Un composant qui permet de créer un bouton avec une icéne.
+ Etc... (lly ena beaucoup plus, mais nous allons nous arréter [a pour I'instant).
Nous avons également des composants qui sont la pour définir la structure de notre
application :
+ colunn : Un composant qui permet de créer une colonne.
+ Row : Un composant qui permet de créer une ligne.
+ Box : Un composant qui permet de créer une boite.
+ spacer : Un composant qui permet de créer un espace entre deux éléments.
Les composants sont des fonctions que nous allons pouvoir appeler dans notre code. lls
seront appelés au bon moment en fonction de conditions que nous allons définir. Les
composants seront imbriquables les uns dans les autres, ce qui nous permettra de créer
des interfaces complexe. Par exemple :
kottin
1 Column) {
2
Text ("Texte 1")
3 Text ("Texte 2")
‘ntps:fcours,brosseau.ovhiplandroiaicompose/android-base. hil 16170roinsi2025 09-46 ‘TP Android Compose | Cours
5 Text ("Texte 3")
Ce code va nous permettre d'afficher trois textes les uns en dessous des autres. Et si
nous souhaitons afficher les textes les uns a coté des autres ? || suffit de changer le
composant Colunn par Row .
kottin
Row) {
Text("Texte 1")
3 Text("Texte 2")
4 Text("Texte 3")
Nous pouvons également imbriquer les Colonnes et les Lignes :
kotin
1 Column() {
2 Row() {
3 Text("Texte 1")
4 Text("Texte 2")
5 Text(“Texte 3")
6 }
7 Row() {
8 Text("Texte 4")
Text("Texte 5")
18 6")
11 y
Rn}
Cet exemple est la pour vous montrer la puissance de Compose. Compose a été pensé
pour étre simple et modulaire, par exemple pour un bouton le principe est le méme :
kotiin
Button(onClick = { /* Code appelé lors du clique sur le bouton */ }) (
Text ("Mon bouton")
Ici nous voyons que le composant Button prend en paramétre une action (un code qui
sera appelé lors du clique sur le bouton) et un composant Text qui sera affiché dans le
bouton. Pratique ! Et si nous souhaitons un bouton avec un loader ? Et bien c'est simple il
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 17110roinsi2025 09-46, ‘TP Android Compose | Cours
suffit de changer le composant Text par un composant CircularProgressIndicator (qui
est un loader).
kotiin
Button(onClick = { /* Code appelé lors du clique sur le bouton */ }) ¢
CircularProgressIndicator()
Et évidemment, nous allons pouvoir créer nos propres composants... Mais nous verrons
a plus tard.
Imbrication des composants
Avec Compose, tout est composant. Cela signifie que nous allons pouvoir imbriquer les
composants les uns dans les autres pour créer des interfaces complexes.
kottin
Column ¢
2 Button(onClick = { /* Action */ }) (
3 Text ("Cliquez ici")
4 }
5 Spacer(modifier = Modifier.weight(1*))
6 Text("Un texte”)
Comment lire le code ci-dessus ?
+ Nous avons un composant Column qui contient trois composants : un composant
Button , un Composant spacer et un composant Text .
+ Le composant sutton est un bouton qui affiche le texte « Cliquez ici » et qui appelle
une action lorsqu'l est clique.
+ Le composant spacer est un espace qui prend tout I'espace disponible.
+ Le composant Text est un texte qui affiche le texte « Un texte ».
Une disposition en « grille »
Nous construisons done des grilles de composants.
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 18170roinsi2025 08-46 ‘TP Android Compose | Cours
eorees peor
Column Row Box
Et n'oubliez pas
Tout est imbriquable, vous pouvez donc imbriquer des column dans des ow ,des Row dans
des colunn , ete.
Les animations
Sans entrer dans les détails, réaliser des animations avec Compose est trés simple. Nous
avons & notre disposition plusieurs composants qui vont nous permettre de réaliser des
animations :
ketlin
1 var counter by remember { mutablestateoF(@) }
2
3 Column {
4 Button(onClick = { counter++ }) {
Text ("Action")
6 ,
7
8 Animatedvisibility(visible = counter > 0) {
9 Text ("Visible")
te >
1
2 AnimatedContent (targetState = count) { targetstate ->
3 Text (text = "Count: $targetstate”)
4 y
15 +
Dans cet exemple, nous avons un compteur qui va étre incrémenté lors du clique sur le
bouton. Lorsque le compteur est supérieur a 0, le texte « Visible » va apparaitre avec une
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 19170roinsi2025 09-46, ‘TP Android Compose | Cours
animation. Et le texte « Count: $targetState » va étre mis a jour avec une animation.
C'est pour vous
Je vous laisse tester, et garder ce genre de code pour votre projet final. Les animations sont un
plus pour une application, elles permettent de rendre l'application plus dynamique et plus
agréable a utiliser.
Le material design
En plus des composants proposés par Compose, nous avons également accas aux
composants de Material Design. Le projet que vous avez créé utilise déja le Material
Design en version 3.
Les composants proposés sont préts a l'emploi, ils intégrent toutes les bonnes pratiques
définies par Google.
Documentation de Material Design
Ce TP est guidé, vous n'avez pas a « apprendre la documentation », par contre je vous
invite a la parcourir pour voir les options / fonctionnements, votre compréhension en sera
grandement facilitée.
Définir notre layout / composant
Maintenant que nous avons vu, les bases du fonctionnement de compose (et que vous
avez observé le code de I'application de base), nous allons pouvoir commencer a définir
notre propre layout.
Dans un premier temps, nous allons modifier le composant Greeting pour qu'il affiche «
autre chose ». Il va devenir en quelque sorte notre composant principal ( hone ).
A faire
Nous allons modifier notre composant Greeting pour qu'il resemble a ceci
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 20170roinsi2025 02-46 ‘TP Android Compose | Cours
Cae
Hello Android!
Prototyper l'idée
Pour cette premiere fois, nous allons prototyper I'idée ensemble, dans un premier temps
tester en utilisant le code suivant
@Composable
fun Greeting(name: String) {
Column {
Button(onclick = { /* Action */ }) {
Text ("Cliquez ici")
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html 21170toinsi2025 09-46 ‘TP Android Compose | Cours
© }
7 Spacer (modifier = Modifier.weight(1f))
7
S Text("Un texte")
~ }
wy
Spacer?
kottin
1 Spacer(modifier = Modifier.weight(1#))
Un espace qui prend tout I'espace disponible. weight est un pourcentage. Ici nous avons un
poids de 1, donc il prend tout I'espace disponible.
Centrer nos éléments
Plusieurs solutions :
* horizontalAlignment = Alignment.CenterHorizontally surla Column .
© textAlign = TextAlign.center surle Text . A\ Attention, cela ne fonctionne que si
votre Text fait la largeur de I'écran.
ketlin
1 Column(
2 horizontalAlignment = Alignment .centerHorizontally
3 rf
4 Spacer (modifier = Modifier.weight(1F))
5 Text ("Un texte”)
+
Ajouter un padding
Pour ajouter un padding a un composant, nous allons utiliser le Modifier.padding :
keotlin
1 Column(
2 horizontalAlignment = Alignment.CenterHiorizontally,
3 modifier = Modifier.padding(16.dp)
4 rf
Spacer(modifier = Modifier weight (1*))
‘ntps:fcours,brosseau.ovhiplandroiaicompose/android-base. hil 22170roinsi2025 09-46 ‘TP Android Compose | Cours
Text("Un texte”)
Mettre deux boutons céte a cote
Pour mettre deux boutons céte a céte, nous allons utiliser un row dans notre column :
kotlin
1 @Composable
2 fun Greeting(name: String) {
3 Column(
4 horizontalAlignnent = Alignnent.CenterHorizontally,
5 modifier = Modifier. padding(16.dp)
6 ¢
7 Row {
8 Button(onClick = { /* Action */ }) {
9 Text ("Cliquez ici")
te }
ua Spacer (modifier = Modifier.width(16.dp))
2 Button(onClick = { /* Action */ }) {
3 Text ("Cliquez 18")
4 }
15 +
16 Spacer (modifier = Modifier.weight(1#))
v Text("Un texte”)
18 }
1s +
C'est a vous
Avec les éléments que nous avons vus ensemble, je vous laisse créer un composant
Hone pour qu'il ressemble a l'image ci-dessus.
Pour cette premiere fois, je vais vous donner le code complet (profitez-en, ce ne sera pas
toujours le cas) :
kottin
1 @Composable
2 fun Home(){
3 Column(
4 modifier = Modifier.padding(innerPadding)
5 rf
6 Spacer(modifier = Modifier.weight(1f))
‘ntps:fcours,brosseau.ovhiplandroiaicompose/android-base. hil 23170roinsi2025 09-46
18
30
Arrétons-nous un instant, que constatez-vous dans le code que vous avez copié-collé
‘TP Android Compose | Cours
modifier = Modifier. fillMaxwidth(),
horizontalarrangement = Arrangement.Center,
verticalAlignnent = Alignment .centerVertically
Greeting(
name = “Android”,
Spacer(modifier ~ Modifier.weight(1f))
Row {
Button(onClick = { /*T0D0*/ }) {
Text("Button 1")
Spacer(modifier = Modifier.weight(1f))
Button(onClick = { /*TODO*/ }) {
Text ("Button 2")
@Preview(showBackground = true)
fun HomePreview() {
sans trop réfléchir @Q...
+ @Conposable au-dessus de la fonction, indique 'emplacement d'un composant.
+ @Preview(showBackground = true) permet de réaliser une preview de votre composant
sans la lancer sur un téléphone (pratique, testons).
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil
2470‘010312026 09:46 TP Anois Compose | Cours
Je vous laisse mettre en place le code. Et valider que celui-ci s'affiche correctement
dans la partie preview.
L'agencement
En compose, nous parlons de Modifier .
Les modifiers ont des méthodes pour modifier les composants (taille, couleur, etc.). Ils
sont chainables et varient en fonction du composant.
kotlin
1 Text(
2 text = "Hello World",
3 modifier = Modifier
4 -padding(16.dp)
5 «background (Color Blue)
6 sborder(1.dp, Color.Black)
a)
Exemple les dimensions
ketlin
1 Modifier. fillMaxwidth() // Rempli la largeur
2 Modifier. fillMaxHeight() // Rempli la hauteur
3 Modifier. fillMaxSize() // Rempli la taille
Exemple le padding
keotlin
1 Modifier.padding(16.dp) // Ajoute un padding de 16dp
2 Modifier.padding(16.dp, 8.dp) // Ajoute un padding de 16dp en largeur et 8dp en
rr D »
Taille et style du texte
ketlin
1 Text(text = content, fontWeight = Fontheight.Light, fontSize = 10.sp)
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 25170roinsi2025 09-46 ‘TP Android Compose | Cours
Les ressources
Les ressources sont un élément important d'une application Android. Elles peuvent étre
de plusieurs types
* drawable : Les images.
* miap : Les icénes.
* values : Les valeurs (couleurs, textes, dimensions, etc.).
Internationalisation
Je ne le répéterai jamais assez, I'internationalisation est un élément important d'une application.
Android Studio propose un outil pour gérer les traductions de votre application.
Extraire les textes de votre application est donc un un incontournable. Android Studio
vous guide pour cela
C'est a vous
Je vous laisse extraire les différents textes de votre application
Les ressources alternatives
Les ressources alternatives sont des ressources qui sont utilisées en fonction de la
configuration de l'appareil. Par exemple, si l'appareil est en mode sombre, les ressources
alternatives seront utilisées. Voici une liste non exhaustive des configurations qui peuvent
étre utilisées
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html 26170roinsi2025 09-46, ‘TP Android Compose | Cours
Taille de I'écran
Langue.
Rotation de I'écran (Paysage / Portrait).
DPI
Theme sombre
Version d’Android
ete.
Cette création de ressource est réalisable directement depuis Android Studio
Rn eee eo oa nC) TSC
fortis ECL Te NL
airy
rena
Pyrat
UN Rg G c+ Cla
ener Ao eons
C/C++ He:
Refactor
RR ns
STA ice UL Ct gm meal eal ae
ai
ee aa axo
DTW Ce
Run ‘All Tests! with C
rm ae Te
Geer ult la Eterna
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html
2nrm0roinsi2025 09-46 ‘TP Android Compose | Cours
cy
Cron
Vous pouvez tout redét
Llensemble des ressources ( res ) est redéfinissable sans écrire de code. Par exemple si vous
souhaitez redéfinir des dans différentes conditions il suffit de :
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html 2270soins12025 02-46
‘TP Androld Compose | Cours
values-it
strings.xml
values-land
dimens.xml
strings.xml
values-night
themes.xml
A faire
Nous allons tester ensemble ce fonctionnement grace aux textes que vous avez extraits :
+ Ajouter la langue it (Italien) a votre application.
* Traduire votre fichier strings.xm1 en italien.
+ Lancer votre application et changer la langue de votre téléphone pour voir le résultat.
Les images
Nous avons dans notre application un dossier drawable qui contient les images de
‘application. Nous allons maintenant ajouter une image & notre application.
Je vous laisse chercher le logo de I'ESEO, et I'ajouter a votre application (un glisser-
déposer dans le dossier drawable suffit).
A faire
Placer l'image dans le dossier res/drawable/ . Puis ajouter le au-dessus de votre Text
qui est actuellement au centre de votre colunn
kottin
1 Image(
2 painter = painterResource(R.drawable.nom_image),
3 contentDescription = "Une image",
4 modifier = Modifier. size(128.dp)
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html 22170roinsi2025 09-46, ‘TP Android Compose | Cours
AX 8.drawable.nom_image est un exemple, vous devez remplacer nom_image parle nom
de votre image. A,
Les interactions
Avant de continuer... Les callbacks avec Kotlin
Un callback est une fonction qui est passée en paramétre d'une autre fonction.
kottin
1 fun dosomething(callback: () -> unit) {
2 calback()
2}
Fonctionne dans le code, mais également dans vos composants Compose.
kottin
1 @Composable
2 fun MyButton(onclick: () -> Unit) {
3 sutton(onClick = onClick) {
4 Text ("Cliquez ici")
5 y
6}
Intéragir avec l'utilisateur est un élément clé d'une application. Sur Android, au-dela dés
onClick que nous avons vu, nous avons également accés a d'autres interactions :
+ Toast : Un message qui s'affiche a I'écran.
+ Snackbar : Un message qui s'affiche en bas de I'écran.
+ Dialog : Une fenétre qui s'affiche a I'écran.
Les Toast
Nous avons une acti
code, celui-ci est presque vide. Je vous propose de la modifier, en premier lieu nous
é qui pour I'instant ne fait pas grand-chose. Si vous regardez le
allons ajouter un message au lancement de celle-ci.
Un message simple sur Android s'appelle un Toast :
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 30170roinsi2025 09-46 ‘TP Android Compose | Cours
LUT UTS ere e
Ajouter un toast directement dans le setContent de votre Mainactivity :
Vous pouvez utiliser la completion de votre IDE, toast puis tab.
TIP
Les toasts sont rapides et simples a mettre en place. Cependant, ils ne sont pas trés beaux.
C'est pour ¢a que nous les utiliserons principalement que pour « les informations de tests ou
sans grandes importances ».
Le code a ajouter :
kot
// Récupération du context
2 val context = LocalContext. current
{ Toast.makeText (context, "Je suis un Toast", Toast.LENGTH_LONG). show();
Evidemment, le texte du toast est a internationaliser.
Les Snackbars
Les snackbars sont des messages qui s'affichent en bas de I'écran. IIs sont plus beaux
que les toasts et permettent d'ajouter des actions.
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. html 31170roinsi2025 09-46 ‘TP Android Compose | Cours
Vous devez lancer le scan
Documentation :
[https://developer.android.com/develop/ui/compose/components/snackbar]
Des durées d'affichage différentes
Plusieurs options s'offre @ vous :
© Snackbar. LENGTH_SHORT
© Snackbar. LENGTH_LONG
© Snackbar. LENGTH_INDEFINITE
Rendre un bouton cliquable
Pour rendre un bouton cliquable, nous allons utiliser le paramétre onClick
kot
Button(onClick = { /* Action */ }) {
2 Text ("Cliquez ici")
* onClick : L'act
Na réaliser lors du clique sur le bouton.
Ici, nous avons une action vide (en commentaire /* Action */ ). Nous allons maintenant
ajouter une action qui va afficher un toast.
hitpsieous.brosseas.ovhiplandroidlcomposetandroid-base. htmlroinsi2025 09-46, ‘TP Android Compose | Cours
A faire
Je vous laisse modifier le code pour afficher le toast uniquement lors du clique sur le
bouton.
Les dialogues
Les dialogues sont des fenétres qui s'affichent a I'écran. lls permettent de demander une
confirmation a l'utilisateur, de lui demander de saisir des informations, etc.
Elles sont trés utilisées dans les applications mobiles, car elles sont tres rapides 4 mettre
en place :
Vousnune
u
2
3
4
as
16
v7
18
19
2e
21
22
23
24
kattin
val context = LocalContext.current
AlertDialog(
onDismissRequest = { /* Action */ },
title = { Text("Titre") },
text = { Text("Contenu") },
confirmButton = {
Button(
onclick = {
Toast.makeText(context, "Clic sur le bouton", Toast. LENGTH_LONG)
4
Text ("Confirmer")
hb
dismissButton = {
Button(
onClick = {
Toast.makeText (context, "Clic sur le bouton", Toast.LENGTH_LONG)
rf
Text ("Annuler")
—‘———D »
onDismissRequest ‘ L'action a réaliser lors de la fermeture de la fenétre.
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil 33170roinsi2025 09-46, ‘TP Android Compose | Cours
+ title : Le titre de la fenétre.
+ text : Le contenu de la fenétre.
+ confirmButton : Le bouton de confirmation.
+ dismisssutton : Le bouton de fermeture.
A faire
Je vous laisse mettre ce dialogue dans le setcontent de votre Mainactivity .
Lancer votre application et tester le dialogue. Normalement, vous devriez voir une fenétre
s'afficher avec un titre, un contenu et deux boutons.
Conditionner l'affichage d'un élément
Le dialogue est un bon exemple pour conditionner l'affichage d'un élément. En effet, il est
possible de conditioner l'affichage d'un élément en fonction d'une condition.
ketlin
1 var showDialog by remember { mutableStateof(false) }
2
3 if (showDialog) {
4 // Afficher le Dialog
5}
7 Button(onClick - { showDialog - true }) {
Text("Afficher le Dialog")
Dans cet exemple, nous avons une variable showbialog qui est initialisée 4 false .
Lorsque l'utilisateur clique sur le bouton, la variable showbialog passe true et le
dialogue s'affiche.
MutableState
La variable showoialog est une variable d'état. Cela signifie que Compose va observer cette
Variable et mettre a jour l'interface en fonction des changements.
A faire
-ntps:ifcours brosseau.ovhiplandroiaicompose/android-base. hil arr‘010312026 09:46 TP Anois Compose | Cours
Modifier votre code pour que le dialogue ne s'affiche que si 'utilisateur clique sur le logo
de 'ESEO.
Rendre un logo cliquable ?
Pour rendre un logo cliquable, il suffit d'ajouter un clickable sur le composant Inage .
kotlin
1 Image’
2 painter = painterResource(R.drawable.logo_eseo),,
3 contentDescription = "Logo £SE0",
4 nodifier
Modifier.size(128.dp).clickable (
5 /* Retion */
Bien que pratique, cette méthode n'est pas la plus propre. En effet, d'un point de vue de
laccéssibilité, il est préférable d'utiliser un bouton.
Les régles de Google
N'oubliez pas, Google propose des régles pour vous aider dans le développement.
Exemple pour les dialogues :
+ La documentation
Structure, organisation d'un code avec plusieurs Screens
Avant compose, une application Android était composée de plusieurs Activity qui
permettaient de naviguer entre les différents écrans de I'application.
Avec Compose, nous allons utiliser un autre systéme : les screen . Chaque Screen est
une interface qui va étre affichée a I'écran. Nous allons pouvoir naviguer entre les
différentes screen en utilisant un Router que nous allons appeler un Naviiost
1 val navController = rememberNavController() ae
2
3 Nawiost(
4 modifier = Nodifier.padéing(iaerPadding),
navController = navController,
startDestination = “screeni"
7
-ntps:fcours brosseau.ovhiplandroiaicompose/android-base. hil 35070
Vous aimerez peut-être aussi