Première application Android

Hello World

Aperçu de notre première application Android développée avec Android Studio

Création d'un projet Android

  • Ouvrir le menu principal d'Android Studio
  • Vérifier les chemins par défaut du JDK et du SDK :
    Configure > Project Defaults > Project Structure
  • Cliquer sur Start a new Android Studio project pour démarrer l'assistant de création de projet
    • Ecran 1 : saisir HelloWorld comme nom d'application et android.edu comme domaine ainsi que le chemin du nouveau projet
    • Ecran 2 : sélectionner la plateformes d'exécutions Phone and Tablet et configurer l'API 19 comme la version minimum requise du SDK
    • Ecran 3 : sélectionner le modèle Blank Activity comme activité principale
    • Ecran 4 : laisser les informations pré-saisies en cliquer sur Finish pour lancer la création du nouveau projet
  • Le projet s'ouvre automatiquement dans l'IDE une fois créé
  • Il faut fermer le projet pour revenir au menu principal d'Android Studio : File > Close Project

Création d'un projet Android

Assistant de création d'un nouveau projet : étape 1/4

Création d'un projet Android

Assistant de création d'un nouveau projet : étape 2/4

Création d'un projet Android

Assistant de création d'un nouveau projet : étape 3/4

Création d'un projet Android

Assistant de création d'un nouveau projet : étape 4/4

Fenêtre principale

Fenêtre principale d'un nouveau projet Android Studio

A

B

C

D

E

F

Fenêtre principale

  • A - Barre de menus
    Contient des actions regroupées par menus thématiques
  • B - Barre d'outils
    Contient des raccourcis vers des actions fréquentes
  • C - Barre de navigation
    Permet de naviguer rapidement dans l'arborescence du projet
  • D - Fenêtre d'outil
    Fenêtre affichant un outil par défaut une l'arborescence du projet
  • E - Fenêtre d'édition
    Fenêtre affichant un éditeur adapté au fichier ouvert
  • F - Barre d'état
    Affiche des informations sur le projet et les actions lancées
     

Création d'un appareil virtuel

  • Un Android Virtual Device (AVD) est un émulateur d'appareil Android
  • Le programme AVD Manager du SDK permet de gérer des appareils virtuels (AVDs)
  • L'utilisation d'un AVD est un moyen rapide de tester une application développée
  • L'AVD Manager peut être ouvert depuis Android Studio
    • Menu Tools > sous-menu Android > bouton AVD Manager
    • Raccourci dans la barre d'outils
  • Cliquer sur Create Virtual Device pour démarrer l'assistant
    • Ecran 1 : choisir l'appareil Nexus 5 dans la catégorie Phone
    • Ecran 2 : choisir la version Kitkat 19 armeabi-v7a
    • Ecran 3 : vérifier la configuration de l'AVD (ajuster la taille de la mémoire interne par exemple) et cliquer sur Finish

Création d'un appareil virtuel

Assistant de création d'un AVD : étape 1/3

Création d'un appareil virtuel

Assistant de création d'un AVD : étape 2/3

Création d'un appareil virtuel

Assistant de création d'un AVD : étape 3/3

Execution de l'application

  • Pour exécuter l'application développée
    • Menu Run > bouton Run 'app' (ou Maj+F10)
    • Raccourci la barre d'outils
  • Une fenêtre de sélection s'ouvre pour choisir l'AVD pour exécuter l'application
    • Il est possible de choisir un émulateur déjà lancé
    • Ou de choisir un émulateur à lancer
  • Une case à cocher permet de mémoriser l'AVD utilisé pour l'exécution

Structure d'un projet

  • manifests : manifeste de l'application
  • java : code sources Java
  • res : ressources de l'application (identifiées par la classe spéciale R.java)
    • drawable : dessins et images
    • layout : définitions d'interfaces
    • menu : définitions de menus
    • raw : données brutes
    • values : différentes variables
  • Gradle Scripts : scripts utilisés par le moteur de production Gradle

AndroidManifeste.xml

AndroidManifeste.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="edu.android.helloworld" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Classe R.java

  • Classe Java générée automatiquement par l'outil aapt du SDK
  • R.java contient des constantes permettant d'identifier les ressources de l'application
  • Le nom des constantes de R.java font référence à des fichiers du répertoire res
    • Par exemple, R.drawable.ic_launcher fait référence au fichier res/drawable/ic_launcher.png
    • Les chaînes de caractères du fichier res/values/strings.xml sont accessibles par R.strings.name
    • Les descripteurs d'interfaces du répertoire res/layout/ sont accesibles par R.layout.name
  • Les éléments graphiques ont un identifiant déclaré via l'attribut android:id sous la forme @+id/myId et accessible par R.id.myId

Classe R.java

package edu.android.helloworld;

public final class R {
    public static final class attr {
    }
    public static final class dimen {
        public static final int activity_horizontal_margin=0x7f070025;
        public static final int activity_vertical_margin=0x7f070026;
    }
    public static final class drawable {
        public static final int ic_launcher=0x7f020000;
    }
    public static final class id {
        public static final int title=0x7f080027;
    }
    public static final class layout {
        public static final int activity_main=0x7f030017;
        public static final int support_simple_spinner_dropdown_item=0x7f030018;
    }
    public static final class menu {
        public static final int menu_main=0x7f0c0000;
    }
    public static final class string {
        public static final int action_settings=0x7f0a0010;
        public static final int app_name=0x7f0a0011;
        public static final int hello_world=0x7f0a0012;
    }
}

Le composant Activity

  • Une activité correspond à une seule classe Java héritant de la classe Activity (package android.app)
  • Une activité gère la logique applicative ainsi que l'affichage et les interactions de l'écran
  • Les intentions permettent de lancer d'autres activités
  • Une activité a un cycle de vie déterminé
  • Chaque étape du cycle de vie correspond à une méthode de la classe Activity
  • Chaque activité doit pouvoir être utilisée de manière autonome
  • Une activité peut en lancer une autre via la méthode startActivity() et lui passer des donner via un Intent

Le composant Activity

  • Created
    L'activité est initialisée
  • Started
    L'activité démarre
  • Resumed
    L'activité est au premier plan
  • Paused
    L'activité est en arrière plan
  • Stopped
    L'activité est arrêtée
  • Destroyed
    L'activité est détruitre

Exercice 1

Première interface graphique

Résultat

MainActivity

Consignes (1/2)

  • L'objectif est de modifier le layout de l'activité principale pour afficher un champ de saisie et un bouton
  • Nous allons commencer par éditer le layout de l'activité
    • Ouvrir le fichier res/layout/activity_main.xml
    • Remplacer le tag <RelativeLayout> par <LinearLayout>
    • Supprimer le tag <TextView> affichant le texte Hello world!
    • Créer un champ de saisie : utiliser le tag <EditText>
      • ​Ayant editTxt comme ID (attribut android:id)
      • Ayant une taille adaptée au contenu (valeur wrap_content des attributs android:layout_with et android:layout_height)
      • Ayant comme message par défaut la chaîne editMsg (valeur @string/editMsg de l'attribut android:hint)
    • Créer un bouton affichant la chaîne sendBtn (attribut android:text) ayant une taille adaptée au contenu : utiliser le tag <Button>

Consignes (2/2)

  • Il faut maintenant éditer le fichier strings.xml pour ajouter les nouvelles chaînes de caractères
    • Ouvrir le fichier res/values/strings.xml
    • Créer la chaîne editMsg avec comme valeur "Enter a message"
    • Créer la chaîne sendBtn avec comme valeur "Send"
  • Tester le résultat en exécutant l'application dans un appareil virtuel

Exercice 1

Correction

activity_main.xml

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <EditText android:id="@+id/editTxt"
        android:hint="@string/editMsg"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_width="0dp" />

    <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="@string/button_send" />

</LinearLayout>

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">HelloWorld</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="editMsg">Enter a message</string>
    <string name="sendBtn">Send</string>

</resources>

Exercice 2

Démarrer une autre activité

Résultat

MainActivity

DisplayMessageActivity

Consignes (1/3)

  • L'objectif est de créer une activité pour afficher le message saisie lorsque l'utilisateur clique sur le bouton Send
  • Nous allons commencer par associer une méthode traitant le clique de l'utilisateur sur le bouton
    • Ouvrir le fichier res/layout/activity_main.xml
    • Ajouter l'attribut android:onClick au tag Button pour déclencher la méthode sendMessage de l'activité
  • Ensuite il nous faut créer la méthode sendMessage()
    • Ouvrir la classe MainActivity (package edu.android.helloworld)
    • Ajouter le code de la méthode sendMessage()
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.editTxt);
    String message = editText.getText().toString();
    intent.putExtra("edu.android.helloworld.MESSAGE", message);
    startActivity(intent);
}

Consignes (2/3)

  • Créer la classe DisplayMessageActivity
package edu.android.helloworld;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.MenuItem;
import android.widget.TextView;

public class DisplayMessageActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //TODO

    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
  • Déclarer la nouvelle activité dans le manifeste de l'application
<application ... >
    ...
    <activity
        android:name="edu.android.helloworld.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="edu.android.helloworld.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="edu.android.helloworld.MainActivity" />
    </activity>

</application>
  • Déclarer la nouvelle chaîne title_activity_display_message
<resources>...
    <string name="title_activity_display_message">My Message</string>
</resources>

Consignes (3/3)

  • Compléter le code de la méthode onCreate()
    • Récupérer le message saisie transmis par une intention
      • Utiliser la méthode getIntent() pour récupérer l'intention
      • Utiliser la méthode getStringExtra() de l'intention pour récupérer le message envoyé par l'activité principale
    • Créer une zone de texte
      • Utiliser la classe TextView (package android.widget) avec l'activité courante en paramètre constructeur
      • Utiliser la méthode setTextSize() pour définir une longueur de 40
      • Utiliser setText() pour afficher le message envoyé par l'activité principale
    • Utiliser la méthode setContentView() pour définir la zone de texte créée comme le layout de l'activité courante
  • Astuce pour résoudre un problème de code (indiqué en rouge) : placer le curseur sur un problème et appuyer sur Alt+Entrée

Exercice 2

Correction

DisplayMessageActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Get the message from the intent
        Intent intent = getIntent();
        String message = intent.getStringExtra("edu.android.helloworld.MESSAGE");

        // Create the text view
        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);

        // Set the text view as the activity layout
        setContentView(textView);
    }

Première application Android

By Steven Enten

Première application Android

Développement d'une première application Android

  • 1,310