Tutoriel Android Tres Important
Tutoriel Android Tres Important
Tutoriel Android Tres Important
Dima Rodriguez
TP de prise en main
Dima Rodriguez
Polytech’ Paris Sud
Tutoriel AndroidT M
Dima Rodriguez
Novembre 2014
TP de prise en main
Table des matières
Préambule 4
1 Installation de l’IDE 5
2 Configuration de l’IDE 6
Installation des paquets supplémentaires et des mises à jours . . . . . . 6
Configuration d’un émulateur . . . . . . . . . . . . . . . . . . . . . . . 6
Annexes 46
Explication du code généré par défaut pour la classe Principale . . . . . 46
Cycle de vie d’une activité . . . . . . . . . . . . . . . . . . . . . . . . 49
2
Table des figures
3
Préambule
Le système d’exploitation Android est actuellement l’OS le plus utilisé dans le
monde faisant tourner des smartphones, tablettes, montres connectées, liseuses
électroniques, télévisions interactives, et bien d’autres. C’est un système, open
source qui utilise le noyau Linux. Il a été créée par Android, Inc. qui fut rachetée
par Google en 2005. Le développement d’applications pour Android s’effectue
en Java en utilisant des bibliothèques spécifiques.
Le but de ce tutoriel est de vous familiariser avec l’esprit de développement An-
droid et ses bibliothèques. Nous introduirons les concepts de bases de création
d’application en mettant en œuvre quelques fonctionnalités simples. Ce tutoriel
n’est en aucun cas exhaustive, le potentiel des applications Android est beau-
coup plus ample, les exemples cités dans ce document ne devront pas brider votre
imagination ni votre curiosité.
Sur le site officiel pour les développeurs Android vous trouverez la documen-
tation des classes, des tutoriels ainsi que les lignes directrices pour préparer une
distribution Google Play. Un lexique à la fin de ce document définit quelques
mot du vocabulaire Android utilisé dans ce tutoriel.
4
1 Installation de l’IDE
Dans cette section nous allons décrire la procédure d’installation d’un environne-
ment de développement Android.
Attention : Il faut exécuter les étapes dans l’ordre cité ci-dessous.
a. Téléchargez le JDK7 (Java Development Kit) que vous pouvez trouver sur
le site d’Oracle 1 .
b. Désinstallez des éventuelles versions antérieures du JDK
c. Installez le nouveau JDK
d. Téléchargez le paquet ADT (Android Developer Tools). Il contient le SDK
(Software Development Kit) Android et une version d’Eclipse avec ADT
intégré.
e. Pour installer l’IDE, il faut juste placer le dossier téléchargé dans le réper-
toire où vous avez l’habitude d’installer vos programmes (ou directement
sur votre partition principale) et le dé-zipper. Vous pouvez également lui
changer de nom si vous souhaitez, mais veillez à ne pas mettre des espaces
ou des accents quand vous le renommez.
f. Dans le dossier dé-zippé vous trouverez un exécutable Eclipse que vous
pouvez désormais lancer pour commencer la configuration de votre envi-
ronnement.
5
2 Configuration de l’IDE
Si vous voulez développer pour des versions Android plus anciennes il faut
i installer les versions API correspondantes.
6
Tutoriel Android 7
Allez dans le menu Window > Android Virtual Device Manager, une fois le gestion-
naire ouvert cliquez sur le bouton Create (fig. 2.2). Une fenêtre de configuration
s’affiche (fig. 2.3a). On propose de configurer un émulateur Nexus One avec les
paramètres indiqués (fig.2.3b).
Notez qu’à la création de l’appareil sa résolution vous est signalée. Dans cet
exemple l’appareil a une résolution 480x800 qui correspond à hdpi (high den-
sity dots per inch). Ceci est important à noter pour l’intégration d’images dans
l’application.
Notez que pour certains émulateurs proposés le processeur n’est pas installé
i par défaut, pour pouvoir les créer il faut installer un processeur adapté dans
le SDK Manager.
(a) Fenêtre de création AVD (b) Création d’un appareil Nexus One
Application name : c’est le nom qui va apparaitre dans la liste des appli-
cations sur l’appareil et dans le Play Store.
Project name : c’est le nom utilisé par Eclipse (typiquement le même
que celui de l’application).
Package name : il est utilisé comme identifiant de l’application, il permet
de considérer différentes versions d’une application comme étant une
même application.
Minimum required SDK : c’est la version Android la plus ancienne sur
laquelle l’application peut tourner. Il faut éviter de remonter trop en
arrière ça réduirait les fonctionnalités que vous pourriez donner à votre
application.
Target SDK : c’est la version pour laquelle l’application est développée et
testée. Typiquement la dernière version API que vous avez installée. 1
Compile with : c’est la version d’API à utiliser pour la compilation. Typi-
quement la dernière version du SDK installée.
Theme : c’est l’apparence par défaut qu’aura votre application.
10
Tutoriel Android 11
b. Cliquez sur Next et laissez les choix par défaut. Vous pouvez éventuellement
modifier l’emplacement de votre projet en décochant Create Project in
Workspace et parcourir le disque pour sélectionner un autre dossier.
c. Cliquez sur Next. La fenêtre suivante vous propose de définir une icône pour
votre application. Nous laisserons l’icône proposée par défaut. Vous pourrez
ultérieurement créer votre propre icône pour vos applications. Remarquez
que l’image doit être proposée avec différentes résolutions pour s’adapter
aux différents appareils.
d. Cliquez sur Next. Nous arrivons à la création d’une activité (un écran avec
une interface graphique). Sélectionnez Blank Activity (fig. 3.2) et cliquez
Next.
e. Selon la version de l’ADT que vous avez, vous verrez soit la fenêtre de la
figure 3.3a ou celle de la figure 3.3b. La dernière version impose l’utilisation
de fragments. Chaque activité dispose d’un layout qui définit la façon dont
les composants seront disposés sur l’écran. Une activité peut être divisée
en portions (ou fragments) chacune ayant son propre layout. La notion
de fragment a été introduite pour favoriser la ré-utilisabilité de morceaux
d’activité (un fragment peut être définit une fois et réutilisé dans plusieurs
activités). Renseignez les champs comme indiqué dans la figure.
f. Cliquez sur Finish, le projet est crée.
Exécution de l’application
Sur l’émulateur
Appuyez sur le bouton d’exécution (fig.3.4 ) et sélectionnez Android Application
dans la fenêtre qui s’affiche. L’émulateur se lance, ça peut prendre quelques minutes
soyez patients. Rassurez-vous, vous n’aurez pas à le relancer à chaque fois que
vous compilez votre projet, laissez-le ouvert et à chaque fois que vous compilez et
relancez votre application, elle sera rechargée dans l’émulateur en cours.
(a) Création d’activité sans fragment (b) Création d’activité avec fragment
Debug et Execution
composant selectionné
Aperçu de
Propritétés du
l'activité
Explorateur
Tout projet Android doit respecter une hiérarchie bien précise qui permettra au
compilateur de retrouver les différents éléments et ressources lors de la génération
de l’application. Cette hiérarchie favorise la modularité des applications Android.
A la création du projet, Eclipse crée automatiquement des dossiers pour contenir
les fichiers de code Java, les fichiers XML, et les fichiers multimédias. L’explorateur
de projet vous permettra de naviguer dans ces dossiers.
Les dossiers que nous utiliserons le plus sont src et res. Le premier contient le code
Java qui définit le comportement de l’application et le second comporte des sous
dossiers où sont stockés les ressources qui définissent l’interface de l’application
(l’apparence).
ldpi low-resolution dots per inch. Pour des images destinées à des
écrans de basse résolution (~120dpi)
mdpi pour des écrans de moyenne resolution (~160dpi)
hdpi pour des écrans de haute résolution (~240dpi)
xhdpi pour des écrans ayant une extra haute résolution (~320dpi)
xxhdpi pour des écrans ayant une extra extra haute résolution (~480dpi).
values contient les fichiers XML qui définissent des valeurs constantes (des
chaines de caractères, des dimensions, des couleurs, des styles etc.)
Dans le dossier gen vous verrez du code java généré automatiquement par Eclipse.
Nous nous intéresserons particulièrement au fichier R.java dans le package poly-
tech.android.monappli. Ce fichier définit une classe R dans laquelle sont définis les
identifiants des ressources de l’application. A chaque fois que vous rajouterez une
ressource à votre application un identifiant sera généré automatiquement dans
cette classe vous permettant par la suite de pouvoir le référencer pour l’utiliser
dans votre code 2 .
Vous trouverez également sur la racine du projet un fichier nommé AndroidMa-
nifest.xml. Ce fichier est obligatoire dans tout projet Android, et doit toujours
avoir ce même nom. Ce fichier permet au système de reconnaitre l’application.
Comprendre le layout
La disposition de notre interface est définie dans le fichier fragment_principale.xml
situé dans le dossier layout de res. (ou bien le fichier activite_principale.xml si vous
n’avez pas définit de fragment à la création de votre projet). Ouvrez ce fichier.
2. A l’intérieur de classe R sont définies plusieurs classes, dites nichées, telles que string,
drawable, layout, menu, id, etc. Une classe nichée est membre de la classe qui la contient.
On a recours à ce genre de classe en général lorsqu’on veut définir une classe qui n’est utilisée
qu’à l’intérieur d’une autre classe. Si on la déclare privée elle ne sera visible qu’a l’intérieur de la
classe qui l’a définie. Par ailleurs cette dernière peut également accéder aux attributs privés de la
classe nichée. C’est une façon d’améliorer la lisibilité du code en regroupant les fonctionnalités qui
vont ensemble. Dans notre cas toutes les classes nichées dans R sont publiques, donc accessibles
depuis l’extérieur, mais comme elles sont membres de la classe R, pour y accéder, il faut passer
par R. On utilisera des notations telles que R.string puisque ces classes sont statiques.
plateforme:caractéristique=”valeur”
Par exemple le premier attribut xmlns:android précise où sont définis les ba-
lises Android utilisées dans ce fichier.
La balise <TextView>, fille de la balise <RelativeLayout>, définit un com-
posant texte qui sera placé sur le layout. En effet, c’est sur ce composant là qu’on
écrit le “Hello World” qu’affiche notre application. Cette chaine de caractère est
définie par l’attribut android:text. La notation "@string/hello_world"
fait référence à une chaine de caractère qui s’appelle hello_world et qui est
définie dans le fichier strings.xml (dans le dossier values).
<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="horizontal" >
</LinearLayout>
<EditText
android:id="@+id/chp_saisie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/str_chp_saisie" />
Nous avons ainsi placé un champ de saisie avec les attributs suivants :
android :id permet de donner un identifiant unique à ce View qu’on utilisera
pour référencer cet objet à l’intérieur de notre code.
Le symbol @ est nécessaire pour faire référence à un objet ressource à partir
d’un fichier XML. id est le type de ressource et chp_saisie est le nom
qu’on donne à notre ressource. Le symbole + est utilisé pour définir un ID
pour la première fois. Il indique aux outils du SDK qu’il faudrait générer
un ID dans le fichier R.java pour référencer cet objet. Un attribut public
static final chp_saisie sera défini dans la classe id.Le symbole
+ ne doit être utilisé qu’une seule fois au moment où on déclare la ressource
pour la première fois. Par la suite si on veut faire référence à cet élément,
à partir d’un XML, il suffira d’écrire @id/chp_saisie.
Privilégiez toujours l’utilisation des ressources strings plutôt que des chaines
i de caractères codées en dur. Cela permet de regrouper tout le texte de votre
interface dans un seul endroit pour simplifier la recherche et la mise à jour
du texte, de plus ceci est indispensable pour que votre application puisse être
multilingue. l’IDE vous affichera un avertissement en cas de non respect de
cette recommandation.
Après la modification du code que nous venons de faire, quand vous sauvegarderez
le fichier, un message d’erreur vous indiquera que l’identifiant str_chp_saisie
n’est pas connu. Nous allons donc le définir.
. Ouvrez le fichier strings.xml qui se trouve dans res>values
. Rajoutez une nouvelle string nommée str_chp_saisie et dont la valeur
est “Entrer un texte”
. Vous pouvez éventuellement supprimer la ligne qui définit “hello_world”
Votre fichier strings.xml ressemblera donc à ceci
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MonAppli</string>
<string name="str_chp_saisie">Entrer un texte</
string>
<string name="action_settings">Settings</string>
</resources>
. Une fois que vos modifications sont sauvegardées vous remarquerez la créa-
tion de deux attributs dans le fichier R.java.
• Un attribut constant nommé chp_saisie dans la classe id. C’est un
numéro unique qui identifie l’élément EditText que nous venons de
rajouter. Cet identifiant nous permettra de manipuler l’élément à partir
du code.
• Un attribut constant nommé str_chp_saisie dans la classe string.
Il fait référence à la chaine de caractère et nous permettra de l’utiliser
dans le code.
Lancez l’application, l’émulateur affichera un écran tel que dans la figure 3.7.
Tapez un texte et remarquez comment la taille du champ de saisie s’adapte à la
longueur du texte.
Rajouter un bouton
. Dans le fichier strings.xml rajoutez une chaine de caractère qui s’appelle
"btn_envoyer" et qui vaut Envoi.
. Dans le fichier du layout rajoutez un élément <Button> tel que
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_envoyer" />
Lancez l’application. Vous devez voir un bouton à coté du champ de saisie (fig.3.8a).
Si vous souhaitez que votre champ de saisie occupe toute la largeur de l’écran
qui reste après le positionnement du bouton il faut spécifier un poids de 1 au
EditText et une largeur de 0.
<EditText ...
android:layout_weight="1"
android:layout_width="0dp"
... />
<Button
...
android:onClick="envoiMessage"
... />
<activity
android:name="polytech.android.monappli.
AffichMessage"
android:label="@string/
title_activity_affich_message"
android:parentActivityName="polytech.android.
monappli.Principale" >
<meta-data
android:name="android.support.
PARENT_ACTIVITY"
android:value="polytech.android.monappli
.Principale" />
</activity>
<resources>
...
<string name="title_activity_affich_message">
MonMessage</string>
...
</resources>
Lancement de l’activité
Pour faire communiquer les deux activés (l’activité principale et celle que nous
venons de créer) il faut passer par un Intent. Ce dernier représente l’intention de
faire quelque chose, et permet à l’activité principale de lancer l’activité d’affichage.
Dans la méthode envoiMessage() de la classe Principale :
. Créez une intention,
Intent intent = new Intent(this, AffichMessage.class);
fait que nous l’avons indiqué comme activité parent au moment de la création de
notre activité d’affichage.
Si nous souhaitons que le texte tapé dans l’activité principale soit affiché dans
l’activité d’affichage, il faut faire communiquer les deux activités de sorte à ce
que la première envoie le texte à la deuxième. Ceci s’effectue en utilisant le même
Intent qui a servi pour le lancement de l’activité. En effet une intention peut aussi
transporter un paquet de données.
Modifier la méthode envoiMessage() pour qu’elle contienne le code ci-dessous,
sans oublier d’importer les classes nécessaires (Eclipse vous les proposera)
public void envoiMessage (View view){
Intent intent = new Intent(this, AffichMessage.class);
EditText editText = (EditText) findViewById(R.id.
chp_saisie);
String message = editText.getText().toString();
intent.putExtra(MESSAGE_SUPP, message);
startActivity(intent);
}
...
Arrivés à ce point, nous avons fait en sorte à ce que l’activité principale envoie un
message à l’activité d’affichage. Il nous reste maintenant à récupérer ce message
dans AffichMessage. Pour cela il suffit de rajouter le code ci- dessous dans
la méthode onCreate() de la classe AffichMessage . Cette méthode est
appelée à la création de l’activité.
Intent intent = getIntent();
String message = intent.getStringExtra(Principale.MESSAGE_SUPP
);
Ensuite, pour afficher le message nous allons créer un TextView, lui affecter le
message puis le rajouter à un layout qu’on passera à setContentView().
Dans les sections précédentes nous avons appris à créer et rajouter des
composants à partir du fichier xml, ici nous le faisons dans le code.
Voici le code complet de la méthode onCreate()
protected void onCreate(Bundle savedInstanceState) {
/*appeler onCreate de la classe mère*/
super.onCreate(savedInstanceState);
/*récupérer le message transporté par l’intention*/
Intent intent = getIntent();
String message = intent.getStringExtra(Principale.
MESSAGE_SUPP);
/*créer le textView*/
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
/*créer un layout tabulaire*/
TableLayout monLayout = new TableLayout(this);
/*rajouter le textView au layout*/
monLayout.addView(textView,0);
qui s’y trouvait par défaut nous n’utilisons plus le fichier activite_affich_message.xml
pour définir le layout de l’activité, mais nous définissons le contenu de l’écran dans
le code.
On aurait pu simplement définir le textView comme layout sans passer par
monLayout et ce en écrivant
setContentView(textView);
dans ce cas l’activité ne contiendrait que le message. Cependant nous avons préféré
créer un layout tabulaire qui nous servira pour la suite de ce tutoriel.
. A l’aide d’un clic droit sur ce dossier dans l’explorateur Eclipse sélection-
nez New>Android XML File
. Sélectionnez Drawable comme ressource, dans le projet MonAppli et nommez-
le anim_terre avec animation-list comme élément de base et cliquer Finish
(fig. 3.10)
. Eclipse génère alors un fichier xml contenant un squelette d’animation
avec la balise <animation-list>
. Modifiez le fichier de sorte à rajouter un paramètre android:oneshot
en le mettant à “false" pour que l’animation boucle indéfiniment et
remplissez l’animation par des items définissant les images.
android:duration="250"/>
<item android:drawable="@drawable/image4"
android:duration="250" />
<item android:drawable="@drawable/image5"
android:duration="250" />
<item android:drawable="@drawable/image6"
android:duration="250" />
<item android:drawable="@drawable/image7"
android:duration="250" />
<item android:drawable="@drawable/image8"
android:duration="250" />
<item android:drawable="@drawable/image9"
android:duration="250" />
<item android:drawable="@drawable/image10"
android:duration="250" />
<item android:drawable="@drawable/image11"
android:duration="250" />
<item android:drawable="@drawable/image12"
android:duration="250" />
</animation-list>
Pour chacune des images il faut préciser android:duration qui définit la durée
d’affichage de l’image en ms.
Notez que dès que les fichiers png sont rajoutés au dossier drawable des identifiants
image1, image2, ... image12 sont automatiquement crées dans la classe drawable
de R.java. Ce sont ces identifiants que nous utilisons ici.
Pour faire apparaitre l’animation il faut rajouter un élément <ImageView> dans
le layout principal.
<ImageView
android:id="@+id/animTerre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/
anim_terre_descript"
android:src="@drawable/anim_terre" />
<RelativeLayout>)
Exécutez l’application, l’activité devrait ressembler à la figure 3.12
. Toujours dans onCreate(), créez les deux boutons et gérez leurs clics
/*créer le bouton stop*/
stopBtn = new Button(this);
stopBtn.setText(R.string.btn_stop);
Afin de définir comment notre vue se dessine sur l’écran il faut implémenter la
méthode onDraw()qui sera invoquée automatiquement par le système à chaque
fois qu’il a besoin d’afficher ou de rafraichir le View.
Nous définirons d’abord un objet de dessin (une sorte de pinceau) comme attribut
de la classe MonViewPerso
Paint p = new Paint();
Avec le code ci-dessus notre vue consistera en un écran noir au centre duquel on
affiche Hello World ! en blanc. L’argument canvas, que le système passe à la
méthode onDraw(), représente la zone de dessin de l’écran.
La méthode
public void drawText (String text, float x, float y, Paint paint);
Notez qu’ici nous avons juste affiché un texte défini dans strings.h, mais il est
également possible de créer des chaines de caractères formatées pour, par exemple,
récupérer des valeurs de variables. Modifiez le code pour définir le texte tel que
String texte = String.format("%s %d x %d",texte,canvas.
getWidth(),canvas.getHeight());
Si vous testez l’application (fig.3.14 ), l’appui sur le bouton que nous venons de
rajouter lancera l’activité MonJeu. Cependant celle ci n’est pas encore associée à
notre vue et ne fait qu’afficher un message par défaut. Il nous reste donc à rajouter
un élément <MonViewPerso> sur le layout de l’activité.
. Modifier le fichier fragment_mon_jeu.xml en supprimant l’élément <Text-
View> et le remplaçant par un élément <MonViewPerso> tel que
<polytech.android.monappli.MonViewPerso
android:id="@+id/maVue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" />
Vous pouvez également faire cela de façon graphique dans le Graphical layout. En
effet, notre vue personnalisée apparait maintenant dans la palette et nous pouvons
la rajouter sur l’activité avec un glisser-déposer.
return true;
}
Temporisation
Dans certaines applications on est parfois amené à effectuer une tâche après un
certain délai, ou bien périodiquement toutes les x ms. Nous allons, dans la suite,
introduire la notion de temporisation que nous utiliserons pour faire déplacer notre
planète le long de l’écran.
Pour ce faire nous passerons par un objet Handler qui permet de programmer
l’appel d’une méthode après un délai déterminé.
. Dans la classe MonViewPerso, définir un attribut de type Handler tel
que
Handler timerHandler = new Handler();
invalidate ();
/*reprogrammer l’objet pour une exécution dans 50ms
*/
timerHandler.postDelayed(this, 50);
}
};
Avec ce code nous avons défini ce qu’on appelle une classe anonyme. Les classes
anonymes en Java permettent de déclarer et instancier une classe en même temps.
Elles ressemblent aux classes locales nichées mais, contrairement à ces dernières,
elles ne possèdent pas de nom. On les utilise quand on veut utiliser une classe locale
une seule fois. On n’a pas besoin de la nommer puisqu’on ne fera plus référence à
elle ailleurs.
La définition de la classe s’effectue avec une expression au moment de l’appel
du constructeur. Après l’invocation du constructeur on écrit un bloc contenant la
définition de la classe. Il suffit de mettre
. new avec le nom de l’interface que la classe doit implémenter, ici Runnable,
ou bien le nom de la classe mère si c’était le cas.
. suivi des parenthèses avec les paramètres du constructeur de la classe de
base. Ici, comme il s’agit d’une interface, il n’y a aucun paramètre. (les
interfaces n’ont pas de constructeurs)
. puis, entre accolades, le corps de la classe en terminant par un ;
Lancez l’application, vous verrez la planète se déplacer en diagonale sur l’écran.
Notez qu’il est toujours possible de la déplacer avec le toucher.
Nous allons, dans la suite, apprendre à rajouter notre propre item du menu et lui
définir une action. C’est très simple !
Les boutons de la barre d’action sont définis dans un fichier xml du dossier res/-
menu. Pour ajouter un bouton d’action à l’activité principale nous allons modifier
le fichier principale.xml pour y insérer un item
<item
android:id="@+id/action_mon_action"
android:title="@string/action_mon_action"
app:showAsAction="never"/>
L’attribut app:showAsAction définit quand et comment l’item doit apparaitre
en tant que bouton sur la barre d’action. En précisant “never” notre item n’ap-
paraitra pas sur la barre mais uniquement quand on déroule le menu. Si on précise
"ifRoom|withText" le texte de l’item apparaitra s’il y a de la place.
Lancez l’application, vous devriez voir le nouvel item dans le menu. N’oubliez pas
de définir la chaine action_mon_action dans strings.xml.
Il nous reste maintenant à implémenter l’action à exécuter quand notre item est
sélectionné par l’utilisateur. Ceci s’effectue dans la méthode onOptionsItem-
Selected() de la classe Principale. Repérez cette méthode et rajoutez les
lignes suivantes dans son corps
if (id == R.id.action_mon_action) {
//le traitement se fera ici
return true;
}
lancer une deuxième activité de notre application, nous allons également utiliser
un Intent pour lancer une deuxième application.
. Il faut d’abord créer l’intention
Uri webpage = Uri.parse("http://www.polytech.u-psud.fr");
Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
3. l’URI est une chaine de caractère qui identifie le nom d’une ressource. L’URL est une forme
d’URI
Changement de langue
Rendre votre application multilingue est très simple si vous avez défini tous vos
textes dans strings.xml. Il suffit de définir un strings.xml pour chaque langue que
vous voulez supporter et les placer dans des dossiers values nommés avec le code
de la langue en préfixe. Par exemple values-fr pour le français, values-en pour
l’anglais, values-es pour l’espagnol, etc.
Android sélectionnera les ressources appropriées en fonction de la langue que l’uti-
lisateur a défini pour son appareil.
. Créez un dossier values-en dans le dossier res : Cilc droit sur res dans
l’explorateur Eclipse puis New>Folder.
. Dans ce dossier créez un fichier strings.xml : Cilc droit sur le dossier dans
l’explorateur Eclipse puis New>Android XML File
. Copiez ce que vous aviez déjà dans le strings.xml que nous avions utilisé
jusqu’à présent et traduisez le texte.
. Chargez l’application. Changez la Locale de l’appareil et lancer l’applica-
tion : L’application passe sur la langue que vous venez de sélectionner.
Si jamais vous choisissez une langue que votre application ne supporte pas, ce
seront les chaines de caractères définies par défaut dans values/strings.xml qui
seront utilisées.
Conclusion
Nous avons introduit quelques concepts de base de la programmation Android.
Avec les exemples relativement simples détaillés dans ce document nous avons
présenté les premières étapes de la creation d’applcations.
Nous venons de vous accompagner dans vos premiers pas avec Android, main-
tenant c’est à vous de jouer !
DVM Dalvik Virtual Machine. C’est une machine virtuelle disponible sur tout
appareil Android. Elle execute des fichiers en format .dex (format de
pseudo-code optimisé)
Fragment Un fragment représente un comportement ou une portion de l’interface
utilisateur dans une activité. On peut combiner plusieurs fragments
dans une même activité pour créer une interface à volets multiples et
réutiliser un fragment dans plusieurs activités.
Intent C’est un message qui permet d’activer un composant (une activité
par exemple). C’est un messager qui demande une action à un autre
composant (de la même application ou d’une autre)
Layout Le layout définit la structure visuelle d’une interface utilisateur. Les
éléments d’un layout peuvent être définis soit dans un fichier XML
ou bien à l’exécution à partir d’instructions dans le code. L’utilisation
XML permet de mieux séparer l’apparence de l’application d’une part
et le code qui définit son comportement d’autre part. Ceci permet de
s’adapter plus facilement aux différentes cibles, il suffit de définir plu-
sieurs fichiers XML pour un même code.
44
Tutoriel Android 45
Manifest Toute application Android doit posséder un fichier XML nommé An-
droidManifest.xml. Ce fichier contient des informations essentielles sur
l’application que le système doit connaitre pour pouvoir la lancer. Ce
fichier définit le nom du package de l’application, décrit les compo-
sants de l’application, détermine le processus qui accueillera ces com-
posants, déclare les permissions dont l’application a besoin et celles
que les autres doivent avoir pour interagir avec l’application, déclare
la version Android minimale pour l’application, et liste les bibliothèques
dont l’application a besoin.
Service Un service est un composant qui tourne en tâche de fond, pour ef-
fectuer de longues opérations ou exécuter des tâches pour un autre
processus. Un service ne possède pas une interface utilisateur.
/******************************************************************/
/*importation des classes utilisées dans le code*/
/******************************************************************/
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
/******************************************************************/
/*Définition de la classe Principale qui hérite de ActionBarActivity*/
/******************************************************************/
public class Principale extends ActionBarActivity {
/*redéfinition de la méthode onCreate() héritée de ActionBarActivity.
Elle prend en paramètre un objet de type Bundle. La classe Bundle
définit un type d’objet pouvant contenir un ensemble de données,
et qui est destiné à échanger des données entre les activités. La
méthode onCreate() est appelée une fois par le système au premier
lancement de l’activité*/
46
Tutoriel Android 47
/******************************************************************/
/*Définition d’une classe interne */
/******************************************************************/
51