![Page 2: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/2.jpg)
Une application AndroidLes composants d’une application Android :
• Activity gère l’interface graphique
• ContentProvider gestion de données (fichers, bases de données SQLite)
• Service implémente les opérations exécutées en arrière plan
• Broadcast Receiver écoute les événements système
![Page 3: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/3.jpg)
Android studio
Création d’une application :
• File -> Project choisir le nom du projet, le domaine,
• choisir Phone and Tablet et le minimum SDK,
• choisir Blank Activity,
• choisir le nom de l’activité.
![Page 4: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/4.jpg)
Fichiers créés par Android studio
• AndroidManifest.xml
app/manifests/AndroidManifest.xml
• MonCompteur.java
la classe qui implémente les fonctionnalités de l’activité
• app/res/layout/activity_mon_compteur.xml
le fichier xml qui décrit le layout (le positionnements) des éléments qui compose l’activité
![Page 5: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/5.jpg)
Modification de layout
Le but est de modifier l’application par android.
Nous voulons une application qui affiche un compteur entier (valeur 0 initialement) et deux boutons, bouton plus et boutons moins.
En click sur le bouton plus augmente la valeur du compteur, un click sur le bouton moins décrémente la valeur de compteur.
![Page 6: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/6.jpg)
![Page 7: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/7.jpg)
Ajouter les boutons dans layoutAjouter les deux boutons dans le fichier layout soit à l’aide de la souris soit en ajoutant les balises xml: <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="PLUS" android:id="@+id/buttonPlus" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:textSize="30dp" android:onClick="plus" />
les attributs: • text — le texte affiché dans le bouton,• id — identifiant de bouton, noter @+id/ qui précède la valeur de l’identifiant• textSize - la taille du texte• layout_width et layout_height - largeur et hauteur, la valeur wrap_content signifie la
taille suffisante pour montrer le texte affiché dans le bouton. • onClick — la valeur de l’attribut donne le nom de la méthode (à ajouter dans Activity)
qui sera exécuté quand l’utilisateur clique sur le bouton.
![Page 8: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/8.jpg)
Deuxième bouton
La balise xml pour le deuxième bouton est similaire, mais avec un autre id, un autre texte à afficher.
Pour le deuxième bouton on n’aura pas d’attribut onClick , l’action associée au deuxième bouton sera impémentée avec un listener.
![Page 9: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/9.jpg)
TextViewTextView est un élément qui permet afficher un texte.
L’activité générée par android studio possède déjà un TextView, on change juste le texte affiché, la taille du texte et on ajoute un identifiant: <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0" android:textSize="35dp" android:layout_alignParentTop="true" android:id="@+id/text" />
Les attributs:• text — le texte affiché dans TextView• textSize - la taille• id — identifiant
![Page 10: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/10.jpg)
Le fichier layoutLe fichier layout rassemble tous ces éléments à l’intérieur de RelativeLayout (les classes …Layout sont des classes qui gèrent les positionnement des View). <?xml version="1.0" encoding="utf-8"?><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.zielonka.applicours.MonCompteur"> <TextView … android:id="@+id/text" /> <Button … android:id=« @+id/buttonPlus"/> <Button … android:id=« @+id/buttonMoins" /></RelativeLayout>
![Page 11: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/11.jpg)
Activitypublic class MonCompteur extends AppCompatActivity { TextView text; Button moins; int compteur; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mon_compteur); text = (TextView) findViewById(R.id.text); moins = (Button) findViewById(R.id.buttonMoins); moins.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { compteur--; text.setText(compteur + ""); } }); } public void plus(View view) { compteur++; text.setText(compteur + ""); }}
![Page 12: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/12.jpg)
L’activité démarre par l’appel à la méthode onCreate :
protected void onCreate(Bundle savedInstanceState) { }
La méthode setContentView crée à partir de la description donnée dans le fichier layout toutes les classes qui forment l’interface graphique
setContentView(R.layout.activity_mon_compteur)
Le paramètre de setContentView() est le nom de fichier layout (précédé par R.layout).
![Page 13: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/13.jpg)
Récupérer les références vers les objets qui constituent l’interface
La méthode
View findViewById(int id)
retourne la référence vers un élément d’interface graphique. L’argument de la méthode : id de l’objet assignée dans le fichier layout.
![Page 14: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/14.jpg)
Donc si dans le fichier layout on a : <TextView . . . android:id="@+id/text" />
<Button . . . android:id=« @+id/buttonPlus" />
alors dans java
TextView text; Button moins;
text = (TextView) findViewById(R.id.text); moins = (Button) findViewById(R.id.buttonMoins);
![Page 15: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/15.jpg)
Dans
android:id="@+id/text"
• @ indique une ressource • + indique la première occurrence • text — le nom de l’identifiant à choisir à votre guise
![Page 16: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/16.jpg)
Associer un listener à un bouton
moins.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { compteur--; text.setText(compteur + ""); }});
![Page 17: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/17.jpg)
Associer une méthode à un bouton (sans listener)
Au lieu d’installer un listener on peut spécifier dans l’attribut android:onClick le nom de la méthode que Andoid appelle quand l’utilisateur clique sur le bouton:
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="PLUS" android:id="@+id/buttonPlus" android:textSize="30dp" android:onClick="plus" />
La valeur de l’attribut onClick donne le nom de la méthode qui est exécutée si on clique sur le bouton. La méthode correspondante implémentée dans Activity
public void plus(View view) { compteur++; text.setText(compteur + "");}
![Page 18: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/18.jpg)
Sauvegarde de l’état de l’activité
Quand on change la position de l’appareil mobile (horizontale <—> verticale) l’activité courante est détruite et reconstituée avec l’appel à onCreate().
De même façon, si une activité A est exécutée et une autre activité B démarre, l’activité A est détruite (l’objet Activity de A est détruit). Si on revient avec le bouton BACK vers l’activité A l’objet correspondant à l’activité A sera reconstruit et la méthode onCreate() de A exécutée.
Si on ne fait rien les valeurs de variables locales de A (l’état de l’objet) ne seront pas préservées.
![Page 19: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/19.jpg)
Dans notre exemple il faut préserver la valeur de compteur.
On ajoute dans Actvity la méthode : @Overrideprotected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("compteur", compteur);}
La méthode onSaveInstanceState()est appelée quand l’objet Activity est détruit par Android. Mettez dans le Bundle les valeurs à sauvegarder sous forme (clé, valeur) en utilisant différentes méthodes put de Bundle. Le paramètre clé est de type String.
Préserver l’état de Activity avec un Bundle
![Page 20: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/20.jpg)
Récupérer les valeurs sauvegardées dans Bundle dans la méthode onCreate()
Le Bundle sauvegardé dans onSaveInstanceState() devient le paramètre de onCreate() quand l’activité redémarre. On ajoute le code pour récupérer la valeur de compteur: @Overrideprotected void onCreate(Bundle savedInstanceState) {
/* autre code */
if (savedInstanceState == null) { compteur = Integer.parseInt(String.valueOf(text.getText()));} else { compteur = savedInstanceState.getInt("compteur");} text.setText(compteur + "");
Pour chaque méthode put Bundle possède une méthode get() qui permet de récupérer la valeur associée à une clé.
![Page 21: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir](https://reader033.vdocuments.mx/reader033/viewer/2022053007/5f0adf307e708231d42dc0f9/html5/thumbnails/21.jpg)
Ressources String
On préfère que les String soient déclarés dans les ressources au lieu d’être en dur dans le programme ou dans le fichier layout. A la place de : <Button . . . android:text="PLUS" />
mettre dans app/res/values/strings.xml
<string name="plus">PLUS</string>
Dans le fichier layout :<Button . . . android:text="@string/plus" />
valeur de l’attribut en dur
nom de la ressource