Académique Documents
Professionnel Documents
Culture Documents
PROGRAMMATION MOBILE
Centre d'excellence
AUTOMNE 2023
Filière ADIA
Objectfs d’apprentssage
• Avoir un premier contact avec la programmaton mobile sous Android
• Réaliser une première applicaton avec Android Studio
• Comprendre l’arborescence d’un projet Android
• Comprendre l’environnement d’exécuton
• Comprendre la noton d’agencement des composants (Layout)
• Comprendre les diférentes façons de créer un composant de base (XML,
Programmaton, Graphique)
• Utliser les composants à l’aide de leur identfant
• Interacton avec l’applicaton
Page 1 sur 33
Choisissez le modèle(template) Empty Views Actvity et cliquez sur Next. Une actvité
sera créée avec votre applicaton. Une actvité est une des composantes de base
d'Android qui vous permet de créer vos interfaces applicatves.
Remplir les champs Applicaton Name et package name selon le modèle suivant :
Page 2 sur 33
Important : le nom de l’applicaton doit commencer par une majuscule. C’est ce nom
qui apparaîtra pour l’utlisateur.
L'onglet Projet se trouve dans le panneau vertcal à gauche de votre fenêtre dans
Android Studio.
Cliquez ensuite sur l'onglet Design, si ce n'est pas déjà sélectonné, qui se trouve
complètement à droite.
Page 3 sur 33
Dans le volet Projet > Android, développez le dossier app de l’applicaton. À l’intérieur du
dossier se trouvent trois ou quatre sous-dossiers :
Page 4 sur 33
manifests, java, res et dans certains cas generatedJava qui content des fchiers générés
par Android Studio à la constructon de l'applicaton. Tout le code de votre applicaton se
trouve dans le répertoire java. Les ressources de votre applicaton se trouvent dans le
répertoire res.
Le dossier java content tout le code Kotlin principal d’une applicaton Android.
Il existe des raisons historiques pour lesquelles votre code Kotlin apparaît dans le dossier
java. Cete conventon permet à Kotlin d’interagir en toute transparence avec le code
écrit dans le langage de programmaton Java, même dans le même projet et applicaton.
Les fchiers de classe de votre applicaton sont contenus dans trois sous-dossiers, comme
le montre la fgure ci-dessus. Le dossier ca.qc.cgodin.laboratoire1 content présentement
le fchier MainActvity.kt qui est dans ce cas la porte d'entrée de votre applicaton. Les
deux autres sous-dossiers sont utlisés à des fns de test.
Page 5 sur 33
Les ressources d'une applicaton Android sont du contenu statque. Elles incluent des
images, du texte, des styles, etc. Les applicatons Android séparent le plus que possible le
code des ressources. Cela permet de trouver assez facilement les textes ou icones utlisés
dans l'interface utlisateur. En outre, lorsque vous modifez l’un de ces fchiers de
ressources, la modifcaton prend efet partout où le fchier est utlisé dans l’applicaton.
Les fchiers ressources sont classés dans des sous-dossiers selon leur type dont voici
quelques sous-dossiers :
Page 6 sur 33
o layout : descriptons d’interfaces graphiques défnies dans des fchiers au format
xml. Noter la présence du fchier actvity_main.xml pour notre première
applicaton.
2. Notez que MainActvity est référencé dans l'élément <actvity>. Toute actvité (et plus
tard les Services, les Fournisseurs de Contenus (Content Provider), les récepteurs
d'événements (Broadcast Receivers)) faisant parte de votre applicaton doit être
déclarée dans le fchier manifest.
Page 7 sur 33
3. Notez l'élément <intent-flter> dans <actvity>. Les éléments <acton> et <category>
indiquent à Android où commencer l'applicaton quand l'utlisateur clique sur l'icône de
démarrage.
Le manifeste est l'endroit où vous aurez à défnir les permissions de votre applicaton
telles qu'accéder aux contacts de votre téléphone, à la caméra, etc.
Un fchier build.gradle est généré pour chaque module d’un projet Android.
Un fchier build.gradle est aussi généré pour le projet au complet (le module
d’applicaton app). C’est ce fchier qui nous intéresse. Ce fchier content les
dépendances et les paramètres de confguraton de l’applicaton (compiledSdkVersion,
applicatgionId, minSdkVersion, targetSdkVersion). Vous aurez assez souvent à le
modifer.
Page 8 sur 33
Ouvrez le fchier build.gradle(Project: Laboratoire1).
Vous allez trouvez les confguratons pour le projet au complet, pour tous les modules.
Une variable déclarée dans ce fchier comme kotlin_version par exemple peut être utlisé
dans un fchier build.gradle de n'importe quel module du projet. Vous aurez rarement à
modifer ce fchier. Le bloc buildScript de ce fchier vous permet de défnir les
dépendances et les référentels (repositories) communs à tous les modules.
Chaque module dans un projet Android Studio doit contenir un fchier build.gradle qui
permet de faire des confguraton propres à ce module. Vous aurez souvent à manipuler
ce fchier pour ajouter des dépendances à vos projets.
Les diférentes ressources de votre projet se trouvent dans le répertoire res (mis pour
ressources). Vous pouvez accéder à ces fchiers soit à partr d'un fchier Java/Kotlin, soit
à partr d'un fchier XML.
Page 9 sur 33
[package].R.type.nom
R.mipmap.icon
Cete syntaxe fonctonne pour toutes les ressources à l’excepton de celles du dossier
res/values. Dans ce cas, le type de la ressource est le nom de la balise défnissant la
ressource et le nom de la ressource est le nom spécifé par l’atribut name de la balise
de la ressource.
Exemples : R.string.message
R.color.bleu
@[package]type/nom
Exemples : @mimmap/icon
@layout/actvity_main
@string/message
@color/bleu
3. Exécuton de l’applicaton
Le SDK propose un émulateur Android Virtual Device (AVD), permetant de tester les
applicatons en local pour diférents types de périphériques.
Page 10 sur 33
Pixel 4XL) avec les optons suivantes: Release Name(R), API Level (30), ABI (x86), Target
(Android 11.0). Télécharger l'image au besoin. Laissez les optons par défaut au prochain
écran et cliquez sur Finish pour créer votre pour créer votre téléphone virtuel.
Suivez la même approche pour créer une tablete virtuelle (AVD Name: Tablet Pixel C)
Dans ce cas, il faut connecter l’appareil intelligent à l’ordinateur via un câble USB. Il faut
s’assurer que le pilote adéquat a été installé auparavant. Dans Paramètres/Optons de
développement de votre tablete, vérifer que débogage USB est coché. Sinon dans
Paramètres->À propos du téléphone (de la tablete)->Informatons sur le logiciel,
appuyez 7 fois sur Numéro de version.
Cliquez sur Run->Run App ou cliquez sur le bouton Run dans la barre d'outls pour
exécuter l'applicaton. Sélectonnez le téléphone dans un premier temps et ensuite la
tablete dans la barre d'outls pour exécuter votre applicaton sur les deux périphériques.
Page 11 sur 33
o Les résultats des exécutons devraient ressembler à ceci :
4. Modifcaton de l’applicaton
- Dans le dossier ressource (res), double-cliquez sur actvity _main.xml qui se trouve dans
le sous-dossier layout. Noter la présence des trois onglets (Code, Split et Design).
Vérifer que c’est l’onglet Design qui est actvé.
Page 12 sur 33
- Metez la couleur(textColor) du texte à rouge(red). Défnissez la couleur rouge dans le
fchier values/colors.xml en lui ajoutant la ligne suivante avant la fermeture de la balise
</resources> queston
<color name="red">#FF0000</color>
Noter les changements dans l’interface graphique (onglet Design) et dans l'éditeur de
code actvity_main.xml (onglet Code).
Note : Ce n’est pas une bonne pratque de placer directement une chaine dans ce
fchier. Pour corriger ce problème, nous allons placer la chaine dans le fchier strings.xml
et y faire référence.
Pour que cete valeur soit efectve pour l'atribut android:text, il faut donc ajouter la
variable welcome_msg dans le fchier strings.xml.
Page 13 sur 33
5. Ajout d’une zone de texte (TextView) avec des images en utlisant XML
Ouvrez le fchier actvity_main.xml et cliquez sur l'onglet Code pour voir le code XML. Notez
que le Layout créé par défaut par Android Studio est un ConstraintLayout. Les composants y
sont disposés les uns par rapport aux autres.
Vous devez ici ajouter les contraintes manuellement, d'où la nécessité de metre le bouton
Enable Autoconnecton to parent à of. Localisez le bouton dans la barre d'outls.
- Utlisez la barre d'outls pour metre la marge par défaut à 16dp. (La valeur par défaut
étant de 0dp.)
Page 14 sur 33
Lorsque vous metez la marge par défaut à 16dp, les futures contraintes que vous rajouterez
plus tard seront créés avec cete marge. Vous n'aurez donc pas besoin d'ajouter la marge à
chaque fois que vous ajoutez une contrainte.
- Cliquez sur le textView en mode Design et observez l'inspecteur de vue suivant dans le
volet Atributes.
L'inspecteur de vue comprend des commandes pour les atributs de mise en page tels que
les contraintes, les types de contraintes, le biais de contrainte et les marges de vue. Cet
inspecteur n'est disponible que pour les vues compris dans un ConstraintLayout.
Pour ajuster le biais, vous pouvez faire glisser les curseurs de biais dans
l'inspecteur de vue. Faire glisser un curseur de biais modife la positon de la vue le long de
l'axe.
- Ajoutez des marges au textView
Notez que dans l'inspecteur de vue, les marges gauche, droite, supérieure et inférieure de la
vue texte sont 0. La marge par défaut n'a pas été ajoutée automatquement, car cete vue a
été créée avant que vous ne modifiez la marge par défaut.
Pour les marges gauche, droite et supérieure, sélectonnez 16dp dans le menu déroulant de
l'inspecteur de vue. Par exemple, dans la capture d'écran suivante, vous
ajoutez layout_marginTop, layout_marginStart layout_marginEnd.
- Ajouter des contraintes et des marges au textView
Wrap-Content : la vue s'étend uniquement autant que nécessaire pour contenir son
contenu.
Page 15 sur 33
• Fixed : vous pouvez spécifer une dimension comme marge de vue dans la zone de
texte à côté des fèches de contrainte fxe.
• Match Constraints : la vue s'agrandit autant que possible pour répondre aux
contraintes de chaque côté, après avoir pris en compte les propres marges de la
vue. Cete contrainte est très fexible, car elle permet à la mise en page de s'adapter aux
diférentes tailles et orientatons d'écran. En laissant la vue correspondre aux
contraintes, vous avez besoin de moins de mises en page pour l'applicaton que vous
créez.
1. Dans l'inspecteur de vue, remplacez les contraintes de gauche et de droite par Match
Constraints . (Cliquez sur la fèche pour basculer entre les types de contraintes.)
2. Dans l'inspecteur de la vue, cliquez sur le point Delete Botom Constraint dans le
carré pour supprimer la contrainte.
3. Passez à l'onglet Code. Extrayez la dimension correspondant au layout_marginStart
dans la ressource auquel vous donnez le nom margin_wide (Faites pointer la souris sur
la valeur 16dp, une ampoule jaune apparait. Cliquez sur l'ampoule et sélectonnez
Extract dimension resource.) queston
Faites la même approche pour la marge supérieure (top) et la marge de droite (end).
android:layout_marginStart="@dimen/margin_wide"
android:layout_marginTop="@dimen/margin_wide"
android:layout_marginEnd="@dimen/margin_wide"
Page 16 sur 33
Ajouter un font au TextView
Dans le panneau Atributes, faites une recherche sur fontFamily et sélectonnez la liste
<style name="whiteBox">
<item name="android:background">@android:color/holo_blue_dark</item>
<item name="android:textAlignment">center</item>
<item name="android:textSize">@dimen/box_text_size</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">@android:color/white</item>
Page 17 sur 33
<item name="android:fontFamily">@font/roboto</item>
</style>
Dans ce style, la couleur d'arrière-plan(android:background) et la couleur du texte
(android:textColor) sont défnies sur les ressources de couleur par défaut fournies par
Android. La police(android:fontFamily) est défnie sur Roboto. Le texte est centré et en
gras, et la taille du texte est box_text_size (24sp).
- Recherchez l'atribut text dans le panneau Atributes. (Choisissez celui-là sans icone de
clé)
Cliquez sur la pette barre latérale complètement à droite de l'atribut text pour ouvrir la
boite de dialogue Resources.
Cliquez sur le bouton "+" > "String value". Ajoutez la chaine de caractère "Cégep Gérald
Godin" avec comme nom de ressource txt_cgodin. Cliquez sur OK.
Metez vous en mode design. Dans la barre d'outls, cliquez sur le bouton "Device for
Preview", vous devez voir une liste de périphériques parmi lesquels le périphérique
Pixel qui est utlisé par défaut.
Exécutez votre applicaton. Vous devez voir une fenêtre similaire à celle-ci.
Page 18 sur 33
- Ajout d'un deuxième textView à notre interface
Cliquez sur le nouveau textView, puis maintenez le pointeur le point supérieur situé au
centre comme indiqué ci-dessous. On appelle ce point une poignée de contrainte. Vous
allez utliser ce point pour créer une contrainte reliant la parte supérieure du nouveau
textView au bas de l'ancien textVeiw.
Page 19 sur 33
Créez maintenant une contrainte de gauche:
Faites glisser la ligne de contrainte complètement vers le côté gauche de votre interface.
Vous pourriez aussi créer les contraintes en cliquant sur les icônes dans l'inspecteur
de vue comme indiqué ci-dessous. Lorsque vous créez une contrainte de cete façon, la
contrainte est atachée au parent ou à une vus plus proche.
Atribut Valeur
id tvName
layout_height 130dp
layout_width 130dp
style @style/whiteBox
text @string/votre_nom
Important : lors du développement d'applicatons du monde réel, utlisez des
contraintes fexibles pour la hauteur et la largeur de vos éléments d'interface utlisateur,
dans la mesure du possible. Par exemple,
utlisez match_constraintou wrap_content. Plus vous avez d'éléments d'interface
utlisateur de taille fxe dans votre applicaton, moins votre mise en page est adaptatve
pour diférentes confguratons d'écran.
Exécutez votre applicaton. Vous devez avoir une fenêtre similaire à la capture suivante:
Page 20 sur 33
- Créaton d'une chaine de 3 textViews
Vous allez maintenant ajouter une chaine de 3 textViews à coté du deuxième textView
disposés de façon vertcale l'un après l'autre. Les textViews feront parte d'une chaine.
Chaine: Défniton
Une chaine est un groupe de vues liées les unes aux autres par des contraintes
bidirectonnelles. Les vues au sein d'une chaine peuvent être répartes vertcalement ou
horizontalement. Par exemple, le diagramme suivant montre deux vues contraintes
l'une à l'autre, ce qui créée une chaine horizontale.
Tête de chaine
La première vue d'une chaîne s'appelle la tête de la chaîne. Les atributs défnis sur la
tête de la chaîne contrôlent, positonnent et distribuent toutes les vues de la
chaîne. Pour les chaînes horizontales, la tête est la vue la plus à gauche. Pour les chaînes
Page 21 sur 33
vertcales, la tête est la vue la plus haute. Dans chacun des deux diagrammes ci-dessous,
"A" est la tête de la chaîne.
Style de chaine
Les styles de chaîne défnissent la manière dont les vues chaînées sont répartes et
alignées. Vous stylisez une chaîne en atribuant un atribut de style à cete chaîne, en
ajoutant un poids ou en défnissant un biais sur les vues.
• Spread : Il s'agit du style par défaut. Les vues sont répartes uniformément dans
l'espace disponible, une fois les marges prises en compte.
Page 22 sur 33
Packed chain
• Weighed (Pondéré) : les vues sont redimensionnées pour remplir tout l'espace,
en foncton des valeurs défnies dans les atributs
layout_constraintHorizontal_weight ou layout_constraintVertcal_weight. Par
exemple, imaginez une chaîne contenant trois vues, A, B et C. La vue A utlise un
poids de 1. Les vues B et C utlisent chacune un poids de 2. L'espace occupé par
les vues B et C est le double de celui de la vue A , comme indiqué ci-dessous.
Page 23 sur 33
Ajoutez les chaines suivantes au fchier strings.xml.
<string name="txt_cours1">Android</string>
<string name="txt_cours2">ASP.Net</string>
<string name="txt_cours3">PHP</string>
Modifez les atributs des trois textView suivant ce tableau:
Vous devez voir présentement des erreurs de contraintes que vous aurez à corriger un
peu plus tard.
Créez maintenant une chaine avec les 3 textViews et contraignez la chaine à la hauteur
du deuxième textView.
Sélectonnez ensemble les trois nouveaux textViews. Faites ensuite un clic droit,
sélectonnez Chains > Create Vertcal Chain. Une chaine vertcale sera créée
automatquement s'étendant du textView1 au pied de page.
Page 24 sur 33
Ajoutez une contrainte s'étendant du haut du textView3 au sommet du texView2. La
contrainte supérieure existante sera automatquement remplacée par la nouvelle
contrainte. Vous n'avez pas à supprimer cete contrainte de façon explicite.
Observer que les 3 textViews sont maintenant limités en haut et en bas par rapport au
textView2.
Contraignez le côté droit des trois derniers textViews au côté droit de l'interface.
Modifez la valeur de l'atribut layout_width des trois derniers textViews à 0dp, ce qui
équivaut à Math Constraints.
Ajout de marge
Utlisez le panneau Atributes pour modifer les marges des 3 derniers textViews comme
suit. Utlisez la valeur @dimen/margin_wide pour ces marges.
textView4: début et fn, haut et bas (start et end, top et botom). Supprimer les autres
marges.
Page 25 sur 33
cliquez sur l'icône Orientaton for Preview (O) dans la barre d'outls et sélectonnez
Landscape (Paysage).
Dans cete parte, vous allez modifer l'applicaton pour la rendre un peu plus
dynamique et coloréDans cete parte, vous allez modifer l'applicaton pour la rendre un
peu plus dynamique et coloré
<item
Ouvrez le fchier MainActvity.kt, ajoutez la foncton makeColored() après la foncton
onCreate().
Page 26 sur 33
private fun makeColored(view: View) {
when (view.id) {
}
Ajoutez la ligne suivante à la fn de la foncton onCreate().
setListeners()
Exécutez votre applicaton. Au début, vous allez avoir un écran vide. Cliquez ou touchez
votre écran pour révéler les cases et l'arrière-plan.
Page 27 sur 33
Exercice
Utlisez des images à la place du texte avec une couleur d'arrière-plan. L'applicaton doit
révéler des images quand l'utlisateur appuie sur les textViews.
Astuce: Ajoutes les images dans le répertoire drawable pour en faire des ressources
pouvant être dessinées. Utlisez la foncton setBackgroundResource() pour défnir une
image comme arrière-plan d'un textView.
Exemple:
Parte 2
1. Copier le morceau de code suivant dans le fchier actvity_main.xml (onglet code) avant la
ligne </ConstraintLayout>
<TextView
android:id="@+id/textView_img"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBotom="8dp"
android:layout_marginLef="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:text="@string/message_textView_img"
android:textAlignment="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLef_toLefOf="parent"
app:layout_constraintRight_toRightOf="parent"
tools:text="@string/message_textView_img" />
A consulter pour mieux comprendre:
htps://developer.android.com/reference/android/support/constraint/ConstraintLayout.ht
ml
Page 28 sur 33
l'interface. Utliser la fenêtre de propriétés du nouveau composant pour comprendre les
diférents atributs.
3. Relancez votre applicaton.
5. Complétez le code XML ci-dessus pour metre le texte du nouveau textView en gras,
changer sa couleur à blanc, son arrière-plan à holo_blue_dark (déjà présent dans Android
Studio) et sa taille à 16sp (à insérer dans le fchier dimens.xml). Utlisez un style comme
dans le projet 1 pour ce faire. Le texte doit être centré.
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="htp://schemas.android.com/apk/res/android"
xmlns:app="htp://schemas.android.com/apk/res-auto"
xmlns:tools="htp://schemas.android.com/tools"
android:id="@+id/rootLayout"
6. Sauvegarder le fchier actvity_main_xml
Page 29 sur 33
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.actvity_main)
constraintLayout.addView(editText)
val constraintSet = ConstraintSet()
constraintSet.clone(constraintLayout)
constraintSet.connect(editText.id,ConstraintSet.TOP, R.id.textView_img, Constrai
ntSet.BOTTOM,20)
constraintSet.connect(editText.id,ConstraintSet.LEFT, ConstraintSet.PARENT_ID, C
onstraintSet.LEFT,20)
constraintSet.applyTo(constraintLayout)
}
Elle permet de récupérer l’identfant d’un composant de votre fchier xml afn de
l’utliser dans Kotlin.
Vous devez aussi ajouter la ligne suivante avant la ligne </ressources> à votre fchier
strings.xml pour pouvoir donner un identfant à votre editText.
8. Exécuter.
Votre applicaton doit ressembler à ceci : (le clavier apparaît de manière systématique
pour la saisie)
Page 30 sur 33
Vous devez avoir le résultat suivant quand vous exécutez à nouveau.
Modifez par la suite l'arrière-plan du textView pour avoir un fond bleu et le texte en
blanc comme suit:
Modifez l'applicaton pour que le champ EditText soit centré dans l'interface.
Le bouton Afcher doit être placé au milieu dans le sens horizontal et au milieu des deux
texview dans le sens vertcal
Page 31 sur 33
8. Interactons avec les composants
Nous allons programmer le clic sur le bouton Afcher, pour afcher le message saisi
dans la zone de texte editText créée par programmaton. Dans les deux cas qui suivent,
il faut d’abord récupérer l’identfant du bouton, puis programmer l’écouteur
d’événement qui réalisera l'afchage
Page 32 sur 33
Note: Dans les cas d’un bouton créé à l’aide de l’interface graphique, il est aussi
possible d’associer, dans la fenêtre de propriétés, un nom de méthode à
l’événement onClick, puis de programmer son corps dans l’actvité
correspondante. L’entête de la méthode serait :
public void nom_methode(View v).
btnAfcher.setOnClickListener{
val alertDialog = AlertDialog.Builder(this)
alertDialog.setTitle(" Texte saisi ");
alertDialog.setMessage(editText.text);
alertDialog.setIcon(android.R.mipmap.sym_def_app_icon);
alertDialog.setPositveButon("OK") { _, _ ->
val toast = Toast . makeText (this, "vous avez choisi OK",
Toast.LENGTH_LONG);
toast.show();
}
alertDialog.setNegatveButon("Annuler") { _, _ ->
val toast = Toast . makeText (this, "vous avez choisi Annuler",
Toast.LENGTH_LONG);
toast.show();
}
alertDialog.show()
}
À remetre
L'applicaton compressé dans un fchier zippé.
Au plus tard, Vendredi, le 01 décembre 2023 durant la séance du TP.
AUCUN RETARD ACCEPTÉ. LES EXERCICES REMIS EN RETARD NE SERONT PAS CORRIGÉS.
Page 33 sur 33