Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une...

21
Android Wieslaw Zielonka [email protected] www.irif.univ-paris-diderot.fr/~zielonka

Transcript of Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une...

Page 1: Androidzielonka/Enseignement/Android/2016/... · 2016-09-17 · Android studio Création d’une application : • File -> Project choisir le nom du projet, le domaine, • choisir

AndroidWieslaw Zielonka

[email protected] www.irif.univ-paris-diderot.fr/~zielonka

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

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

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

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

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
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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