• 20 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 27/04/2023

Créez une seconde activité

Dans la première partie de ce cours, nous avons créé une première activité, permettant de récupérer le prénom de l'utilisateur et de démarrer le jeu. Dans cette deuxième partie, nous allons créer une seconde activité. Cette activité permettra d'afficher le contenu du jeu. Elle sera démarrée par la première activité lorsque l'utilisateur cliquera sur le bouton de lancement du jeu.

Vous vous demandez sûrement comment fonctionne le jeu ! C'est une demande légitime. C'est très simple : TopQuiz va poser une série de quatre questions à l'utilisateur, choisies aléatoirement dans une banque de plusieurs questions. Pour chaque question, il aura le choix entre quatre réponses possibles. Par exemple :

Visualisez l'aperçu de notre superbe application
Visualisez l'aperçu de notre superbe application

Configuration de la nouvelle activité

Création des fichiers

Pour rappel, une activité est généralement composée d'une classe Java et de son fichier layout associé. Positionnez-vous dans l'arborescence de votre projet, au niveau du répertoire dans lequel est contenue la classe MainActivity créée précédemment. Faites un clic droit dessus, puis sélectionnez l'option New > Activity > Empty Activity.

Dans l'arborescence, allez dans New > Activity > Empty Activity pour créer votre fichier
Dans l'arborescence, allez dans New > Activity > Empty Activity pour créer votre fichier layout

Une nouvelle fenêtre s'affiche, vous permettant de configurer le nom de l'activité et de son fichier layout. Sachant que cette activité va gérer le jeu, nous l'appellerons logiquement GameActivity. Laissez cochée la case Generate Layout File : le nom du fichier layout généré doit être game_activity. Cliquez sur le bouton Finish.

Configurez le nom de l'activité et de son fichier layout
Configurez le nom de l'activité et de son fichier layout

Création du layout

L'interface de cette nouvelle activité va contenir les éléments suivants :

  • l'intitulé de la question posée à l'utilisateur ;

  • les quatre réponses possibles, chacune représentée par un bouton.

Pour ce faire, ouvrez le fichier activity_game.xml situé dans le répertoire res/layout, puis modifiez le code comme suit :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:id="@+id/game_activity_textview_question"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="8dp"
android:layout_weight="4"
android:background="@color/teal_700"
android:gravity="center"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
tools:text="Question?" />
<Button
android:id="@+id/game_activity_button_1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_margin="8dp"
android:layout_weight="1"
android:padding="16dp"
android:textSize="20sp"
tools:text="Answer1" />
<Button
android:id="@+id/game_activity_button_2"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_margin="8dp"
android:layout_weight="1"
android:padding="16dp"
android:textSize="20sp"
tools:text="Answer2" />
<Button
android:id="@+id/game_activity_button_3"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_margin="8dp"
android:layout_weight="1"
android:padding="16dp"
android:textSize="20sp"
tools:text="Answer3" />
<Button
android:id="@+id/game_activity_button_4"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_margin="8dp"
android:layout_weight="1"
android:padding="16dp"
android:textSize="20sp"
tools:text="Answer4" />
</LinearLayout>

Vous devez déjà être familier avec certains attributs, tels que les marges, le texte à afficher ou les identifiants assignés aux éléments. Notez bien que les identifiants sont obligatoires, ce sont eux qui permettront de référencer les éléments depuis le code, et de les mettre à jour dynamiquement. Néanmoins, d'autres doivent vous interpeller.

L'attribut android:textSize permet d'indiquer une taille spécifique pour la police. L'unité à utiliser est le sp (alors que c'est le dp pour les distances, rappelez-vous). N'hésitez pas à vous référer à cette page du Material Design pour avoir les idées plus claires.

L'attribut android:textColor permet de spécifier quelle police de couleur utiliser, pour un champ texte ou un bouton.

L'attribut android:background prend le même paramètre que textColor, mais permet pour sa part de préciser la couleur d'arrière-plan de la majorité des éléments (bouton, champ texte, layout, etc.).

L'attribut android:textStyle permet de préciser le style à utiliser pour une police. Vous avez le choix entre bold (gras), italic (italique) ou normal, la valeur par défaut.

Enfin, le dernier attribut très important est android:layout_weight. C'est un attribut spécifique aux enfants d'un LinearLayout. Il permet de préciser le poids d'un élément par rapport aux autres. Je m'explique. Si vous assignez un poids identique pour tous les éléments (par exemple 1), tous ces éléments auront la même taille. Si vous assignez un poids égal à 2 à l'un des éléments, alors sa taille sera deux fois plus importante que celle des autres. Essayez de faire varier le poids de l'élément TextView du code ci-dessus, afin de voir le résultat. N'hésitez pas à consulter cette page pour avoir une explication plus détaillée.

Le résultat produit doit être identique à la capture ci-dessous. Amusez-vous à modifier les différents attributs pour donner un style qui vous est propre !

L'interface de la nouvelle activité que vous devriez obtenir
L'interface de la nouvelle activité que vous devriez obtenir

Branchement des widgets

Maintenant que les éléments sont définis dans l'interface, il est nécessaire de les référencer dans le code. Sachant que vous devenez des experts Android, cela ne devrait pas vous poser de problème ! Un petit coup de pouce pour les plus étourdis :

  • déclarez une variable membre privée pour chaque élément que vous souhaitez référencer (vous devriez avoir une variable de type TextView et quatre de type Button) ;

  • dans la méthode onCreate, branchez chaque widget en utilisant la méthode findViewById().

Lancement de la nouvelle activité

C'est bien beau tout ça, mais comment lancer cette nouvelle activité ? En cliquant sur le bouton Let's Play de l'écran d'accueil ! Certes, mais cela ne vous avance guère.

Rappelez-vous : nous avions commencé à implémenter la méthode onClick dans la classe MainActivity. Cette méthode est appelée à chaque fois que l'utilisateur appuie sur le bouton. Et c'est à cet endroit précis que nous allons démarrer notre nouvelle activité.

Pour démarrer une activité, Android propose la méthode startActivity(). Cette méthode propose plusieurs signatures. Celle qui nous intéresse est la suivante (c'est la plus simple) :

public void startActivity(Intent intent)

Cette méthode permet de communiquer avec le système d'exploitation Android en lui demandant de démarrer une activité donnée. Pour préciser quelle activité lancer, un objet spécifique est utilisé : Intent. Lorsque la méthode startActivity() est appelée, l'objet interne Android ActivityManager inspecte le contenu de l'objet Intent et démarre l'activité correspondante.

Lorsque la méthode startActivity() est appelée, l'objet interne Android ActivityManager inspecte le contenu de l'objet Intent et démarre l'activité correspondante.
Lorsque la méthode startActivity() est appelée, l'objet interne Android ActivityManager inspecte le contenu de l'objet Intent et démarre l'activité correspondante.

L'objet Intent, quant à lui, peut être créé de différentes façons. Parmi les nombreux constructeurs de la classe Intent, celui qui nous intéresse est le suivant :

public Intent(Context packageContext, Class<?> cls)

Le premier paramètre correspond au contexte de l'application. Pour faire simple, cela correspond à l'activité appelante (car la classe Activity hérite de la classe Context). Le second paramètre correspond à la classe de l'activité à démarrer.

Je vous l'accorde, cela peut sembler bien compliqué pour démarrer une simple activité. Mais dans les faits, cela se traduit simplement par les deux lignes suivantes :

Intent gameActivityIntent = new Intent(MainActivity.this, GameActivity.class);
startActivity(gameActivityIntent);

Ajoutez ces deux lignes dans la méthode onClick, lancez l'application, cliquez sur le bouton, et vous devez voir apparaître la nouvelle activité. Pour revenir à l'activité précédente, utilisez le bouton de retour Android en bas à gauche de l'écran.

Récapitulons en vidéo

Retrouvez ces différentes étapes dans la vidéo ci-dessous :

En résumé

  • Pour créer une nouvelle Activity dans un projet, il faut : 

    • créer les fichiers ;

    • créer le layout en XML ;

    • modifier le Manifest pour y ajouter un élément “<activity>” portant son nom.

  • Les Intents permettent de lancer de nouvelles Activity grâce à la méthode startActivity().

Votre deuxième activité est maintenant créée. Dans le prochain chapitre, nous nous pencherons sur une notion d'architecture logicielle ; l'architecture Modèle-Vue-Contrôleur.

Et si vous obteniez un diplôme OpenClassrooms ?
  • Formations jusqu’à 100 % financées
  • Date de début flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous
Exemple de certificat de réussite
Exemple de certificat de réussite