Université de Kairouan ISIG – Kairouan Département d'Informatique A.U. 2021/2022 TP2 – Programmation avec Android Hela MALOUCHE Exercice 1 : 1) Créer une application nommée « Test » 2) Modifier le layout ConstraintLayout en LinearLayout, puis supprimer tout ce qui se rattache au tag app. 3) Insérer un champ de texte (EditText) et 3 boutons (Button) avec les IDs repectivement btnAjout, btnSupression, btnModification, Les textes de ces boutons sont respectivement "Ajouter", Supprimer", "Modifier". 4) Toutes les vues ont les 2 propriétés suivantes : a. android:layout_width="match_parent" b. android:layout_height="wrap_content" Exercice 2 : 1) Créer une application nommée « MonApp » 2) Remplacer la balise XML androidx.constraintlayout.widget.ConstraintLayout par LinearLayout, puis supprimer tout ce qui se rattache au tag app. 3) Rajouter l’attribut android:orientation et mettre sa valeur à “horizontal” 4) Supprimer l’élément <TextView> 5) Rajouter un champ de saisie. Rajouter un élément dans le <LinearLayout> tel que : 6) Après la modification du code que nous venons de faire, un message d’erreur sera affiché qui vous indiquera que le symbole str_chp_saisie n’est pas connu. Proposer une solution. 7) Dans le fichier du layout rajoutez un élément <Button> tel que - Dans le fichier strings.xml rajoutez une chaine de caractère qui s’appelle "btn_envoyer" et qui vaut Envoi. - Ajouter pour ce bouton l’ID : "btnEnvoi" 8) On souhaite que le champ de saisie occupe toute la largeur de l’écran qui reste après le positionnement du bouton, - On va spécifier un poids (layout_weight) de 1 au EditText et une largeur de 0. 9) Compilez et lancez l’application. Tapez un texte et remarquez comment la taille du champ de saisie s’adapte à la longueur du texte. Rappel : Notion d’Activity Une activité est la composante principale pour une application Android. Elle représente l’implémentation métier dans une application Android, permettant de gérer l’ensemble des vues et ressources. Une activité peut être avec ou sans interface utilisateur. Il est possible d’avoir plusieurs activités dans le même programme. Elle doit toujours être déclarée dans le fichier AndroidManifest.xml. Une activité est soumise à plusieurs évènements. Chaque événement est représenté dans une méthode. Les différentes méthodes de cycle de vie d’une activité sont : • onCreate() : Cette méthode est appelée à la création d’une activité. Elle permet de l’initialiser. C’est ici que l’interface graphique est spécifiée. • onStart() : Cette méthode est appelée quand l’application est démarrée. • onResume() : Cette méthode est appelée quand l’application passe (ou repasse) en avant-‐‑plan. • onPause() : Appelée quand l’application passe en arriere--‐‑plan et qu’une autre application se met devant. • onStop() : Appelée quand l’application n’est plus visible. • onRestart() : Appelée quand l’application redevient visible. • onDestroy() : Appelée quand votre application est fermée par le système à cause d’un manque de ressources, ou par l’utilisateur à l’utilisation d’un finish(). La figure suivante illustre le cycle de vie d’une application Android : Il est donc permis de spécifier un comportement pour chacun de ces évènements. Pour cela, il suffit de rajouter les méthodes correspondantes (de la même manière que pour la méthode onCreate) déjà générée par ADT (Android Development Tools). Exercice 4 : 1) Créer une application nommée « Test » 2) Remplacer la balise XML androidx.constraintlayout.widget.ConstraintLayout par LinearLayout, puis supprimer tout ce qui se rattache au tag app. 3) Générer les méthodes correspondant à chacun des évènements listés dans le cycle de vie d’une activité. 4) Nous désirons voir le comportement de l’activité pour chacun de ces évènements. Pour cela, chaque méthode va afficher son nom. Indication : Utiliser le code suivant pour l’affichage : Toast helloToast = Toast.makeText(this, "message à afficher", Toast.LENGTH_LONG); helloToast.setGravity(Gravity.CENTER, 0, 0); helloToast.show(); 5) Dans la méthode onCreate, commenter la ligne setContentView(R.layout.main); et la remplacer par : TextView tv = new TextView(this); tv.setText("Hello, Android"); setContentView(tv); Que constatez--‐‑vous ? 6) Annuler l’opération de la question 3). Dans le code du fichier main.xml, ajouter un bouton et un champ de saisie. Associer un identifiant et un titre à votre bouton : <EditText android:id="@+id/Saisir_value" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:id="@+id/boutonAfficher" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Afficher" /> 1) Ajout d’un Comportement au bouton : ❖ Créer un attribut dans votre activité (.java) de type Button : private Button bAfficher; ❖ Dans la méthode onCreate() : - Initialiser l’attribut bAfficher en lui associant le bouton créé dans le main.xml : bAfficher = (Button) findViewById(R.id.boutonAfficher) ; - Associer un comportement à votre bouton : bAfficher.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //comportement de votre bouton } }); 8) Modifier le comportement de votre bouton pour qu’il affiche J’ai été cliqué ! pendant 2 secondes dans un Toast, quand il est cliqué. Indication : Modifier l’instruction d’affichage pour qu’elle devienne comme suit : Toast helloToast = Toast.makeText(MainActivity.this, "message à afficher", Toast.LENGTH_LONG); helloToast.setGravity(Gravity.CENTER, 0, 0); helloToast.show(); 9) Création d’une nouvelle activité Pour créer une nouvelle activité, il faut suivre les étapes suivantes : - Créer une nouvelle classe dans votre package qui hérite de la classe Activity. - Créer un nouveau fichier layout, et y ajouter les éléments graphiques désirés. - Associer ce fichier layout à votre activité dans la méthode onCreate(). - La nouvelle activité est ajoutée dans le fichier Manifest. Remarque : Dans le manifest, changer l’emplacement de la balise <intent-filter> selon le besoin. Cette balise permet, grâce à son action android.intent.action.MAIN, de spécifier que l’activité en cours est l’activité de départ de l’application. Travail à faire : Créer une nouvelle activité qu’on nommera ClicActivity, contenant uniquement un champ de texte de type TextView. Attribuer à cet élément l’ID = clicText. Ecrire dans ce champ de texte la chaîne : « J’ai cliqué sur le bouton ! ». Exécuter cette activité. 10) Passage d’une activité à une autre Le passage entre deux activités requiert un Intent. Un Intent est un conteneur d’information. Il permet de passer des messages entre deux activités. L’activité appelante pourra ainsi transmettre des informations à l’application appelée, ainsi qu’au système Android. Il existe plusieurs manières de créer un Intent. Nous allons choisir la suivante : Intent intent = new Intent(this, ClicActivity.class); startActivity(intent); Pour démarrer une autre activité, il faut lancer la méthode startActivity(Intent i) de la classe Activity initiale. Travail à faire : a) Dans le Intent, le contexte sera MainActivity.this, et la classe cible sera ClicActivity.class. b) Pour démarrer l’activité, la méthode startActivity doit être appelée à partir de l’objet MainActivity.this 11) Récupération de messages entre activités ➢ Pour passer un message à une activité, on doit ajouter des Extras aux Intents. Par exemple : myIntent.putExtra(<clé>, <chaîne>); Cette instruction va passer la chaîne de caractère chaîne dans une variable appelée clé à l’activité cible de l’Intent. • • La clé est l'identifiant, tu peux mettre ce que tu veux, c'est simplement une chaîne de caractères ; La chaine est la valeur de ta donnée. Elle sera associée à la clé. ➢ Dans l’activité cible, on récupère cet Extra en utilisant : getIntent().getStringExtra(<clé>) ; Travail à faire : Modifier vos activités de manière à ce que : a) L’utilisateur saisit une chaîne dans le champ de saisie de MainActivity b) L’utilisateur clique sur le bouton c) ClicActivity est chargée, et le champ de texte TextView contient la chaîne qu’a saisi l’utilisateur. Indication : Nous allons récupérer notre chaine à partir de l’élément EditText avec la méthode findViewById : editText = (EditText) findViewById(R.id.EditTextId); Il va ensuite falloir récupérer la String qui a été rentrée dans l'EditText. Attention, l'EditText n'est pas capable de nous retourner directement la String qui a été saisie. Il faut d'abord récupérer le Text puis le convertir en String : String str = editText.getText().toString(); Dans notre exemple, nous avons ajouté la String comme extra, ce qui doit nous donner : Intent intent = new Intent (this, <classe de l’activité cible>); intent.putExtra("Mytext", str); startActivity(intent); Dans notre seconde activité, dans la méthode onCreate et juste après l'appel de la méthode setContentView, nous allons pouvoir récupérer nos extras avec l’instruction suivante. str = getIntent().getStringExtra("Mytext");