Vous êtes sur la page 1sur 90

Dveloppement d'applications pour terminaux Android

Par DakuTenshi et Hilaia

www.siteduzero.com

Dernire mise jour le 15/10/2011

Sommaire

1/89

Sommaire
Sommaire ........................................................................................................................................... 1 Informations sur le tutoriel ................................................................................................................... 1 Dveloppement d'applications pour terminaux Android ...................................................................... 3
Informations sur le tutoriel ................................................................................................................................................. 3

Partie 1 : Les bases indispensables toutes applications .................................................................. 4


L'univers Android ............................................................................................................................................................... 4
La cration d'Android .................................................................................................................................................................................................. 4 La philosophie et les avantages d'Android .................................................................................................................................................................. 7 Les difficults du dveloppement pour des systmes embarqus .............................................................................................................................. 7

Confectionnons-nous un environnement de dveloppement ........................................................................................... 8


Conditions initiales ...................................................................................................................................................................................................... 8 Le JDK ....................................................................................................................................................................................................................... 10 SDK Android .............................................................................................................................................................................................................. 10 Eclipse ....................................................................................................................................................................................................................... 13 L'Android Virtual Device ............................................................................................................................................................................................ 15 Test et configuration .................................................................................................................................................................................................. 18 Configuration du vrai terminal ................................................................................................................................................................................... 24 Tlcharger le driver ................................................................................................................................................................................................. 24 Configuration du terminal .......................................................................................................................................................................................... 24 Et aprs ? .................................................................................................................................................................................................................. 24

Premire application, celle qui vous rapportera des millions .......................................................................................... 24


Activit et vue ............................................................................................................................................................................................................ 24 Qu'est-ce qu'une activit ? ........................................................................................................................................................................................ 25 tats d'une activit .................................................................................................................................................................................................... 25 Cycle de vie d'une activit ......................................................................................................................................................................................... 26 Cration d'un projet ................................................................................................................................................................................................... 27 Un non-"Hello world!" ................................................................................................................................................................................................ 30 Package .................................................................................................................................................................................................................... 31 Import ........................................................................................................................................................................................................................ 31 Class ......................................................................................................................................................................................................................... 32 onCreate .................................................................................................................................................................................................................... 32 Super ! ....................................................................................................................................................................................................................... 32 setContentView ......................................................................................................................................................................................................... 32 Lancement de l'application ........................................................................................................................................................................................ 33

Les ressources (gnralits) ........................................................................................................................................... 35


Le format XML ........................................................................................................................................................................................................... Les diffrents types de ressources ........................................................................................................................................................................... L'organisation ............................................................................................................................................................................................................ Exemples et rgles suivre ...................................................................................................................................................................................... Mes recommandations .............................................................................................................................................................................................. Ajouter un fichier avec Eclipse .................................................................................................................................................................................. Petit exercice ............................................................................................................................................................................................................. Rcuprer une ressource .......................................................................................................................................................................................... La classe R ............................................................................................................................................................................................................... Application ................................................................................................................................................................................................................. Application ................................................................................................................................................................................................................. 37 38 40 42 42 43 45 46 46 48 49

Les ressources (l'interface graphique - composants principaux) .................................................................................... 49


L'interface d'Eclipse ................................................................................................................................................................................................... 49 Rgles gnrales sur les vues .................................................................................................................................................................................. 51 Diffrenciation entre un layout et un widget .............................................................................................................................................................. 52 Attributs en commun ................................................................................................................................................................................................. 52 Identification .............................................................................................................................................................................................................. 53 Les widgets les plus simples ..................................................................................................................................................................................... 57 Application de calcul de l'IMC (partie 1) .................................................................................................................................................................... 57 Les vnements ........................................................................................................................................................................................................ 60 Par hritage ............................................................................................................................................................................................................... 61 Par un attribut ............................................................................................................................................................................................................ 62 Petit exercice ............................................................................................................................................................................................................. 63 Application de calcul de l'IMC (partie 2) .................................................................................................................................................................... 64 Les layouts (gabarits) ................................................................................................................................................................................................ 66 LinearLayout .............................................................................................................................................................................................................. 67 Application de calcul de l'IMC (partie 3.1) ................................................................................................................................................................. 69 RelativeLayout .......................................................................................................................................................................................................... 72 Application de calcul de l'IMC (partie 3.2) ................................................................................................................................................................. 72 TableLayout ............................................................................................................................................................................................................... 73 Application de calcul de l'IMC (partie 3.3) ................................................................................................................................................................. 74

www.siteduzero.com

Sommaire

2/89

FrameLayout ............................................................................................................................................................................................................. 75

Partie 2 : Annexes ............................................................................................................................. 76


L'architecture d'Android ................................................................................................................................................... 77
Le noyau Linux .......................................................................................................................................................................................................... Les bibliothques pour Android ................................................................................................................................................................................. Le moteur d'excution Android .................................................................................................................................................................................. Les frameworks pour les applications ....................................................................................................................................................................... Les applications ........................................................................................................................................................................................................ 77 79 79 82 82

Attributs et mthodes des vues ....................................................................................................................................... 83


TextView .................................................................................................................................................................................................................... 83 EditText ..................................................................................................................................................................................................................... 85 CheckBox .................................................................................................................................................................................................................. 86 RadioGroup ............................................................................................................................................................................................................... 88 RelativeLayout .......................................................................................................................................................................................................... 88

www.siteduzero.com

Dveloppement d'applications pour terminaux Android

3/89

Dveloppement d'applications pour terminaux Android


Le tutoriel que vous tes en train de lire est en bta-test . Son auteur souhaite que vous lui fassiez part de vos commentaires pour l'aider l'amliorer avant sa publication officielle. Notez que le contenu n'a pas t valid par l'quipe ditoriale du Site du Zro.

Bonjour tous et bienvenue dans le monde merveilleux du dveloppement pour terminaux utilisant le systme d'exploitation mobile Android !

Informations sur le tutoriel


Auteur :

Android est certainement la boite Frdric Espiau (DakuTenshi) outils, le couteau suisse high-tech le plus rpandu et complet que je Difficult : connaisse. J'imagine ne pas tre le Temps d'tude estim : 1 mois seul m'intresser cet Licence : environnement de dveloppement, qui offre des possibilits tellement allchantes ! Pensez la localisation GPS, au tactile, aux interactions avec les rseaux sociaux, au multimdia et l'appareil photo par exemple ! Il est tout adapt pour n'importe qui souhaite se lancer dans le dveloppement mobile peu de frais. Android est tout particulirement facile manipuler grce Java et aux nombreux Frameworks (j'explique ce terme plus loin si vous en ignorez le sens) disponibles, puis il permet de mettre disposition des utilisateurs les applications au travers de l'Android Market, procurant ainsi une visibilit immdiate. Donc si j'ai bien compris, je peux m'initier la programmation Android sans rien savoir l'origine ? En partant de zro ? Et bien non ! Tout vous enseigner depuis le dbut serait redondant avec d'autres tutoriels qui sont dj prsents sur ce site.

Ainsi, pour pouvoir prtendre au dveloppement Android, vous devez respecter les conditions suivantes : Savoir dvelopper en Java (pour cela, pour pouvez consulter la premire partie du tutoriel de cysboy sur le sujet voire encore mieux, acheter le livre de la collection Le Livre Du Zro du mme auteur ). Dans une moindre mesure, il serait intressant que vous sachiez effectuer certaines requtes SQL de base. Il existe un tutoriel qui aborde les bases du SQL sous MySQL que vous trouverez ici, malheureusement le contexte de ce tutoriel est totalement diffrent de celui utilis pour le dveloppement Android. Je ferai bien entendu en sorte que ceux qui ignorent totalement ce langage ne soient pas compltement perdus, mais sachez tout de mme que la connaissance du SQL est de manire gnrale difficilement contournable dans le monde de la programmation. tre un minimum autonome en informatique. Par exemple, je ne vous expliquerai pas comment installer Eclipse tape par tape .

Une chose vous sautera peut-tre aux yeux, mais je ne vous demande pas de possder un terminal (tlphone, ardoise, lecteur MP4, ...) sous Android. Ce n'est pas une erreur, il est tout fait possible de dvelopper, tester et publier ses applications sans possder ce type de matriel. Cependant, sachez que rien ne remplacera jamais un vrai terminal sous Android pour des fins de test.

Ce tutoriel dbutera en douceur et vous prsentera d'abord les bases essentielles pour le dveloppement Android afin de pouvoir effectuer des applications simples et compatibles avec tous les types de terminaux. On abordera ensuite des notions plus avances afin d'exploiter les multiples facettes que prsente Android.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

4/89

Partie 1 : Les bases indispensables toutes applications

L'univers Android
Je souhaite tout d'abord vous prsenter ce que j'appelle l'univers Android. Android est un support formidable, autant pour les utilisateurs, que pour les dveloppeurs et les constructeurs. Son dveloppement part d'une ide de base simple et trs vite il a su devenir un systme capable de s'imposer dans un certain nombre de domaines dans le monde du mobile. Il y a une histoire et une philosophie particulire derrire Android que je compte bien vous communiquer travers ce chapitre. Ce chapitre contient du vocabulaire technique. Ce n'est pas parce que vous tes un zro que vous devez le rester .

Le fait tant que l'on utilise des mots particuliers dans l'univers de l'informatique, et que si vous souhaitez comprendre tous les documents techniques que vous trouverez, vous aurez besoin de matriser tout ce vocabulaire. Je fais en sorte d'expliquer tout ce qui me semble un peu compliqu comprendre. N'hsitez pas vous plaindre ou me suggrer d'ventuelles amliorations dans les commentaires, surtout s'il y a quoi que ce soit qui vous semble flou voire carrment obscur !

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

5/89

La cration d'Android
On associe tous le nom d'Android Google, et pourtant il faut savoir que la multinationale est loin d'tre la seule avoir mis la main la pte pour concevoir ce systme. Preuve tant, Android tait le nom d'une petite entreprise cre en 2003 puis rachete par Google en 2005 qui avait l'poque la ferme intention de s'introduire sur le march des produits mobiles. A l'origine, l'entreprise Android essayait de dvelopper un systme d'exploitation plus intelligent, qui ne se contentait pas des fonctions basiques que sont les SMS et les appels, et qui se devait d'interagir avec l'environnement de l'utilisateur (notamment avec sa position). C'est pourquoi, contrairement une croyance populaire, on peut affirmer qu'Android n'est pas une rponse de Google l'iPhone d'Apple puisque l'existence de ce dernier n'a t rvle que 2 ans plus tard. C'est en 2007 que la situation prit une autre tournure. A cette poque, chaque constructeur quipait ses tlphones de son systme propritaire, c'est pourquoi il tait impossible de dvelopper facilement une application qui s'adaptait tous les systmes, puisqu'ils taient tous trs diffrents. Un dveloppeur tait plutt spcialis dans un systme particulier et il devait se contenter de langages de bas niveaux comme le C ou le C++. De plus, les constructeurs faisaient en sorte de livrer des bibliothques de dveloppement trs rduites de manire conserver pour eux leurs secrets de fabrication. En janvier 2007, Apple dvoilait l'iPhone, un tlphone tout simplement rvolutionnaire pour l'poque. L'annonce est un dsastre pour les autres constructeurs, qui doivent s'aligner sur cette nouvelle concurrence. Le problme tant que pour atteindre le niveau fix par Apple, il aurait fallu des annes de recherche pour chaque dveloppeur... C'est pourquoi est cre en Novembre de l'anne 2007, l'Open Handset Alliance (que j'appellerai dsormais par son sigle OHA), et qui comptait sa cration 35 entreprises voluant dans l'univers mobile, dont Google. Cette alliance a pour but de dvelopper un environnement open-source (c'est--dire dont les sources sont disponibles librement sur internet) pour l'exploitation sur mobile et ainsi concurrencer les systmes propritaires, par exemple Windows Mobile et iPhone OS. Android est le logiciel vedette de cette alliance. Il existe l'heure actuelle plus de 80 membres dans l'OHA.

Android est aujourd'hui, en aot 2011, le systme d'exploitation pour smartphones et ardoises le plus utilis. Et le futur d'Android?

Et bien dbut mai 2011, on apprend qu'Android va se lancer dans le domaine de la domotique, c'est--dire contrler et automatiser sa maison travers des machines et des systmes. Imaginez-vous allumer votre tlviseur distance grce votre tlphone puis lancer en mme temps le micro-onde pour qu'il chauffe le pop-corn. Les prvisions en ce qui concerne la distribution d'Android sur le march sont trs bonnes avec de plus en plus de machines

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


qui s'quipent de ce systme. Bientt, il se trouvera dans les tlviseurs (vous avez entendu parler de Google TV peut-tre ?) et les voitures. Android sera partout. Ce serait dommage de ne pas faire partie de a, hein ?

6/89

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

7/89

La philosophie et les avantages d'Android


Le contrat de licence pour Android respecte lidologie open-source, c'est--dire que vous pouvez tout moment tlcharger les sources et les modifier selon vos gots ! Cependant je ne vous le recommande vraiment pas moins que vous sachiez ce que vous faites... Notez au passage qu'Android utilise des bibliothques open-sources puissantes comme par exemple SQLite pour les bases de donnes et OpenGL pour la gestion d'images 2D et 3D. Android est gratuit, autant pour vous, que pour les constructeurs. Vous n'aurez pas payer un kopeck si vous souhaitez vendre un tlphone qui exploite Android, SAUF si vous souhaitez qu'il puisse utiliser lgalement les Google Apps, tels que Google Maps ou l'Android Market par exemple. Toutes les API mises disposition facilitent et acclrent grandement le travail (pensez aussi aux futurs API pour les crans 3D par exemple). Ces APIs sont trs compltes et trs faciles d'accs. De manire un peu caricaturale, on peut dire que vous pouvez envoyer un SMS en seulement deux lignes de code (concrtement, il y a un peu d'enrobage autour de ce code). Une API, ou Interface de Programmation en franais, est un ensemble de rgles et de spcifications que peuvent emprunter des programmes pour discuter ensemble. C'est une interface entre plusieurs logiciels qui leur permet de communiquer. Dans le cas du Google API, il permet de communiquer avec Google Maps en particulier.

L'Android Market est un endroit immense avec beaucoup de visites et de possibilit pour amliorer la visibilit d'une application. Poster son application ne cote que 25$ (soit 17, merci le taux de change !) et elle peut devenir trs vite rentable si vous dveloppez quelque chose d'original ou d'utile ! Le systme est extrmement portable, il s'adapte beaucoup de structures, toutes normment diffrentes. Les smartphones, les ardoises, la prsence ou l'absence de clavier ou de trackball, diffrents processeurs, diffrents crans... On trouve mme des micro-ondes qui fonctionnent l'aide d'Android ! Non seulement c'est un plaisir d'avoir autant de possibilits, mais en plus Android est construit de manire faciliter le dveloppement et la distribution en fonction des composants en prsence dans le terminal (si votre application ncessite d'utiliser le Bluetooth, seuls les terminaux quips de Bluetooth pourront la voir sur le Market). L'architecture d'Android est inspire par les applications composites, et encourage leur dveloppement. Ces applications se trouvent essentiellement sur internet et leur principe est que vous pouvez combiner plusieurs composants totalement diffrents pour obtenir un rsultat surpuissant. Par exemple, si on combine l'appareil photo avec le GPS, on peut poster les coordonnes GPS des photos prises.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

8/89

Les difficults du dveloppement pour des systmes embarqus


Ae, voil un sujet qui en dgotera plus d'un ! Car oui, on ne dveloppe pas pour un smartphone comme on dveloppe pour votre PC de bureau par exemple. Prenons un cas concret: vous avez combien de RAM sur votre ordinateur l maintenant? Moi j'ai 4 Go, ce qui me permet de faire tout ce que veux, et encore, je ne vais peut-tre pas lancer une compression vido (ce qui demande beaucoup de RAM) tout en jouant un jeu vido. Sur mon tlphone, le HTC Desire, j'ai... 512 Mo de RAM. C'est 8 fois moins. Je vous laisse imaginez que a laisse beaucoup moins de libert. C'est pourquoi votre priphrique portable est dit limit, il doit supporter des contraintes qui font doucement sourire votre ordinateur. Voici les principales contraintes prendre en compte quand on dveloppe pour un environnement mobile: Il faut pouvoir interagir avec un systme complet sans l'interrompre. Android fait des choses pendant que votre application est utilise, il reoit des SMS et des appels entre autres. Il faut respecter une certaine priorit dans l'excution des tches. Sincrement, vous allez bloquer les appels de l'utilisateur pour qu'il puisse terminer sa partie de votre jeu de Sodoku ? La taille de l'cran est petite voire minuscule, il faut envisager des solutions pour que tous les utilisateurs puissent lire les informations que vous mettez leur disposition. Il faut adapter l'interface homme-machine ce format, rivaliser d'ingniosit pour fournir un contenu fonctionnel et efficace. La taille du clavier est elle aussi rduite, attendez-vous plus de fautes de frappe que pour une application qui est manipule avec un clavier standard. Par exemple, un module qui fait de lauto-compltion. S'il doit fouiller dans une grosse base de donnes, l'application est peut-tre dj trs lente, mais si en plus chaque frappe il faut renouveler les requtes de rcupration et d'affichage, avec un taux de fautes de frappe si lev, l'utilisateur a vite fait de supprimer votre application qui l'nervera de par sa lenteur. Autre chose qui est directement lie, les interfaces tactiles sont peu pratiques en cas d'utilisation avec un stylet et/ou peu prcises en cas d'utilisation avec les doigts, d'o des contraintes lies la programmation vnementielle plus rigides. En effet, il est possible que l'utilisateur se trompe souvent de boutons. Trs souvent s'il a de gros doigts. Les consquences de telles ngligences peuvent tre terribles pour l'utilisateur. Saturez le processeur et il ne pourra plus rien faire except redmarrer, il ne pourra mme plus recevoir d'appels, ce qui est une norme btise de votre part. Faire crasher une application ne fera en gnral pas compltement crasher le systme, cependant il pourrait bien s'interrompre quelques temps et irriter profondment l'utilisateur. Il faut bien comprendre que dans le paradigme de la programmation classique vous tes dans votre propre monde et vous n'avez vraiment pas grand chose faire du reste de l'univers dans lequel vous voluez, alors que l vous faites partie d'un systme fragile qui volue sans anicroche tant que vous n'intervenez pas. Votre but est de fournir des fonctionnalits de plus ce systme et aussi faire en sorte de ne pas le perturber de manire ngative. Bon je ralise la relecture que je suis trs alarmiste, Android a dj anticip la plupart des neries que vous commettrez et a pris des dispositions pour viter des catastrophes qui conduiront au blocage total du tlphone. Je vous invite lire l'annexe sur l'architecture d'Android pour comprendre un peu pourquoi il faut tre un barbare pour vraiment russir saturer le systme. J'espre vous avoir bien fait comprendre la philosophie d'Android et les contraintes du dveloppement pour mobiles. Autant ce chapitre n'est pas fondamental et vous l'oublierez srement comme votre premier cours en maternelle, autant je ressens le besoin de vous communiquer de genre d'informations dites superflues, mais qui vous permettront si vous le dsirez de comprends le toute la logique qui entoure le dveloppement sous Android .

Confectionnons-nous un environnement de dveloppement


Avant de pouvoir rentrer dans le vif du sujet, nous allons vrifier que votre ordinateur peut supporter la charge du dveloppement pour Android puis le cas chant, on installera tous les programmes et composants ncessaires. Encore mieux, ceux qui ont un terminal sous Android pourront le configurer afin de pouvoir travailler directement avec.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

9/89

Conditions initiales
De manire gnrale, n'importe quel matriel permet de dvelopper sur Android du moment que vous utilisez Windows, Mac OS X ou une distribution Linux. Il y a bien sr certaines limites ne pas franchir. Voyons si votre systme d'exploitation est suffisant pour vous mettre au travail. Pour un environnement Windows, vous aurez besoin de Windows XP au minimum. Sont donc tolrs XP, Vista et 7. Sous Mac, il vous faudra Mac OS 10.5.8 ou plus rcent et un processeur x86. Sous GNU/Linux, je ne peux que recommander une distribution Ubuntu plus rcente que la 8.04 . Enfin de manire gnrale, n'importe quelle distribution convient partir du moment o votre bibliothque GNU C (glibc) est au moins la version 2.7 .

Comme indiqu dans l'introduction du tutoriel, avant d'entamer le cours vous devez matriser les bases de l'informatique, je ne prendrai pas de temps pour vous aider chaque tape basique ! Tout ce que je prsenterai sera dans un environnement Windows 7.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

10/89

Le JDK
En tant que dveloppeur Java vous avez certainement dj install le JDK, cependant on ne sait jamais ! Vous sortez peut-tre d'un formatage ou quoi que ce soit, alors je vais vous rappeler comment l'installer. En revanche, si vous l'avez bien install et que vous tes la dernire version, ne perdez pas votre temps et filez directement la prochaine section ! Un petit rappel technique ne fait de mal personne. Il existe deux plateformes en Java, le JRE ( J ava R untime E nvironment) et le JDK ( J ava Development Kit). Le JRE contient la JVM ( J ava V irtual M achine), les bibliothques de base du langage ainsi que tous les composants ncessaires au lancement d'applications ou d'applets Java. En sorte, c'est l'ensemble d'outils qui vous permettra dexcuter les applications Java. Cependant nous sommes des dveloppeurs, nous avons besoin du JDK car il contient le JRE (afin dexcuter les applications Java), mais aussi un ensemble d'outils pour compiler et dbugger votre code ! Vous trouverez un peu plus de dtails sur la compilation dans l'annexe sur l'architecture d'Android.

Rendez-vous ici et cliquez sur Download ct de Java SE 6 Update xx (on va ignorer Java SE 7 pour le moment).

On vous demande ensuite d'accepter ( Accept License Agreement ) ou de dcliner ( Decline License Agreement ) un contrat de licence, vous devez accepter ce contrat avant de continuer. Choisissez ensuite la version adapte votre ordinateur. Installez le tout l o vous le dsirez. Vous aurez besoin de 200 Mo de libre sur le disque cibl. Et si je veux utiliser un compilateur java alternatif?

Tout ce que je sais, c'est que OpenJDK fonctionne correctement. Aprs, je n'ai pas eu d'chos positifs pour les autres compilateurs.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

11/89

SDK Android
C'est quoi un SDK? Un SDK, qui est traduit en Kit de Dveloppement dans notre langue, est un ensemble d'outils que met disposition un diteur afin de vous permettre de dvelopper des applications pour un environnement prcis. On entend par exemple beaucoup parler de SDK dans le domaine des jeux vido. Ces SDK vous permettent de dvelopper des modifications pour un jeu (rajouter des armes, changer les rgles du jeu, permettre au joueur de vivre une nouvelle histoire, etc). Le SDK Android permet donc de dvelopper des applications pour Android et uniquement pour Android. Pour se le procurer, rendez-vous ici et slectionnez la version dont vous avez besoin. Il existe des instructions en anglais places en-dessous des liens, ne vous y intressez pas, je vous expliquerai la dmarche moi-mme. Au premier lancement, on vous proposera de tlcharger plusieurs paquets. Voici ceux que j'ai retenus (rien ne vous oblige strictement suivre cette dcision, vous serez dans la possibilit de faire vos propres dcisions une fois que vous aurez pris conscience de mon explication qui se situe juste en-dessous de l'image):

Pourquoi ceux-l et pas les autres?

Regardez bien le nom des paquets, vous trouverez qu'ils se ressemblent beaucoup, l'exception prs des nombres qui diffrent d'une ligne l'autre. Cette diffrence s'explique par le fait qu'il existe plusieurs versions de la plateforme Android qui ont t dveloppes depuis sa sortie, et le SDK actuel permet de dvelopper des applications qui fonctionneront sur la version 1.5 et toutes les version qui lui ont succde. A chacune de ces versions, on trouve un numro API<x> associ, avec <x> qui commence 3. J'ai choisi de dlaisser les version prcdent la version 2.1 (l'API 7), tout simplement parce qu'une application dveloppe pour une version ne fonctionne pas automatiquement sur les versions prcdentes d'Android, et si elle est dveloppe pour 2.1, elle fonctionnera sous 2.1, 2.2, 3.1... mais pas forcment pour 1.6 et 1.5 ! A l'heure actuelle, les API dont le numro est suprieur ou gal 11 sont destines aux tablettes graphiques. En thorie, vous n'avez pas vous en soucier, les applications dveloppes avec les autres API fonctionneront. En pratique, Android lancera un mode de compatibilit pour optimiser l'affichage pour les tablettes graphiques ainsi qu'amliorer les performances.

Vous penserez peut-tre qu'il est injuste de laisser de ct les utilisateurs qui sont contraints d'utiliser encore ces anciennes versions, mais sachez qu'ils ne reprsentent que 5% du parc mondial des utilisateurs d'Android. De plus, les changements entre la version 1.6 et la version 2.1 sont trop importants pour tre ignors. Ainsi, toutes les applications que nous dvelopperons fonctionneront sous Android 2.1 minimum. On trouve aussi pour chaque SDK des chantillons de code, samples , qui vous serons trs utiles pour approfondir ou avoir un second regard propos de certains aspects, ainsi qu'une API Google associe.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Dans un premier temps, vous pouvez ignorer ces API, mais sachez qu'on les utilisera par la suite. Si vous avez bien lu, vous avez compris que vous pourriez trs bien vous dbrouiller avec uniquement le SDK pour la version 2.1 pour ce tutoriel, cependant j'ai suppos que vous seriez curieux ou assez motiv l'issue de ce cours pour avoir envie de continuer dvelopper sous Android et pourquoi pas dvelopper pour des versions plus rcentes de l'API. Si vous souhaitez ne pas tlcharger de SDK que vous n'tes pas sr d'utiliser, tlchargez uniquement l'API 7 et ventuellement l'API Google de la mme version.

12/89

Les autres paquets ne sont pas indispensables pour ce cours. Si vous installez tous ces paquets, vous aurez besoin de 1.8 Go sur le disque de destination. Et oui, Le tlchargement prendra un peu de temps.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

13/89

Eclipse
Avant que les partisans d'un autre IDE ne s'emportent, je tiens prciser que si j'ai slectionn Eclipse, c'est tout simplement qu'il est tellement utilis et indiqu pour le dveloppement sur Android qu'il est cit sur le site officiel ddi au dveloppement sur Android. Il n'est pas indispensable d'utiliser Eclipse, vous pouvez aussi trs bien dvelopper vos applications en ligne de commande... Vous pouvez aussi opter pour d'autres IDE comme IntelliJ IDEA par exemple, mais je ne l'ai jamais fait moi-mme. Il n'existe malheureusement pas normment d'IDEs alternatifs. Ils ne sont pas forcment la hauteur compars ces deux monstres: soit ils ne peuvent pas dvelopper pour Android, soit le module qui fait que vous pouvez dvelopper est encore instable ou trop jeune que pour les concurrencer. Cliquez ici pour choisir une version d'Eclipse tlcharger. J'ai personnellement opt pour Eclipse IDE for Java Developers qui est le meilleur compromis entre contenu suffisant et taille du fichier tlcharger. Les autres versions utilisables sont Eclipse IDE for Java EE Developers (je ne vous le recommande pas pour notre cours, il pse plus lourd et on n'utilisera absolument aucune fonctionnalit de Java EE) et Eclipse Classic (qui lui aussi intgre des modules que nous n'utiliserons pas). Il vous faudra 110 Mo sur le disque pour installer la version d'Eclipse que j'ai choisie. L'installation d'Eclipse consiste en une simple extraction, vous n'aurez par consquent aucun raccourci sur le bureau. Je me permets juste de vous conseiller d'en faire un, histoire de ne pas tre embt. Maintenant qu'Eclipse est install, lancez-le. Au premier dmarrage il vous demandera de dfinir un Workspace , un espace de travail, c'est--dire l'endroit o il crera les fichiers indispensables contenant les informations sur les projets. Slectionnez l'emplacement que vous souhaitez. Vous avez maintenant un Eclipse prt fonctionner... mais pas pour le dveloppement pour Android ! Pour cela, on va tlcharger le plug-in (l'extension) Android Development Tools (que j'appellerai dsormais ADT ). Il vous aidera crer des projets pour Android avec les fichiers de base, mais aussi tester, dbugger et exporter votre projet en APK (pour pouvoir partager vos applications). ADT n'est pas la seule extension qui permette de paramtrer Eclipse pour le dveloppement Android, le MOTODEV Studio For Android est plus volu sur certains points. Cependant je n'ai pas encore eu l'occasion de travailler avec, je ne peux donc pas vraiment vous indiquer s'il faut l'utiliser de prfrence.

Allez dans Help puis dans Install New Softwares... (installer de nouveaux programmes). Au premier encart intitul Work with: , cliquez sur le bouton Add... qui se situe juste ct. On va dfinir o tlcharger ce nouveau programme. Dans l'encart Name crivez par exemple ADT et dans location, copiez-collez l'adresse ci-dessous: Citation https://dl-ssl.google.com/android/eclipse/ Avec cette adresse, on indique Eclipse qu'on dsire tlcharger de nouveaux logiciels qui se trouvent cet emplacement, afin qu'Eclipse nous propose de les tlcharger.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

14/89

Cliquez sur OK . Dans le grand champ central, vous verrez crit Pending... , ce qui signifie que vous devez patienter pendant qu'il cherche les fichiers disponibles l'emplacement que vous avez prcis. Ds que Developer Tools apparat la place de Pending... , dveloppez le menu en cliquant sur le triangle ct du carr de slection et analysons les lments proposs.

Android DDMS est l' Android Dalvik Debug Monitor Server , il permet dexcuter quelques fonctions pour vous aider dbugger votre application (simuler un appel ou une position gographique par exemple) et d'avoir accs d'autres informations utiles. L'ADT. Android Hierarchy Viewer qui permet d'optimiser et de dbugger son interface graphique. Android Traceview qui permet d'optimiser et de dbugger son application. Slectionnez tout et cliquez sur Next , nouveau sur Next l'cran suivant puis finalement sur I accept the terms of the license agreements aprs avoir lu les diffrents contrats. Cliquez enfin sur Finish . L'ordinateur tlchargera puis installera les composants. Une fentre s'affichera pour vous dire qu'il n'arrive pas savoir d'o viennent les programmes tlchargs et par consquent qu'il n'est pas sr qu'ils soient fonctionnels et qu'ils ne soient pas dangereux. Cependant, nous savons qu'ils sont srs et fonctionnels alors cliquez sur OK .

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Une fois l'installation et le tlchargement termins, il vous proposera de redmarrer l'application. Faites donc en cliquant sur Restart Now . Voil, il ne vous reste plus qu' indiquer Eclipse o se trouve le SDK ! En effet, vous lui avez fourni les moyens d'utiliser le SDK, mais pas l'emplacement du SDK. Cliquez sur Window puis sur Preferences (dernier choix). Cliquez sur Android gauche, puis sur Browse... pour slectionner l'endroit o est install le SDK. Une fois cela fait, vous aurez un cran de ce style-l :

15/89

C'est fait, Eclipse sait dsormais o trouver le SDK. On n'est pas encore tout fait prt, il nous reste une dernire tape accomplir.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

16/89

L'Android Virtual Device


L' Android Virtual Device , aussi appel AVD , est un mulateur de terminal sous Android, c'est--dire qu'il en simule le comportement. C'est la raison pour laquelle vous n'avez pas besoin d'un terminal sous Android pour tester votre application ! Lancez nouveau Eclipse si vous l'avez ferm. Au cas o vous auriez encore l'cran d'accueil, cliquez sur la croix en haut gauche pour le fermer. Vous aurez un aspect sensiblement identique l'image ci-dessous. Reprez tout d'abord o se trouve la barre d'outils.

Cliquez sur l'icne qui reprsente la mascotte d'Android, Bugdroid .

Surprise ! Vous voici dans l'interface du SDK d'Android ! Cliquez sur New... pour ajouter un nouvel AVD. Une fois sur deux, Eclipse me dit que je n'ai pas dfini l'emplacement du SDK ( Location of the Android SDK has not been setup in the preferences. ). S'il vous le dit aussi, c'est que soit vous ne l'avez vraiment pas fait, auquel cas vous devrez refaire l'opration prcdente, soit Eclipse pipote un peu, auquel cas rappuyez sur le bouton jusqu' ce qu'il abdique.

Vous pouvez crer ici un AVD. Dans Name , mettez un nom pour pouvoir distinguer votre AVD de ceux que vous crerez plus tard. J'ai choisi par exemple Site_Du_Zero_2_1 , car certains caractres comme les accents et les espaces ne sont pas autoriss. Dans Target , choisissez Android 2.1-update1 - API Level 7 puisque j'ai dcid que nous ferons notre premire application sans le Google API et sans les fonctionnalits qu'apportent les versions suivantes d'Android. Laissez les autres options leur valeur par dfaut, nous y reviendrons plus tard quand nous confectionnerons d'autres AVD. Cliquez enfin sur Create AVD et vous aurez une machine prte l'emploi.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

17/89

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

18/89

Test et configuration
Bien, maintenant que vous avez cr un AVD, on va pouvoir vrifier qu'il fonctionne bien. Si vous tes sorti du gestionnaire Android, retournez-y en cliquant sur l'icne Bugdroid , comme nous l'avons fait auparavant. Vous aurez quelque chose de plus ou moins similaire :

Vous y voyez l'AVD que nous venons tout juste de crer. Cliquez dessus pour dverrouiller le menu de droite. tant donn que je ne reviendrai pas sur ces options moi-mme, je vais vous expliquer quoi elles correspondent pour que vous puissiez y accder vous-mme en cas de besoin. Les options du menu de droite sont les suivantes: Edit... vous permet de changer les caractristiques de l'AVD slectionn. Delete... vous permet quant lui de supprimer l'AVD slectionn. Repair... ne vous sera peut-tre jamais d'aucune utilit, il vous permet de rparer un AVD quand le gestionnaire vous indique qu'il faut le faire. La documentation n'abonde pas propos de ce bouton, je ne rentrerai pas dans le dtail ce sujet. Details... lancera une nouvelle fentre qui listera les caractristiques de l'AVD slectionn. Enfin Start... est le bouton qui nous intresse maintenant, il vous permet de lancer l'AVD. On cliquera donc sur le bouton Start... . Une nouvelle fentre se lancera qui devrait ressembler peu ou prou :

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

19/89

Laissez les options vierges pour l'instant, on n'a absolument pas besoin de ce genre de dtails. Cliquez juste sur Launch . En thorie, une nouvelle fentre se lancera et passera par deux crans de chargement successifs.

puis

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

20/89

Enfin, votre terminal se lancera, voici la liste des boutons qui se trouvent dans le menu droite et ce quoi ils servent:

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

21/89

Mais ! L'mulateur n'est pas l'heure ! En plus c'est anglais, et moi et l'anglais a fait... ben zro.

En effet, les machines que vous achetez sont dj configures pour le pays dans lequel vous les avez acquises. Nous allons devoir configurer la machine pour qu'elle rponde nos exigences. Vous pouvez manipuler la partie de gauche avec votre souris, ce qui simulera le tactile. Faites glisser le verrou sur la gauche pour dverrouiller la machine. Vous vous retrouverez sur l'accueil. Cliquez sur le bouton MENU droite (au-dessus du clavier) pour ouvrir un petit menu en bas de l'cran de gauche.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

22/89

Cliquez sur l'option Settings pour ouvrir le menu de configuration d'Android. Vous pouvez y naviguer soit en faisant glisser avec la souris (un clic puis en laissant appuyer on dirige le curseur vers le haut ou vers le bas), soit avec la molette de votre souris. Si par mgarde vous entrez dans un menu non dsir, appuyez sur le bouton Retour prsent prcdemment (une espce de flche qui effectue un demi-tour). On va slectionner l'option Language & keyboard en cliquant dessus. C'est le menu qui vous permet de choisir dans quelle langue utiliser le terminal et quel type de clavier utiliser (par exemple, vous avez certainement un clavier dont les premires lettres forment le mot AZERTY , c'est ce qu'on s'appelle un clavier AZERTY. Oui, oui, les informaticiens ont beaucoup d'imagination).

Puis, vous allez cliquer sur Select locale . Dans le prochain menu, il vous suffit de slectionner la langue dans laquelle vous prfrez utiliser Android. J'ai personnellement choisi Franais (France) . Voil, un problme de rgl ! Maintenant j'utiliserai les noms franais des menus pour vous orienter. Pour revenir en arrire, il faut appuyer sur le bouton Retour du menu de droite. Votre prochaine mission si vous l'acceptez sera de changer l'heure pour qu'elle s'adapte la zone dans laquelle vous vous trouvez, et ce, par vous-mme. En France nous vivons dans la zone GMT + 1. A l'heure o j'cris ce cours, nous sommes en heure d't, il y a donc une heure encore rajouter. Ainsi, si vous tes en France, en Belgique ou au Luxembourg et en heure d't, vous devez slectionner une zone GMT + 2. Sinon GMT + 1 pour l'heure d'hiver. Le but est bien entendu de vous permettre de dcouvrir le systme par vous-mme et de vrifier que vous avez bien compris comment vous dplacer dans l'environnement Android. Secret (cliquez pour afficher)

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Cliquez d'abord sur Date & heure , dslectionnez Automatique , puis cliquez sur Dfinir fuseau horaire et slectionnez le fuseau qui vous concerne.

23/89

Trs bien, votre terminal est maintenant bientt compltement configur, nous allons juste vrifier qu'il est apte la programmation. Toujours dans le menu de configuration, allez chercher Applications et cliquez dessus. Cliquez ensuite sur Dveloppement et vrifiez que tout est bien activ comme suit:

Vous l'aurez remarqu de vous-mme, la machine est lourde, trs lourde, autant dire tout de suite que c'est beaucoup moins confortable manipuler qu'un vrai terminal sous Android.

Si vous comptez faire immdiatement le prochain chapitre qui vous permettra de commencer - enfin - le dveloppement, ne quittez pas la machine. Dans le cas contraire, il vous suffit de rester appuy sur le bouton Verrouiller / teindre puis de vous laisser guider.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

24/89

Configuration du vrai terminal


Maintenant on va s'occuper de notre vrai outil, si vous en avez un !

Tlcharger le driver
Tout d'abord, vous devez tlcharger les drivers (pilotes informatiques, c'est--dire un fichier qui indique votre ordinateur comment utiliser un matriel) adapts votre terminal. Je peux vous donner la dmarche suivre pour certains terminaux, mais pas pour tous... En effet, chaque appareil a besoin de drivers adapts, et ce sera donc vous de les tlcharger. Cependant, il existe des pilotes gnriques qui peuvent fonctionner sur certains appareils. Je vous les ai fait tlcharger par dfaut. Par rapport au rpertoire o vous avez install le SDK on peut les trouver l'emplacement suivant : Citation \android-sdk\extras\google\usb_driver

Pour les terminaux HTC, les drivers sont fournis dans le logiciel HTC Sync. Vous pouvez le tlcharger ici.

Configuration du terminal
Tout naturellement, vous devez configurer votre tlphone comme on a configur l'mulateur :

Et aprs ?
Ben rien ! La magie de l'informatique opre, tout devrait se faire de manire automatique (tout du moins sous Windows 7, dsol pour les autres). Afin de vrifier que tout marche, le mieux est encore de relier le terminal l'ordinateur. Vous avez dsormais un environnement de travail qui vous permette de crer des projets, de tester ces projets et de les dbugger. Il faut faudra moins de 2,11 Go pour tout installer. Ds le prochain chapitre on crera une petite application et on la dcortiquera.

Premire application, celle qui vous rapportera des millions


Ce chapitre est trs important. Il vous permettra d'enfin mettre la main la pte mais surtout, on abordera la notion de cycle d'une activit, qui est la base d'un programme pour Android. Si pour vous un programme en Java dbute forcment par un Main, vous risquez d'tre surpris . Une grande partie des applications Android que vous dvelopperez contiendront une ou plusieurs activits, c'est pourquoi il est totalement indispensable que vous maitrisiez ce concept.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

25/89

Activit et vue
Qu'est-ce qu'une activit ?
Analysons un petit peu l'architecture d'une application Android. Si vous regardez par exemple le Market, vous avez plusieurs crans l'intrieur mme de l'application : la liste des applications les plus tlcharges, la liste des applications que vous possdez dj, le systme qui permet de rechercher des applications, etc. Ces diffrents crans sont des activits. On sait que ce sont diffrentes activits parce qu'on passe d'un cran un autre. Une application peut possder plusieurs activits, mais n'en affiche qu'une la fois. Attention cependant, on ne diffrencie pas des activits que parce qu'elles n'ont pas la mme interface graphique ! Une interface graphique peut trs bien tre dynamique, dans quelques leons on s'amusera par exemple faire grossir puis rapetisser des boutons, l'interface graphique sera donc diffrente, mais on sera toujours dans la mme activit. De plus, un programmeur peut faire plusieurs activits avec la mme interface graphique pour une raison ou pour une autre. On peut considrer une activit comme un support sur lequel se grefferont les lments de l'interface graphique, en ce sens qu'elle permet aux lments de l'interface graphique de se greffer dessus. Cependant, ce n'est pas son rle que de crer et de disposer les lments graphiques, elle n'est que lchafaudage. En revanche, elle s'occupera de dfinir les comportements que doivent adopter les lments de l'interface graphique. C'est donc l'activit qui dtermine le comportement d'une page, mais pas son esthtique. Comme il est plus ais de comprendre l'aide d'exemples, imaginez-vous que vous naviguez sur internet avec votre tlphone, le tout en coutant la musique qu'met ce mme tlphone. Il se passe deux choses videntes dans votre systmes : La navigation permise par une interface graphique (la barre d'adresse et le contenu de la page web au moins). La musique, qui est diffuse en fond sonore, mais sur laquelle l'utilisateur ne peut agir l'aide d'une interface graphique puisque l'utilisateur navigue en mme temps ! Dans cette configuration, le navigateur web est une application qui affiche une activit, alors que le lecteur audio est aussi une application mais qui n'affiche pas d'activit. En revanche, l'utilisateur peut s'il le dsire quitter le navigateur pour aller voir l'interface graphique du lecteur audio afin d'arrter la musique, et l la page qui affiche les contrles du lecteur est une activit. Le lecteur propose certainement d'autres activits, dont une qui permet l'utilisateur de choisir la chanson qu'il veut sur la carte SD du tlphone.

tats d'une activit


Comme je vous l'ai dj dit, si un utilisateur reoit un appel il devient plus important qu'il puisse y rpondre que d'couter la chanson que votre application diffuse. Pour pouvoir toujours rpondre ce besoin, les dveloppeurs d'Android ont pris deux dcisions : A tout moment votre application peut laisser place d'autres priorits. Si votre application utilise trop de ressources systme, alors elle empchera le systme de fonctionner correctement et Android pourra dcider de l'arrter sans coup de semonce. Votre activit existera dans plusieurs tats au cours de sa vie, par exemple un tat actif pendant lequel l'utilisateur l'exploite, et un tat de pause quand l'utilisateur reoit un appel. En fait, quand une application se lance, elle se met tout en haut de ce qu'on appelle la pile d'activit. Une pile est une structure de donnes de type FIFO ( First In, First Out ), c'est--dire qu'on a accs qu' un seul lment de la pile, le tout premier lment, aussi appel sommet . Quand on ajoute un lment cette pile, il prendra la premire place et deviendra le nouveau sommet. Quand on veut supprimer un lment, ce sera le sommet qui sera supprim et l'objet en seconde place deviendra le nouveau sommet. L'activit que voit l'utilisateur est celle qui se trouve au-dessus de la pile. C'est pourquoi quand un appel arrive, il se place au sommet de la pile et c'est lui qui s'affiche la place de votre application, qui n'est plus qu' la seconde place. Votre activit reviendra uniquement partir du moment o toutes les activits qui se trouvent au-dessus d'elle s'arrtent et sortent de la pile. Une activit peut se trouver dans 3 tats qui se diffrencient surtout par sa visibilit tat Visibilit Description Elle est sur le dessus de la pile, c'est ce que l'utilisateur consulte en ce moment mme et il peut l'utiliser dans son intgralit. C'est cette application qui a le focus , c'est--dire que l'utilisateur agit directement sur l'application. Ce n'est pas sur cette activit qu'agit l'utilisateur. L'application n'a plus le focus, c'est l'application sus-jacente qui l'a. Pour que notre application rcupre le focus,

Active ( active Elle est visible en totalit. ou running )

Suspendue

L'activit est partiellement visible l'cran. C'est le cas quand vous recevez un SMS et

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Suspendue qu'une fentre semi-transparente se pose devant ( paused votre activit pour afficher le contenu du ) message et vous permettre d'y rpondre par exemple. l'utilisateur devra se dbarrasser de l'application qui l'obstrue, puis l'utilisateur pourra nouveau interagir avec. Si le systme a besoin de mmoire, il peut trs bien tuer l'application (cette affirmation n'est plus vraie si vous utilisez un SDK avec l'API 11 minimum). L'application n'a videmment plus le focus, puisque l'utilisateur ne peut pas la voir, il ne peut pas agir dessus. Le systme retient son tat pour pouvoir reprendre mais il peut arriver que le systme tue votre application pour librer de la mmoire systme.

26/89

Arrte L'activit est tout simplement oblitre par une ( stopped autre activit, on ne peut plus la voir du tout. )

Notez bien que les couleurs de ce tableau sont assorties aux tats associs dans le schma ci-dessous.

Cycle de vie d'une activit


Une activit n'a pas de contrle direct sur son propre tat (et par consquent vous non plus en tant que programmeur), il s'agit plutt d'un cycle rythm par les interactions avec le systme et d'autres applications. Voici un schma qui prsente ce que l'on appelle le cycle de vie d'une activit , c'est--dire qu'il indique les tapes que va traverser notre activit pendant sa vie, de sa naissance sa mort. Vous verrez que chaque tape du cycle est reprsente par une mthode. Nous verrons comment utiliser ces mthodes en temps voulu.

Directement traduit partir d' un contenu fourni par Google

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Les activits hritent de la classe Activity . Or, la classe Activity hrite de l'interface Context dont le but est de reprsenter tout ce qui peut tre une application . Cette information peut vous sembler futile, mais elle est loin de l'tre, sachez-le.

27/89

Les vues (que nos amis anglais appellent view ), sont ces fameux composants qui viendront se greffer sur notre chaudage, il s'agit de l'unit de base de l'interface graphique. Leur rle est de fournir du contenu visuel avec lequel il est ventuellement possible d'interagir. A l'instar de l'interface graphique avec Swing, il est possible de mettre en page les vues l'aide de conteneurs. Les vues hritent de la classe View .

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

28/89

Cration d'un projet


Lancez Eclipse. Tout d'abord localisez l'emplacement de la barre d'outils d'Eclipse. Pour lancer la cration d'un projet l'aide de lassistant de cration, cliquez sur le bouton de gauche de la barre d'outils consacre Android.

Une fentre s'ouvrira, vous pouvez la remplir comme ceci par exemple. Dans la suite de ce chapitre je considrerai que vous l'avez fait.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

29/89

Voici ce que signifient tous les champs : Project name est le nom de votre projet dans Eclipse. Ce champ n'influence pas du tout le projet en lui-mme, juste le nom sous lequel Eclipse connait ce projet. Le vrai nom de notre application, celui que reconnaitra Android, peut trs

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


bien n'avoir aucune similitude avec ce que vous mettrez dans ce champ. Contents le contenu, la premire option vous permet de crer un projet partir de zro, la seconde d'utiliser des fichiers sources qui existent dj. Par exemple si une personne a cod une application et qu'elle vous donne les sources, vous pourrez les importer dans un nouveau projet avec cette option. Nous allons crer un nouveau projet de toute pice, nous choisirons donc la premire option. Vous trouverez ensuite une case coche par dfaut. Si vous la laissez ainsi, le projet sera cr l'endroit que l'on a dfini comme Workspace au premier lancement d'Eclipse, emplacement qui est rappel juste en-dessous. Si vous dcochez cette case, les fichiers seront crs un endroit que vous devrez spcifier. La troisime et dernire option crera un projet partir des chantillons que vous avez tlchargs avec le SDK, si vous l'avez fait. Utile pour les dissquer et en tudier le comportement dans l'AVD ! Build Target est la version d'Android pour laquelle sera compile votre application. J'avais dcrt que je voulais que mon application utilise l'API 7, c'est pourquoi j'ai choisi de compiler mon application pour la version 2.1 d'Android. Properties vous permettra tout d'abord de choisir le nom de votre application avec Application name . Cette fois-ci, il s'agit du nom qui apparatra sur l'appareil et... dans le Market pour vos futures applications ! Choisissez donc un nom qui semble correct, original et judicieux. J'ai choisi Preums. Oui bon. Il faudra ensuite choisir dans quel package ira notre application. Pour rappel, un package est un quivalent hirarchis des espaces de nommage. Imaginez, vous voulez faire deux classes qui s'appellent X . Vous vous rendez bien compte qu'on ne pourra pas diffrencier les deux classes si on doit instancier un objet d'un des deux types X , Java se demandera de laquelle des deux classes vous souhaitez parler puisqu'elles ont le mme nom. Ce serait comme avoir deux fichiers avec le mme nom et la mme extension dans un mme rpertoire ! C'est impossible parce que ce serait incohrent. Pour contrer ce type de dsagrments, on organise les classes en packages. Comme a vous pourrez avoir deux classes X , dans les packages Y et Z par exemple, et vous pourrez ainsi les utiliser en prcisant dans quel package se trouve la classe X dont vous avez besoin, avec la syntaxe Y.X pour la classe X qui se trouve dans le package Y et Z.X pour la classe X qui se trouve dans le package Z . De plus, les packages peuvent avoir des parents afin d'avoir toute une hirarchie de packages. Par exemple (totalement farfelu) Web.Affichage.Image , Web.Affichage.Video et Web.Telechargement pour le code source d'un navigateur internet. J'ai choisi de rassembler tous mes codes relatifs au Site Du Zro dans le package sdz et tout ce qui est relatif au chapitre un dans chapitreUn . Ce package doit tre unique et ne pas exister sur le Market si vous souhaitez y mettre votre application. Le prochain encart Create Activity permet de choisir si vous voulez crer automatiquement une activit. Nous verrons plus tard ce qu'est une activit, pour l'instant sachez juste que le nom de l'activit peut s'appeler un peu comme vous le dsirez (donc dans notre exemple, rien ne nous oblige mettre Preums dans le nom, ni de le terminer par Activity ). Dans Min SDK Version on choisit quelle est la version minimum du SDK qui est accepte. Si l'utilisateur possde une version d'Android en-dessous de cette indication, il ne pourra pas la tlcharger depuis le Market. Il faut que vous compreniez que ce chiffre est une indication pour indiquer au Market quelles versions il ne faut absolument pas fournir cette application, les versions pour lesquelles l'application est destine. Ce chiffre permet aussi Android de savoir si le systme doit s'adapter ou non. Si une application utilise l'API 7 et que le terminal est l'API 13, un mode de compatibilit s'enclenchera afin de tenter d'amliorer les performances de l'application. Pour finaliser la cration, cliquez sur Finish .

30/89

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

31/89

Un non-"Hello world!"
Vous trouverez les fichiers crs dans le Package Explorer .

On trouve notre premier grand rpertoire src/ , celui qui contiendra tous les fichiers sources .java . Ouvrez le fichier PreumsActivity.java . Les autres fichiers ne nous regardent pas pour l'instant. Voici le contenu de ce fichier: Code : Java package sdz.chapitreUn.preums; import android.app.Activity; import android.os.Bundle; public class PreumsActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }

Ah ! On reconnait des termes que je viens tout juste d'expliquer ! Je vais prendre toutes les lignes une par une histoire d'tre certain de ne dstabiliser personne.

Package
Code : Java package sdz.chapitreUn.preums;

L on dclare que notre programme se situe dans le package sdz.chapitreUn.preums , comme expliqu prcdemment. Si on veut faire rfrence notre programme, il faudra faire rfrence ce package.

Import
Code : Java import android.app.Activity; import android.os.Bundle;

On importe deux classes qui se trouvent dans deux packages diffrents : les classes Activity et Bundle.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

32/89

Class
Code : Java public class PreumsActivity extends Activity { ... }

Comme indiqu dans la section prcdente, une activit drive de la classe Activity.

onCreate
Code : Java @Override public void onCreate(Bundle savedInstanceState) { ... }

Le petit @Override permet d'indiquer que l'on va redfinir une mthode qui existait auparavant, ce qui est logique puisque vous saviez dj qu'une activit avait une mthode void onCreate() et que notre classe hrite de Activity. Cette mthode est la premire qui est lance au dmarrage d'une application, mais elle est aussi appele aprs qu'une application se soit faite tue par le systme en manque de mmoire ! C'est cela que sert l'attribut de type Bundle : S'il s'agit du premier lancement de l'application ou d'un dmarrage alors qu'elle avait t quitte normalement, il vaut null . Mais s'il s'agit d'un retour l'application aprs qu'elle a perdu le focus et a redmarr, alors il pourra contenir un tat sauvegard de l'application que vous aurez pris soin de constituer. Par exemple, l'utilisateur sera content si la chanson qu'il coutait reprenait exactement l'endroit o elle s'est arrte avant d'tre sauvagement interrompue par un appel. Dans cette mthode, vous devez dfinir ce qui doit tre recr chaque fois que l'application est lance aprs que l'utilisateur en soit sorti (volontairement ou non), donc l'interface graphique et toutes les variables initialiser par exemple.

Super !
Code : Java super.onCreate(savedInstanceState);

L'instruction super signifie qu'on fait appel une mthode ou un attribut qui appartient la superclasse de la mthode actuelle, autrement dit la classe juste au-dessus dans la hirarchie de l'hritage, c'est--dire la classe Activity. Ainsi, super.onCreate fait appel au onCreate de la classe Activity, mais pas au onCreate de PreumsActivity. En fait, le onCreate de la classe Activity va procder des initialisations partir de ce fichier. Il gre bien entendu le cas o le Bundle est null . Cette instruction est obligatoire.

setContentView
Code : Java setContentView(R.layout.main);

Cette ligne trouvera son explication au sein du prochain chapitre. Sachez juste qu'en dpit de son aspect trange, elle a un sens bien prcis. Pour l'instant, remplacez toute la classe par celle-ci: Code : Java public class PreumsActivity extends Activity {

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


{ TextView coucou = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); coucou = new TextView(this); coucou.setText("Bonjour, vous me devez 1 000 000."); setContentView(coucou);

33/89

Nous avons rajout un attribut de classe que j'ai appel coucou. Cet attribut est de type TextView , j'imagine que le nom est dj assez explicite . Il s'agit d'une vue ( View )... qui reprsente un texte ( Text ). Tout simplement. La mthode public void setContentView (View vue) sert faire en sorte que l'interface graphique associe l'activit soit la vue passe en paramtre.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

34/89

Lancement de l'application
Vous vous souvenez, je vous ai dit de ne pas fermer votre AVD de prfrence ? Vous verrez que a vous conomisera un temps considrable, celui de lancement de l'AVD, ce qui n'est pas ngligeable. Si vous l'avez ferm ce n'est pas grave, il s'ouvrira tout seul, mais que c'est lent... Pour lancer notre application, regardez la barre d'outils d'Eclipse.

Et cherchez cet encart-l :

Il vous suffit de cliquer sur le deuxime bouton (celui qui ressemble au symbole play ). Une fentre s'ouvrira pour vous demander comment excuter l'application. Slectionnez Android Application .

Si vous avez plusieurs terminaux, l'cran suivant s'affichera (sauf si vous n'avez pas de terminal de connect, auquel cas on passe directement l'cran suivant) :

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

35/89

On vous demande sur quel terminal vous voulez faire le test. A vous de voir. Une fois le test fait, cliquez sur OK . Regardez votre terminal de test et voil ! L'utilisateur (naf) vous doit 1 000 000 !

Voil, vous pouvez reprendre votre souffle, l'immonde cycle de vie des activits a t abord. Il est indispensable de le comprendre, et ce pourrait tre une bonne ide de le retenir un minimum aussi. J'avoue, l'intrt des applications que vous pouvez dvelopper est assez limit. En fait le problme est que vous ne savez pour l'instant ne mettre qu'une vue par activit. Dans le prochain chapitre, on apprendra quelles sont les mthodes pour lier une activit et une vue. De plus, on comprendre ce que signifie l'trange commande setContentView(R.layout.main);.

Les ressources (gnralits)


www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Je vous ai dj prsent le rpertoire src/ qui contient toutes les sources de votre programme. On va maintenant s'intresser un autre grand rpertoire: res/ . Vous l'aurez compris, c'est dans ce rpertoire que sont conserves les ressources, autrement dit les lments qui s'afficheront l'cran ou qui influenceront ce qui s'affichera l'cran. Android est destin tre utilis sur un trs grand nombre de supports diffrents, et il faut par consquent s'adapter ces supports. Imaginons qu'une application ait afficher une image. Si on prend une petite image, pour qu'elle n'ait pas une dimension ridicule sur un grand cran il faut lagrandir. Mais en faisant, l'image perdra presque certainement en qualit. Une solution serait donc d'avoir une image pour les petits crans, une pour les crans moyens et une pour les grands crans. On parlera beaucoup de fichiers XML dans ce chapitre. Si vous ignorez ce dont il s'agit, lisez imprativement le paragraphe ci-dessous, sinon, vous pouvez passer directement au second.

36/89

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

37/89

Le format XML
Le XML est un langage de balisage un peu comme HTML qui en est en fait driv. Le principe d'un langage de balisage est qu'on ne cherche travers ces fichiers qu' donner des informations, exprimer des donnes, pas faire des calculs comme en C ou en Java. Les fichiers qui respectent la syntaxe d'un langage de balisage ne font rien en eux-mmes, il faut qu'ils soient interprts pour rvler leur intrt. Par exemple pour le HTML, c'est un navigateur qui interprte le code afin de donner un sens aux instructions ; si vous lisez un document HTML sans interprteur, vous ne verrez que les sources, pas l'interprtation des balises. Comme pour le format HTML, un fichier XML dbute par une dclaration qui permet d'indiquer qu'on se trouve bien dans un fichier XML. Code : XML <?xml version="1.0" encoding="utf-8"?>

Cette ligne permet d'indiquer que: On utilise la version 1.0 de XML. On utilise l'encodage des caractres qui s'appelle utf-8 , c'est une faon de dcrire les caractres que contiendra notre fichier. Je vais maintenant vous dtailler un fichier qui pourrait exister dans la ralit. Code : XML <?xml version="1.0" encoding="utf-8"?> <bibliotheque> <livre style="fantaisie"> <auteur>George R. R. MARTIN</auteur> <titre>A Game Of Thrones</titre> <langue>klingon</langue> <prix>10.17</prix> </livre> <livre style="aventure"> <auteur>Alain Damasio</auteur> <titre>La Horde Du Contrevent</titre> <prix devise="euro">9.40</prix> <recommandation note="20"/> </livre> </bibliotheque>

L'lment de base du format XML est la balise. Elle commence par un chevron ouvrant < et se termine par un chevron fermant > . Entre ces deux chevrons, on trouve au minimum un mot. Par exemple <bibliotheque>. Cette balise s'appelle balise ouvrante , autant vous dire tout de suite qu'il faudra la fermer cette balise ! Il existe deux manires de fermer une balise ouvrante : Soit par une balise fermante </bibliotheque>, auquel cas vous pourrez avoir du contenu entre la balise ouvrante et la balise fermante. tant donn que notre bibliothque est destine contenir plusieurs livres, nous avons opt pour cette solution. Soit on ferme la balise directement dans son corps <bibliotheque />. La seule diffrence est que comme il n'y a pas de balise fermante, on ne peut pas mettre de contenu entre deux balises. Dans notre exemple, nous avons mis la balise <recommandation note="20"/> sous cette forme par choix, mais nous aurions tout aussi bien pu utiliser <recommandation>20</recommandation>. Ce type d'informations, qu'il soit ferm par une balise fermante ou qu'il n'en n'ait pas besoin, s'appelle un nud . Vous voyez donc que l'on a un nud appel bibliothque, deux nuds appels livre, etc. Rappelez-vous, le format XML n'a pas de sens en lui-mme. L, notre nud s'appelle bibliothque, on en dduit, nous humains, qu'il reprsente une bibliothque, mais si on avait dcid de l'appeler fkldjsdfljsdfkls, il aurait autant de sens au niveau informatique. C'est vous d'attribuer un sens votre fichier XML au moment de l'interprtation. Le nud bibliothque, qui est le nud qui englobe tous les autres nuds, s'appelle la racine . Il y a dans un fichier XML au moins une racine et au plus une racine. On peut tablir toute une hirarchie dans un fichier XML. En effet, entre la balise ouvrante et la balise fermante d'un nud on peut mettre d'autres nuds. Les nuds qui se trouvent dans un autre nud s'appellent des enfants de ce nud, et le nud encapsulant s'appelle le parent .

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Les nuds peuvent avoir des attributs pour indiquer des informations, comme pour le nud prix qui a l'attribut devise , afin de prciser en quelle devise est exprim ce prix : <prix devise="euro">9.40</prix> pour La Horde Du Contrevent qui vaut 940. Vous remarquerez que pour A Game Of Thrones , on a aussi le nud prix , mais il n'a pas l'attribut devise ! C'est tout fait cohrent, c'est juste que dans mon interprteur (que je ne vous montrerai pas puisqu'on s'en fiche) si la devise est prcise alors je considre que le prix est exprim en cette devise, mais si l'attribut devise n'est pas prcis, alors le prix est en dollars. A Game Of Thrones vaut 10$17 et La Horde Du Contrevent vaut lui 940 . Le format XML en lui-mme ne peut pas dtecter si l'absence de l'attribut devise est une anomalie ou non, a retirerait toute la libert que permet le format. En revanche, le XML est intransigeant sur la syntaxe. Si vous ouvrez une balise, n'oubliez pas de la fermer ! N'hsitez pas revenir ici en cas de besoin.

38/89

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

39/89

Les diffrents types de ressources


Les ressources sont des lments capitaux dans une application Android. On y trouve par exemple des chanes de caractres ou des images. Comme Android est destin tre utilis sur une grande varit de supports, il fallait trouver une solution pour permettre une application de s'afficher de la mme manire sur un cran 7" que sur un cran 10", ou faire en sorte que les textes s'adaptent la langue de l'utilisateur. C'est pourquoi on organise les diffrents lments qui doivent s'adapter de manire trs prcise, de faon ce qu'Android sache quels lments utiliser pour quels types de terminaux. On dcouvre les ressources travers une hirarchie particulire de rpertoires. Vous pouvez remarquer qu' la cration d'un nouveau projet, Eclipse cre certains rpertoires par dfaut.

Je vous ai dj dit que les ressources taient divises en plusieurs types. Pour permettre Android de retrouver facilement ces types, chaque type de ressources est associ un rpertoire particulier. Voici un tableau qui vous indique les principales ressources que l'on peut trouver, avec le nom du rpertoire associ. Vous remarquerez que tous les rpertoires ne sont pas crs par dfaut, c'est parce que ne sont crs que les rpertoires les plus courants. Type Description Analyse syntaxique

Dessin et image On y trouve les images matricielles (les images du type .PNG , .JPEG ou encore .GIF). ( On y trouve aussi des fichiers XML dont le contenu dcrit des formes ou des dessins. res/drawable ) Mise en page ( res/layout ) Menu ( res/menu ) Les fichiers XML qui reprsentent la disposition que doivent adopter les vues (on abordera cet aspect, qui est trs vaste, dans le prochain chapitre).

Oui

Exclusivement

Les fichiers XML pour pouvoir constituer des menus.

Exclusivement

Donnes diverses au format brut. Ces donnes n'ont pas de mthodes spcifiques dans Donne brut Android pour les traiter. On peut imaginer y mettre de la musique ou des fichiers HTML ( res/raw ) par exemple. Donne ( res/values )

Le moins possible

Il est plus difficile de cibler les ressources qui appartiennent cette catgorie tant elles sont nombreuses. On y trouve entre autre des chaines de caractres, des dimensions, des Exclusivement couleurs, ...

La colonne Analyse syntaxique indique la politique adopter pour les fichiers XML de ce rpertoire. Elle vaut : Exclusivement si les fichiers de cette ressources sont tout le temps des fichiers XML. Oui si les fichiers peuvent tre d'un autre type qu'XML, en fonction de ce qu'on veut faire.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Le moins possible si les fichiers doivent de prfrence ne pas tre de type XML. Un fichier XML se trouvera dans ce rpertoire uniquement s'il n'a pas sa place dans un autre rpertoire. Il existe d'autres rpertoires pour d'autres types de ressources, mais je ne vais pas toutes vous les prsenter. De toute manire, on peut dj faire des applications complexes avec ces ressources-l. Ne mettez pas de ressources directement dans res/ , sinon vous aurez une erreur de compilation !

40/89

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

41/89

L'organisation
Mais pourquoi tu nous dis que les drawables se trouvent dans le rpertoire res/drawable , alors que sur l'image on voit clairement que tu as 3 rpertoires res/drawable-hpdi , res/drawable-ldpi et res/drawable-mdpi ? Je vous ai dit qu'on aurait plusieurs ressources en fonction du matriel. Les emplacements indiqus dans le tableau prcdent sont les emplacements par dfaut, mais il est possible de dfinir d'autres emplacements pour prciser le matriel de destination afin de se conformer au matriel de l'utilisateur. Il y a une syntaxe trs prcise respecter pour qu'Android sache dans quel rpertoire il doit fouiller. En partant du nom du rpertoire par dfaut, on va crer d'autres rpertoires qui permettent de prciser quels types de matriels les ressources de ce rpertoire sont destines. Les restrictions sont reprsentes par des quantificateurs et ce sont ces quantificateurs qui vont permettront de prciser le matriel de destination. La syntaxe respecter peut-tre reprsente ainsi res/<type_de_ressource>[<-quantificateur>]? . Autrement dit, on peut n'avoir aucun quantificateur si l'on veut dfinir l'emplacement par dfaut, ou en avoir un pour rduire le champ de destination, deux pour rduire encore plus, etc. Ces quantificateurs sont spars par un tiret. Si Android ne trouve pas d'emplacement dont le nom corresponde exactement aux spcifications techniques du terminal, il cherchera parmi les autres rpertoires qui existent la solution la plus proche. Voici la liste des principaux quantificateurs (il y en a 14 en tout, dont un bon paquet qu'on utilise que rarement, j'ai donc dcid de les ignorer) : Priorit Quantificateur Fourchette de donnes Description

Langue et rgion

Exemples: en pour anglais. fr pour franais. fr-rFR pour franais mais uniquement le franais utilis en France. fr-rCA pour franais mais uniquement le franais utilis au Qubec. ...

La langue du systme de l'utilisateur. On indique une langue puis, ventuellement, on peut prciser une rgion avec -r .

Taille de l'cran

small normal large xlarge

Il s'agit de la taille de la diagonale de l'cran.

Orientation de l'cran

port land

Port est le diminutif de portrait , donc quand le terminal est en mode portrait . Land est le diminutif de landscape , donc quand le terminal est en mode paysage. ldpi: environ 120 dpi. mdpi: environ 160 dpi. hdpi: environ 240 dpi. xhdpi: environ 320 dpi (disponible partir de l'API 8 uniquement). nodpi: pour ne pas redimensionner les images matricielles.

Rsolution de l'cran

ldpi mdpi hdpi xhdpi nodpi

14

Version d'Android

Exemple: v3 v5 v7 ...

Le niveau de l'API.

Dans les rpertoires vus prcdemment, que se passe-t-il si l'cran du terminal de l'utilisateur a une grande rsolution ? Android ira chercher dans res/drawable-hpdi ! L'cran du terminal de l'utilisateur a une petite rsolution ? Il ira chercher dans res/drawable-ldpi ! L'cran du terminal de l'utilisateur a une trs grande rsolution ? Et bien... il ira chercher dans

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


res/drawable-hpdi puisqu'il s'agit de la solution la plus proche de la situation matrielle relle.

42/89

Exemples et rgles suivre


res/drawable-small pour avoir des images spcifiquement pour les petits crans. res/layout-fr-rFR pour avoir une mise en page spcifique destine ceux qui ont choisi la langue Franais (France). res/values-fr-rFR-port pour des donnes qui s'afficheront uniquement ceux qui ont choisi la langue Franais (France) et dont le tlphone se trouve en orientation portrait. res/values-port-fr-rFR n'est pas possible, il faut mettre les quantificateurs par ordre croissant de priorit. res/layout-fr-rFR-en n'est pas possible puisqu'on a deux quantificateurs de mme priorit et qu'il faut toujours respecter l'ordre croissant des priorits. Il faut crer un rpertoire pour le franais et un rpertoire pour l'anglais. Tous les rpertoires de ressources qui sont diffrencis par des quantificateurs devront avoir le mme contenu, puisqu'on indiquera Android de quelle ressource on a besoin, on indiquera le type de ressource, mais on ne se proccupera pas de choisir dans quel rpertoire aller le chercher, Android le fera trs bien pour nous. Vous voyez que notre icne se trouve dans les trois rpertoires drawable , sinon Android ne pourrait pas la trouver pour les trois types de configuration.

Mes recommandations
Voici les rgles que je respecte pour chaque projet. res/drawable-hdpi . res/drawable-ldpi . res/drawable-mdpi . Pas de res/drawable . res/layout-land . res/layout . Une mise en page pour chaque orientation, et des images adaptes pour chaque rsolution. Le quantificateur de l'orientation est surtout utile pour la mise en page. Le quantificateur de la rsolution lui sert plutt ne pas avoir ajuster une image et par consquent ne pas perdre de qualit. Pour finir, sachez que les crans de taille small se font rares.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

43/89

Ajouter un fichier avec Eclipse


Heureusement, les dveloppeurs de l'ADT sont de bonnes personnes, et ont cr un petit menu qui vous aidera crer des rpertoires de manire simple, sans avoir retenir de syntaxe. Par contre il vous faudra parler un peu anglais, je le crains. Faites un clic droit sur n'importe quel rpertoire ou fichier de votre projet. Vous aurez un menu un peu similaire celui que reprsente l'image suivante qui s'affichera:

Dans le sous-menu New , cliquez sur Android XML File . Si vous ne le trouvez pas, allez dans Other... puis cherchez le dans le rpertoire Android . Cette opration ouvrira un assistant de cration de fichiers XML.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

44/89

Le premier champ vous permet de slectionner dans quel projet vous souhaitez ajouter le fichier. Le bouton Browse... vous aidera slectionner un projet. Le champ File vous permet quant lui de choisir le nom du fichier crer. La liste suivante, avec les boutons radios, vous permet de slectionner quel type de ressources vous intresse. Vous retrouverez les noms des ressources que nous avons dcrites dans le premier tableau, l'exception de raw . Logique, nous allons crer un fichier XML et les fichiers XML devraient en thorie ne pas se situer dans ce rpertoire. La section suivante contient deux listes. La liste de gauche prsente les quantificateurs appliquer au rpertoire de destination. Vous voyez qu'ils sont rangs dans l'ordre de priorit que j'ai indiqu. Ceux que vous connaissez sont: Language pour la langue. Region pour la rgion. Il s'agit d'un paramtre qui est facultatif mais s'il est prsent, il est toujours associ une langue. Essayez de mettre une rgion sans une langue et Eclipse vous grondera. Il faut crire la rgion sans le r. Size est la taille de l'cran. Orientation est l'orientation de l'cran. Density pour la rsolution de l'cran. Version pour la version de l'API de l'utilisateur.

Mais, il y a beaucoup plus de quantificateurs et de ressources que ce que tu nous as indiqu !

Oui. Comprenez, je n'cris pas une documentation officielle pour Android ici. Si je le faisais, j'en laisserais plus d'un confus et

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Oui. Comprenez, je n'cris pas une documentation officielle pour Android ici. Si je le faisais, j'en laisserais plus d'un confus et vous aurez un nombre impressionnant d'informations qui ne vous serviront pas tellement. Je m'attle vous apprendre faire de jolies applications optimises et fonctionnelles, pas faire de vous des docteurs s Android. Le champ suivant, Folder est le rpertoire de destination. Quand vous slectionnez des quantificateurs vous pouvez avoir un aperu en temps rel de ce rpertoire. Si vous avez commis une erreur dans les quantificateurs, par exemple choisir une langue qui nexiste pas, le quantificateur ne s'ajoutera pas dans le champ du rpertoire. Si ce champ ne vous semble pas correct vis--vis des quantificateurs slectionns, c'est que vous avez fait une faute d'orthographe. Si vous crivez directement un rpertoire dans Folder , les quantificateurs indiqus s'ajouteront dans la liste correspondante. A mon humble opinion, la meilleure pratique est d'crire le rpertoire de destination dans Folder et de regarder si les quantificateurs choisis s'ajoutent bien dans la liste. Mais personne ne vous en voudra d'utiliser l'outil prvu pour .

45/89

Cet outil peut grer les erreurs et conflits. Si vous indiquez comme nom strings et comme ressource une donne ( values ), vous verrez un petit avertissement qui s'affichera en haut de la fentre, puisque ce fichier existe dj (il est cr par dfaut).

Petit exercice
Allez, histoire de vrifier que vous avez bien compris. Essayez, sans passer par les outils d'automatisation, d'ajouter une mise en page destine la version 8, quand l'utilisateur penche son tlphone en mode portrait alors qu'il utilise le franais des belges et que son terminal a une rsolution moyenne. Secret (cliquez pour afficher) Le Folder doit contenir EXACTEMENT /res/layout-fr-rBE-port-mdpi-v8 .

Il vous suffit de cliquer sur Finish si aucun message d'erreur ne s'affiche.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

46/89

Rcuprer une ressource


La classe R
On peut accder cette classe qui se trouve dans le rpertoire gen/ (comme generated, c'est--dire que tout ce qui se trouvera dans ce rpertoire sera gnr automatiquement) :

Ouvrez donc ce fichier. Oh

ce code, ces noms... Ca vous rappelle quelque chose ? Comparons avec l'ensemble des

ressources que comporte notre projet. Code : Java /* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * aapt tool from the resource data it found. It * should not be modified by hand. */ package sdz.chapitreUn.deums; public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } }

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

47/89

Bizarre... on remarque en effet une certainement ressemblance, mais elle n'est pas parfaite ! Dcryptons dj un peu le code.

La classe Layout

Code : Java public static final class layout { public static final int main=0x7f030000; }

Il s'agit d'une classe dclare dans une autre classe. C'est ce qui s'appelle une classe interne ; une classe interne est une classe dclare l'intrieur d'une autre classe, sans grande particularit. Cependant, pour y accder, il faut faire rfrence la classe qui la contient. Cette classe est de type public static final et de nom layout . Un lment public est un lment auquel tout le monde peut accder sans aucune restriction. Le mot cl static, dans le cas d'une classe interne, signifie que la classe n'est pas lie une instanciation de la classe qui l'encapsule. Pour accder layout , on ne doit pas ncessairement crer un objet de type R . On peut y accder par R.layout. Le mot cl final signifie que l'on ne peut pas crer de classe drive de layout . Cette classe contient un unique public int, affubl des modificateurs static et final. Il s'agit par consquent d'une constante, laquelle n'importe quelle autre classe peut accder sans avoir crer d'objet de type layout ni de type R . Cet entier est de la forme 0xZZZZZZZZ . Quand un entier commence par 0x , c'est qu'il s'agit d'un nombre hexadcimal sur 32 bits. Je crois bien en avoir perdu quelques-uns l. Les nombres que vous utilisez tous les jours pour compter sont exprims avec le systme dcimal. On commence par le chiffre 0, dans l'ordre croissant on passe 1, on augmente jusqu' arriver 9, et si on augmente encore on passe 10. On a ainsi de 0 9, dix units (systme dcimal ). Avec le systme hexadcimal, on dbute toujours 0, dans l'ordre croissant on passe 1, puis 2, jusqu' 9. Mais aprs 9 vient A. A n'est pas une unit spciale. Tout comme 5 est l'unit aprs 4, A vient aprs 9, mais comme on a dj utilis tous les chiffres connus, on a utilis une lettre la place d'une nouvelle unit invente de toute pice. Aprs A on a B, puis C, et ce jusqu' F. Aprs F seulement arrive 10, puis 11, jusqu' 19, puis 1A, jusqu' 1F, qui est suivi de 20. On a ainsi de 0 F, seize units (systme hexa dcimal). Le fait qu'il soit exprim en 32 bits signifie que ce nombre est constitu de 8 chiffres (il y a 8 Z ). Si vous n'avez rien compris, ce n'est pas grave. Sachez juste qu'il s'agit d'un nombre comme les autres, mais sous une autre forme. Ne soyez juste pas surpris d'y voir des lettres, c'est quand mme un entier. Cet entier a le mme nom qu'un fichier de ressources, tout simplement parce qu'il reprsente ce fichier. On ne peut donc avoir qu'un seul attribut de ce nom-l dans la classe, puisque deux fichiers qui appartiennent la mme ressource se trouvent dans le mme rpertoire et ne peuvent par consquent pas avoir le mme nom. Cet entier est un identifiant unique pour le fichier de mise en page qui s'appelle main. Si un jour on veut utiliser ou accder cette mise en page depuis notre code, on y fera appel l'aide de cet identifiant.

La classe Drawable

Code : Java public static final class drawable { public static final int icon=0x7f020000; }

Contrairement au cas prcdent, on a un seul entier pour 3 fichiers ! On a vu dans la section prcdente qu'il fallait nommer de faon identique ces 3 fichiers qui ont la mme fonction, pour une mme ressource, mais avec des quantificateurs diffrents. Et bien quand vous ferez appel l'identificateur, Android saura qu'il lui faut le fichier icon et dterminera automatiquement quel est le rpertoire le plus adapt la situation du matriel, parmi les rpertoires des ressources drawable puisqu'on se trouve dans la classe drawable.

La classe String

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Code : Java public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; }

48/89

Cette fois, si on a deux entiers, c'est tout simplement parce qu'on a deux chanes de caractres dans le rpertoire qui contient les chanes de caractres (qui sont des donnes), le rpertoire res/values . Comme on a qu'un fichier strings.xml dans ce rpertoire, on en dduit que c'est lui qui contient la dclaration de ces deux chanes de caractres. On verra comment dans un prochain chapitre.

Je ne le rpterai jamais assez, ne modifiez occupera.

JAMAIS ce fichier par vous-mme. Jamais. Eclipse s'en

Application
nonc
J'ai cr un nouveau projet pour l'occasion, mais vous pouvez trs bien vous amuser avec le premier projet. L'objectif ici sera de rcuprer la ressource de type chane de caractres qui s'appelle hello (qui est cre automatiquement par Eclipse) et qu'on mettra comme texte dans un TextView . On fera ensuite afficher le TextView par l'application.

Instructions
On utilisera la mthode public final void setText (int identifiant_de_la_ressource) de la classe TextView .

Ma solution
Secret (cliquez pour afficher) Code : Java public class Main extends Activity { TextView text = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); text = new TextView(this); text.setText(R.string.hello); } setContentView(text);

Comme indiqu auparavant, on peut accder aux identificateurs sans instancier de classe. On rcupre dans la classe R , l'identificateur de la ressource du nom hello qui se trouve dans la classe string puisqu'il s'agit d'une chane de caractres, donc R.string.hello . Et si je mets la place de l'identifiant d'une chane de caractres, un identifiant qui correspond un autre type de ressources ? je suis machiavlique. Et bien les ressources sont des objets Java comme les autres. Par consquent ils peuvent aussi possder une mthode public String toString() ! Pour ceux qui l'auraient oublis, la mthode public String toString() est appele sur un objet pour le transformer en chane en caractres, par exemple si on veut passer l'objet dans un System.out.println.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Essayez par vous-mme, vous verrez ce qui se produit . Soyez curieux ! C'est comme a qu'on apprend.

49/89

Application
nonc
Je vous propose un autre exercice. Dans l'exercice prcdent, le TextView a rcupr l'identifiant et a t chercher la chane de caractres associe pour l'afficher. Dans cet exercice, on va plutt rcuprer la chane de caractres pour la manipuler.

Instructions

On va rcuprer le gestionnaire de ressources. C'est un objet de la classe Resource que possde notre activit et qui permet d'accder aux ressources de cette activit. On peut le rcuprer grce la mthode public Resources getResources (). On rcupre la chane de caractre hello grce la mthode getString(int identifiant_de_la_ressource). On modifie la chane rcupre et on cherche le jeu de mot le plus nase possible.

Ma solution
Secret (cliquez pour afficher)

Code : Java public class Main extends Activity{ TextView text = null; String hello = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); hello = getResources().getString(R.string.hello); hello = hello.replace(", ", ", poil dans la "); text = new TextView(this); text.setText(hello); } setContentView(text);

Vous pouvez maintenant revenir au chapitre prcdent et comprendre la ligne que je vous avais dit d'oublier. C'est limpide maintenant non ? Les ressources sont les outils de base de contenu pour une application Android. On a malheureusement pas beaucoup pratiqu pendant ce chapitre, mais sachez que ds le prochain on met les mains dans le cambouis.

Les ressources (l'interface graphique - composants principaux)


Une interface graphique est une association de pictogrammes avec lesquels peut interagir l'utilisateur et qui doivent se comporter de manire cohrente les uns vis--vis des autres. Pour l'instant, tous les composants graphiques que nous avons crs l'ont t en Java. Cependant ce n'est pas la mthode privilgier. En fait, on manipulera l'interface graphique de manire programmatique uniquement quand il s'agira de rendre cette interface graphique dynamique, comme pour dterminer le comportement quand on clique sur un bouton ou agrandir une fentre quand un utilisateur l'tire. Pour constituer une interface graphique statique, on privilgiera les ressources, puisque souvenez-vous, la mise en page est une ressource. On va apprendre ici concevoir une interface graphique en manipulant le fichier XML et surtout interagir avec nos vues. Une interface graphique pour Android est tout simplement un assemblage de vues, et une vue s'appuyera par moment sur d'autres ressources pour leur fournir du contenu.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

50/89

L'interface d'Eclipse
Ouvrez le seul fichier qui se trouve dans le rpertoire res/layout :

En l'ouvrant, vous tomberez srement sur un cran de ce genre :

Cet outil vous aide mettre en place les vues (dans le menu de gauche, regardez on retrouve les TextView) directement sur la mise en page reprsente droite. Cependant, il ne peut remplacer la manipulation de fichiers XML mon opinion, c'est pourquoi je ne le prsenterai pas, mais avis aux auteurs de tuto' . En revanche, je le considre trs pratique ds qu'il s'agit d'afficher un petit aperu final de ce que donnera ce que vous avez dvelopp avec le fichier XML. C'est pourquoi je ne vais prsenter que cet aspect de l'outil.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


C'est l'aide du menu en haut que vous pourrez regarder le rsultat sous diffrents angles. Dcortiquons-le.

51/89

On va pour l'instant se concentrer sur la seconde partie du menu, celle avec les 5 menus droulants. La premire liste droulante permet de slectionner un type d'cran. Le chiffre indique la taille de la diagonale en pouces (sachant qu'un pouce fait 2.54 centimtres, la diagonale du Nexus One fait apparemment cm) et la suite de lettres en majuscules qui peut vous sembler totalement alatoire, la rsolution de l'cran. Pour voir quoi correspondent ces termes en taille relle, n'hsitez pas consulter cette image chipe sur Wikipdia. La seconde permet d'observer le comportement en mode portrait ou en mode paysage. La troisime permet d'observer le comportement quand le priphrique est associ un matriel damarrage. Dans la majorit des cas il ne nous servira pas, d'ailleurs je n'ai mme pas prsent le quantificateur adquat. La quatrime permet d'observer le comportement en fonction de la priode de la journe dans laquelle on se trouve. Encore une fois, peu d'applications changent de mise en page en fonction de l'heure. La dernire liste permet de choisir un thme. Nous aborderons plus tard les thmes et les styles. Maintenant occupons-nous de la premire partie. Le premier menu droulant reste vide si vous n'avez pas prcis de mise en page particulire pour certaines langues. Il vous faudra par exemple crer un rpertoire res/layout-en pour pouvoir choisir cette option. Le second menu vous permet d'avoir un aperu de votre interface en fonction de la version de l'API qui sera utilise. Le dernier menu enfin vous permet de crer un nouveau rpertoire en fonction de certains critres, mais je prfre utiliser l'outil prsent dans le chapitre prcdent. Rien, jamais rien ne remplacera un test sur un vrai terminal. Ne pensez pas que parce votre interface graphique est esthtique dans cet outil, qu'elle le sera aussi en vrai. Si vous n'avez pas de terminal, l'mulateur vous donnera dj un meilleur aperu de la situation. Pour accder au fichier XML, cliquez sur le second onglet main.xml .

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

52/89

Rgles gnrales sur les vues


Diffrenciation entre un layout et un widget
Eclipse vous a certainement cr un fichier XML de ce tonneau la : Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>

On trouve d'abord une racine qui s'appelle LinearLayout . Vous voyez qu'elle englobe un autre nud qui s'appelle lui TextView , ah a vous connaissez tiens. Comme indiqu prcdemment, une interface graphique pour Android est constitue uniquement de vues, et ces vues peuvent dtenir d'autres contenus sous forme de ressources. Ainsi, tous les nuds de ce fichier XML seront des vues. Revenons la premire vue qui en englobe une autre. Avec Swing vous avez dj rencontr ces objets graphiques qui englobent d'autres objets graphiques. On les appelle en anglais des layouts et en franais des gabarits. Un layout est donc une vue spciale qui peut contenir d'autres vues et qui n'est pas destine fournir du contenu l'utilisateur. Le layout se contente de disposer les vues en un certain motif. Les vues contenues sont les enfants, la vue englobante est le parent , comme en XML. Une vue qui ne peut pas en englober d'autres est appele un widget ( composant en franais). Un layout hrite de ViewGroup (classe abstraite, qu'on ne peut instancier donc), et ViewGroup hrite de View . Donc quand je dis qu'un ViewGroup peut contenir des View , c'est qu'il peut aussi contenir d'autres ViewGroup. Vous pouvez trs bien avoir en racine un simple widget si vous souhaitez que votre mise en page consiste en cet unique widget. La racine possde un attribut qui sera toujours xmlns:android="http://schemas.android.com/apk/res/android" . Cette ligne permet de prciser qu'il s'agit d'un document XML utilisable par Android. Si vous ne la mettez pas, Eclipse vous grondera et refusera de compiler.

Attributs en commun
Toutes les vues ont plusieurs attributs en commun. Les deux attributs les plus communs sont layout_width , qui dfinit la largeur que prend la vue (donc sur l'axe horizontal), et layout_height , qui dfinit la hauteur qu'elle prend (donc sur l'axe vertical). On peut mettre trois valeurs ces attributs : fill_parent signifie qu'elle prendra autant de place que son parent sur l'axe concern. Si elle n'a pas de parent, elle prendra toute la taille de l'activit. wrap_content signifie qu'elle prendra le moins de place possible sur l'axe concern. Par exemple si votre vue affiche une image, elle prendra peine la taille de l'image. Une valeur numrique prcise avec une unit. Je vous conseille de ne retenir que deux units: dp ou dip : il s'agit d'une unit qui est indpendante de la rsolution de l'cran. En effet, il existe d'autres units comme le pixel (px) ou le millimtre (mm), mais celles-ci varient d'un cran l'autre... Par exemple si vous mettez une taille de 500 dp pour un widget, il aura toujours la mme dimension relativement la taille de l'cran. Il sera grand pour un cran avec une grande rsolution, et grand pour un cran avec une petite rsolution. Si vous mettez une dimension de 500 millimtres ( 500mm ) pour un widget, il sera grand pour un grand cran... et NORME pour un petit cran. sp : cette unit respecte le mme principe, sauf qu'elle est plus adapte aux polices de caractres. Il vaut mieux l'utiliser pour dfinir la taille d'une police.

Depuis l'API 8 (dans ce cours on travaille sur l'API 7), il faut remplacer fill_parent par match_parent . Il s'agit

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


d'exactement la mme chose, mais en plus explicite.

53/89

Vous pouvez aussi dfinir une marge interne pour chaque widget, autrement dit l'espacement entre le contour de la vue et son contenu. Avec l'attribut android:padding dans le fichier XML pour dfinir un carr d'espacement. La valeur sera suivie d'une unit, 10.5dp par exemple. La mthode java quivalente est public void setPadding (int espacement_de_gauche, int espacement_du_dessus, int espacement_de_droite, int espacement_du_dessous). En XML on peut aussi utiliser des attributs android:paddingBottom pour dfinir uniquement l'espacement avec le plancher, android:paddingLeft pour dfinir uniquement l'espacement entre le bord gauche du widget et le contenu, android:paddingRight pour dfinir uniquement l'espacement de droite et enfin android:paddingTop pour dfinir uniquement l'espacement avec le plafond.

Identification
Vous vous rappelez certainement qu'on a dit que certaines ressources avaient un identifiant. Il est possible d'accder une ressource partir de son identifiant l'aide de la syntaxe @X/Y . Le @ signifie qu'on accde un attribut. Le X est la classe o se situe l'identifiant dans R.java . Enfin, le Y sera le nom de l'identifiant. Bien sr, la combinaison X/Y doit pointer sur un identifiant qui existe. Si on reprend notre classe cre par dfaut : Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>

On devine d'aprs la ligne 10 que le TextView affichera le texte de la ressource qui se trouve dans la classe string de R.java et qui s'appelle hello . Enfin, vous vous rappelez certainement aussi que l'on a rcupr des ressources l'aide de l'identifiant que le fichier R.java crait automatiquement dans le chapitre prcdent. Si vous allez voir ce fichier, vous constaterez qu'il ne contient aucune mention nos vues, juste au fichier main.xml . Et bien c'est tout simplement parce qu'il faut crer cet identifiant nous-mme (dans le fichier XML, ne modifiez jamais R.java par vous-mme malheureux). On peut rajouter chaque vue un attribut android:id . La valeur doit tre de la forme @+X/Y . Le + signifie qu'on parle d'un attribut qui n'est pas encore dfini. En voyant cela, Android sait qu'il doit crer un attribut ou aller le chercher dans les enfants de la vue concerne, puisque l'identifiant du parent est cr avant celui de ses enfants, si on veut faire rfrence un enfant dans le parent il faudra utiliser la syntaxe @+X/Y . Dans notre cas, il s'agit d'une cration. Le X est la classe dans laquelle sera cr l'identifiant. Cette classe peut ne pas exister, elle sera cre. Traditionnellement, X vaut id , mais donnez-lui la valeur qui vous plait. Enfin, le Y sera le nom de l'identifiant. Cet identifiant doit tre unique au sein d'une mme classe, comme d'habitude. Par exemple, j'ai dcid d'appeler mon TextView ganbare et de lui donner un padding de 25.7dp, ce qui nous donne : Code : XML

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/ganbare" android:padding="25.7dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>

54/89

Et mon fichier R a t modifi automatiquement en consquence : Code : Java public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; public static final int truc=0x7f020001; } public static final class id { public static final int ganbare=0x7f050000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040002; public static final int hello=0x7f040000; public static final int histoire=0x7f040001; } }

Enfin, on peut utiliser cet identifiant dans le code, comme avec les autres identifiants. Pour cela, on utilise la mthode public View findViewById (int identifiant_de_la_vue), sauf que cette mthode renvoie une View , il faut donc la caster dans le type de View de destination. Code : Java public class TroimsActivity extends Activity { TextView monTexte = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); monTexte = (TextView)findViewById(R.id.ganbare); monTexte.setText("Gambette"); } }

Je peux tout fait modifier le padding postriori. Code : Java public class TroimsActivity extends Activity { TextView monTexte = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


setContentView(R.layout.main); monTexte = (TextView)findViewById(R.id.ganbare); //N'oubliez pas que cette fonction n'utilise que des entiers monTexte.setPadding(50, 60, 70, 90); } }

55/89

Il y a-t-il une raison pour laquelle on accde la vue aprs le setContentView() ?

Oui ! Essayez de le faire avant. Votre application va planter. En fait, chaque fois qu'on rcupre un objet depuis un fichier XML dans notre code Java, on procde une opration qui s'appelle la dsrialisation. C'est a que sert la fonction public View findViewById (int identifiant). Le problme est que cette mthode va aller chercher dans l'arbre des vues que l'activit va crer. Or, cet arbre ne sera cr qu'aprs le setContentView ! Donc le findViewById retournera null puisque l'arbre n'existera pas et l'objet ne sera donc pas dans l'arbre. On va la place utiliser la mthode public static View inflate (Context notre_activite, int ressource_a_recuperer, ViewGroup parent_de_la_ressource). Cette mthode va inflate (dsrialiser) l'arbre XML au lieu de l'arbre de vues qui est cr par l'activit. On aurait aussi pu procder comme dans le chapitre prcdent en utilisant le gestionnaire de ressources pour rcuprer le fichier XML du layout puis le parcourir pour rcuprer la bonne vue... Mais sincrement, a aurait t beaucoup d'investissement pour pas grand chose . Code : Java public class Main extends Activity { LinearLayout layout = null; TextView text = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); layout = (LinearLayout) LinearLayout.inflate(this, R.layout.main, null); //Puis on rcupre le premier enfant text = (TextView) layout.getChildAt(0); text.setText("Et cette fois, a fonctionne !"); setContentView(layout); } }

Hh moi je suis plus malin ! Je vais faire comme a: Code : Java public class Main extends Activity { TextView text = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView) findViewById(R.id.ganbare); text.setText("Aucun problme, je suis malin !"); setContentView(text); } }

Comme a, l'arbre sera construit et je n'aurai pas utiliser la mthode bizarre !

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Ben non . Vous avez oubli l'optimisation mon cher ami.

56/89

Un fichier XML est trs lourd parcourir, donc construire un arbre de vues prend du temps et des ressources. A la compilation, si on dtecte qu'il y a deux setContentView dans onCreate, et bien on ne prendra en compte que la dernire ! De toute faon celle d'avant n'aura absolument aucun effet, si ce n'est nous faire perdre du temps pour rien.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

57/89

Les widgets les plus simples


Pour chaque widget, son nom est aussi le nom de sa classe Java. De plus, on trouve des attributs qu'on peut utiliser en XML ou en Java. Pour faciliter la lecture et les retrouver facilement, une liste d'lments choisis peut se trouver en annexe. Widget Description Vous connaissez dj cette vue. Elle vous permet d'afficher une chane de caractres. Vous verrez plus tard qu'on peut aussi y insrer des chanes de caractres formates, l'aide de balises HTML, ce qui nous servira souligner du texte ou le mettre en gras par exemple. Ce composant-ci est utilis pour permettre l'utilisateur d'crire des textes. Il s'agit en fait d'un TextView ditable. Il hrite de TextView, on peut donc lui mettre tous les attributs de TextView. Un simple bouton. Il s'agit en fait d'un TextView cliquable. Button Il hrite de TextView, on peut donc lui mettre tous les attributs de TextView. Image

TextView

EditText

Un bouton radio en franais. Mme principe que la CheckBox, peut tre dans deux tats, coche ou non. Il est plutt recommand de les regrouper plusieurs RadioButton dans un RadioGroup . Il hrite de Button, on peut donc lui mettre tous les attributs de Button. Ca vous paraitra vident maintenant mais un RadioGroup est un composant qui contient plusieurs RadioButton. En fait, dans un groupe RadioButton, il n'est cens en avoir qu'un seul qui est activ en mme temps. Le RadioGroup fait en sorte que ce postulat soit respect. RadioGroup Un RadioGroup peut contenir plusieurs RadioButton ? Mais c'est un layout alors, pas un composant ! Tout fait ! On le voit maintenant parce qu'il nous servira qu'avec les RadioButton . Une case cocher en franais. Elle aussi peut tre dans deux tats : coche ou pas. Contrairement aux RadioButton, elles n'existent pas en tant que groupe, on peut en avoir plusieurs de coches en mme temps. Il hrite de Button, on peut donc lui mettre tous les attributs de Button.

CheckBox

Application de calcul de l'IMC (partie 1)


nonc
On va commencer un petit TP. Vous voyez ce que c'est l'IMC ? C'est un nombre qui se calcule partir de la taille et de la masse corporelle d'un individu, afin qu'il puisse dterminer s'il est trop svelte ou trop corpulent. Ayant travaill dans le milieu mdical, je peux vous affirmer qu'il ne faut pas faire trop confiance ce chiffre (c'est pourquoi je ne propose pas d'interprtation du rsultat pour ce mini-TP). S'il vous indique que vous tes en surpoids, ne complexez pas ! Sachez que tous les bodybuilders du monde se trouvent en obsit morbide d'aprs ce chiffre.

Pour l'instant, on va se contenter de faire l'interface graphique.

Rsultat attendu

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

58/89

Instructions
On utilisera uniquement le XML. Pour mettre plusieurs composants dans un layout, on se contentera de mettre les composants entre les balises de ce layout. Voici le layout de base : Code : XML <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <!-- mettre les composants l --> </LinearLayout> On n'utilisera qu'un seul layout. Les TextView qui affichent Poids : et Taille : sont centrs, en rouge et en gras. Pour mettre un TextView en gras on utilisera l'attribut android:textStyle et on lui met comme valeur bold . Pour mettre un TextView en rouge on utilisera l'attribut android:textColor et on lui met comme valeur #FF0000" . Vous pourrez trouver d'autres valeurs pour indiquer une couleur cet endroit.

Solution
Secret (cliquez pour afficher) Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Poids : " android:textStyle="bold" android:textColor="#FF0000"

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


android:gravity="center" /> <EditText android:id="@+id/poids" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Poids" android:inputType="numberDecimal" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Taille : " android:textStyle="bold" android:textColor="#FF0000" android:gravity="center" /> <EditText android:id="@+id/taille" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Taille" android:inputType="numberDecimal" /> <RadioGroup android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checkedButton="@+id/radio2" android:orientation="horizontal" > <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mtre" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Centimtre" /> </RadioGroup> <CheckBox android:id="@+id/mega" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mega fonction !" /> <Button android:id="@+id/calcul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Calculer l'IMC" /> <Button android:id="@+id/raz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RAZ" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Rsultat:" /> <TextView android:id="@+id/result" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Vous devez cliquer sur le bouton Calculer l'IMC pour obtenir un rsultat." /> </LinearLayout>

59/89

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

60/89

C'est trs laid, j'admets ! En plus les boutons ne font rien du tout Allez, on va remdier ces deux problmes.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

61/89

Les vnements
On va voir ici comment grer les interactions entre l'interface graphique et l'utilisateur.

Par hritage
On va commencer par la mthode qu'a utilis cysboy dans son cours. On va faire implmenter un listener notre classe, ce qui veut dire que notre classe sera une classe l'coute des actions qu'on effectuera sur les vues. A chaque fois qu'on effectuera une action, une mthode qui correspond cette action sera appele, et on dfinira dans cette mthode ce qu'il faut faire une fois l'action effectue. Il existe plusieurs interfaces, une pour chaque type d'actions, nous allons voir uniquement le clic normal pour l'instant. Uniquement des mthodes relatives aux cliques pourront tre implmentes. Je vous ai dj parl de focus, c'est un concept dont on parle souvent dans le cas de l'informatique vnementielle. Un focus est quand le programme se concentre sur un lment suite un stimuli de l'utilisateur. Par exemple si vous faites tabulation l maintenant, vous verrez diffrents lments tre slectionns dans votre navigateur, c'est qu'ils rcuprent le focus.

L'interface utilise s'appelle View.OnClickListener et nous oblige dfinir la mthode void onClick (View vue). C'est dans cette mthode qu'on dfinira la conduite adopter en cas de clic. L'argument de type View est la vue sur laquelle le clic a t effectu. Il existe d'autres interfaces avec d'autres mthodes implmenter : View.OnLongClickListener pour les longs clics, avec la mthode boolean onLongClick(View vue_sur_laquelle_a_ete_lance_l_evenement). Cette mthode doit retourner true une fois que l'action associe a t effectue. View.OnKeyListener pour grer l'appui de touches. On y associe la mthode boolean onKey (View vue_sur_laquelle_a_ete_lance_l_evenement, int code_de_la_touche_pressee, KeyEvent informations_sur_l_evenement). Cette mthode doit retourner true une fois que l'action associe a t effectue. View.OnTouchListener correspond une simple touche qui s'effectue sur l'lment. On observe notamment une touche au moment d'un clique puis au moment du relchement. Rester appuy aprs un clic est toujours une touche, mme si on sort de l'lment. Est associe la mthode boolean onTouch (View vue_sur_laquelle_a_ete_lance_l_evenement, MotionEvent informations_sur_l_evenement). Cette mthode doit retourner true une fois que l'action associe a t effectue. Un exemple d'implmentation : Code : Java public class Main extends Activity implements View.OnTouchListener, View.OnClickListener{ Button b = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b = (Button) findViewById(R.id.boutton); b.setOnTouchListener(this); b.setOnClickListener(this);

@Override public boolean onTouch(View v, MotionEvent event) { /* ragir au toucher */ return true; } @Override public void onClick(View v) { /* ragir au clic */ }

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Et comment ragir si on a plusieurs boutons et qu'ils doivent effectuer des actions diffrentes ? On peut par exemple passer par un switch pour savoir comment ragir en fonction du bouton: Code : Java public void onClick(View v) { switch(v.getId()) { //Si l'identifiant de la vue est celui du premier bouton case R.id.bouton1: /* agir pour bouton 1 */ break; //Si l'identifiant de la vue est celui du second bouton case R.id.bouton2: /* agir pour bouton 2 */ break; /* etc. */ }

62/89

Par un attribut
Un peu plus cocasse, mais permet d'avoir un listener diffrent pour chaque bouton. C'est la mthode que je privilgie ds que j'ai plusieurs boutons. Code : Java public class Main extends Activity{ private OnClickListener clickListenerBoutons = new OnClickListener() { @Override public void onClick(View v) { /* ragir au clic pour les boutons 1 et 2*/ } }; private OnTouchListener touchListenerBouton1 = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { /* ragir au toucher pour le bouton 1*/ return false; } }; private OnTouchListener touchListenerBouton3 = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { /* ragir au toucher pour le bouton 3*/ return false; } }; Button b = null; Button b2 = null; Button b3 = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b = (Button) findViewById(R.id.boutton); b.setOnTouchListener(touchListenerBouton1); b.setOnClickListener(clickListenerBoutons); b2.setOnClickListener(clickListenerBoutons); b3.setOnTouchListener(touchListenerBouton3);

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

63/89

Petit exercice
nonc
On va s'amuser un peu. Crez un bouton qui prend tout l'cran et faites en sorte que le texte grossisse quand on s'loigne du centre du bouton, et rtrcisse quand on s'en rapproche.

Instructions

Pour changer la taille d'un texte, on utilise la mthode void setTextSize (float taille_du_texte). La taille du texte est dtermine par |Coordonnes_des_abscisses_X - longueur| + |Coordonnes_des_ordonnes_Y hauteur|. Les deux sparateurs | indiquent qu'on chercher la valeur absolue d'une expression mathmatique (c'est- -dire que si la soustraction est ngative, elle reverra la valeur positive de cette soustraction. Par exemple |-1| = 1 et |1| = 1). Pour obtenir la valeur absolue d'un nombre, on peut utiliser la mthode statique double abs(float a) de la classe Math. Pour obtenir la coordonne en abscisse (X) on utilise float getX () du MoveEvent, et pour obtenir la coordonne en ordonne (Y) on utilise float getY ().

Solution
Secret (cliquez pour afficher) Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/bouton" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" android:text="@string/hello" /> </LinearLayout>

Code : Java public class Main extends Activity implements View.OnTouchListener{ Button b = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b = (Button) findViewById(R.id.bouton); b.setOnTouchListener(this);

@Override public boolean onTouch(View v, MotionEvent event) { Button tmp = (Button)v; tmp.setTextSize(Math.abs(event.getX() - v.getWidth()/2) + Math.abs(event.getY() - v.getHeight()/2)); return true; } }

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


On a procd par hritage puisqu'on a qu'un seul bouton sur lequel agir.

64/89

Application de calcul de l'IMC (partie 2)


nonc
On va maintenant relier tous les boutons de notre application pour pouvoir effectuer tous les calculs. La CheckBox de le megafonction permet de mettre un message logieux pour l'utilisateur au lieu du calcul. La formule pour calculer l'IMC est Le bouton RAZ remet 0 tous les champs et le texte du rsultat par dfaut. Le RadioGroup permet de slectionner en quelle unit l'utilisateur a indiqu sa taille. Pour obtenir la taille en mtre depuis la taille en centimtre il suffit de diviser par 100 : . .

Ds qu'on change les valeurs dans les champs Poids et Taille , on remet le texte du rsultat par dfaut puisque la valeur calcule n'est plus valable pour les nouvelles valeurs. On enverra un message d'erreur si l'utilisateur essaie de faire le calcul avec une taille = 0 grce un toast . Un toast est un widget un peu particulier qui permet d'afficher un message n'importe quel moment sans avoir crer de vue. Il est destin informer l'utilisateur sans le dranger outre mesure, il n'attire pas l'attention sur lui et lutilisateur peut continuer utiliser l'application comme si le toast n'tait pas prsent.

Consignes
On utilisera la mthode boolean isChecked() qui renvoie true si la CheckBox sur laquelle est utilise la mthode est slectionne. Voici la syntaxe pour construire un toast : static Toast makeText(Context le_context_d_ou_est_lance_le_toast, CharSequence le_texte_a_afficher, int la_duree_d_affichage). La dure peut tre indique l'aide de la constante Toast.LENGTH_SHORT pour un message court et Toast.LENGTH_LONG pour un message qui durera plus longtemps. Pour afficher le toast construit, il faut lui appliquer la mthode void show (). Pour rcuprer l'identifiant du RadioButton qui est slectionn dans un RadioGroup il faut utiliser la mthode int getCheckedRadioButtonId (). On peut rcuprer le texte d'un EditText l'aide de la fonction Editable getText (). On peut ensuite vider le contenu de cet objet Editable l'aide de la fonction void clear().

Ma solution
Secret (cliquez pour afficher) Code : Java public class TroimsActivity extends Activity { //La chane de caractres par dfaut private final String defaut = "Vous devez cliquer sur le bouton Calculer l'IMC pour obtenir un rsultat."; //La chine de caractres de la mga fonction private final String megaString = "Vous faites un poids parfait ! Wahou ! Trop fort ! On dirait Brad Pitt (si vous tes un hommes)/Angelina Jolie (si vous tes une femme)/Willy (si vous tes un orque) !"; Button envoyer = null; Button raz = null; EditText poids = null; EditText taille = null;

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


RadioGroup group = null; TextView result = null; CheckBox mega = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //on rcupre toutes les vues dont on a besoin envoyer = (Button)findViewById(R.id.calcul); raz = (Button)findViewById(R.id.raz); taille = (EditText)findViewById(R.id.taille); poids = (EditText)findViewById(R.id.poids); mega = (CheckBox)findViewById(R.id.mega); group = (RadioGroup)findViewById(R.id.group); result = (TextView)findViewById(R.id.result); //on attribut un Listener adapt aux vues qui en ont besoin envoyer.setOnClickListener(envoyerListener); raz.setOnClickListener(razListener); taille.setOnKeyListener(modificationListener); poids.setOnKeyListener(modificationListener); mega.setOnClickListener(checkedListener);

65/89

//Se lance chaque touche qui modifie l'lment private OnKeyListener modificationListener = new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { //On remet le texte sa valeur par dfaut result.setText(defaut); return false; } }; //Uniquement pour le bouton envoyer private OnClickListener envoyerListener = new OnClickListener() { @Override public void onClick(View v) { if(!mega.isChecked()) { //Si la mega fonction n'est pas active String t = taille.getText().toString(); String p = poids.getText().toString(); float pValue = 0; float tValue = 0; float imc = 0; //On vrifie que le champ pour la taille n'est pas vide if(t != null && t.length() > 0) { tValue = Float.valueOf(t); //On vrifie que la taille n'est pas gale 0 if(tValue == 0) Toast.makeText(TroimsActivity.this, "Tu fais pas 0 cm l'ami, sinon tu pourrais pas tenir un tlphone.", Toast.LENGTH_SHORT).show(); else { //On vrifie que le champ pour le poids n'est pas vide if(p != null && p.length() > 0) pValue = Float.valueOf(p); //Si l'utilisateur a indiqu que la taille tait en centimtres if(group.getCheckedRadioButtonId() == R.id.radio2) tValue = tValue / 100; tValue = (float)Math.pow(tValue, 2); imc = pValue / tValue;

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


result.setText("Votre IMC est " + String.valueOf(imc)); } }else Toast.makeText(TroimsActivity.this, "Il faut indiquer une taille nunuche !", Toast.LENGTH_SHORT).show(); }else result.setText(megaString); } }; //Listener du bouton de remise zro private OnClickListener razListener = new OnClickListener() { @Override public void onClick(View v) { poids.getText().clear(); taille.getText().clear(); result.setText(defaut); } }; //Listener du bouton de la mega fonction. private OnClickListener checkedListener = new OnClickListener() { @Override public void onClick(View v) { //On remet le texte par dfaut si c'tait le texte de la mga fonction qui tait crit if(!((CheckBox)v).isChecked() && result.getText().equals(megaString)) result.setText(defaut); } }; }

66/89

Vous avez vu ce qu'on a fait ? Sans toucher l'interface graphique, on a pu effectuer toutes les modifications ncessaires au bon fonctionnement de notre application. C'est l'intrt de dfinir l'intervalle dans un fichier XML et le ct interactif en Java. Vous pouvez modifier l'un sans toucher l'autre.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications

67/89

Les layouts (gabarits)


LinearLayout
Comme son nom l'indique, ce layout se charge de mettre les vues sur une mme ligne, selon une certaine orientation. L'attribut pour prciser cette orientation est android:orientation . On peut lui donner deux valeurs: vertical pour que les composants soient placs de haut en bas. horizontal pour que les composants soient placs de gauche droite. On va faire quelques expriences pour s'amuser. Code et explications Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/ganbare" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/lautre" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="En d'ssous" /> </LinearLayout> Rsultat

Le LinearLayout est vertical et prend toute la place de son parent. Comme il n'en a pas, il prend toute la place de l'activit. Le premier bouton prend toute la place dans le parent en longueur et uniquement la taille ncessaire en hauteur (la taille du texte donc !). Le seconde bouton fait de mme. Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/ganbare" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="@string/hello" /> <Button android:id="@+id/lautre" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="En d'ssous" />

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


</LinearLayout>

68/89

Le LinearLayout est vertical et prend toute la place de son parent. Le premier bouton prend toute la place de son parent en hauteur et uniquement la taille ncessaire en largeur . Le pauvre seconde bouton se fait craser par le premier bouton qui prend toute la place possible . C'est pour a qu'on ne le voit pas. Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/un" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="Dessus"/> <Button android:id="@+id/deux" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="Dessous" /> </LinearLayout>

Le LinearLayout est vertical et prend toute la place en longueur mais uniquement la taille ncessaire en hauteur. La taille ncessaire est calcule en fonction des enfants. Le premier bouton prend toute la place possible dans le parent. Comme le parent prend le moins de place possible, il doit faire de mme. Le seconde bouton fait de mme. Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/ganbare" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/lautre" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="En d'ssous" /> </LinearLayout>

Le LinearLayout est horizontal et prend toute la place de son parent. Le premier bouton prend uniquement la place ncessaires.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Le pauvre seconde bouton prend uniquement la place ncessaire en longueur et s'tend jusqu'aux bords du parent.

69/89

Vous remarquerez que l'espace est toujours divis entre les deux boutons de manire gale. Et si on voulait que le bouton de droite prenne 2 fois plus de place que celui de gauche ? Pour cela, il faut attribuer un poids au composant. Ce poids peut tre dfini grce l'attribut android:layout_weight . Pour faire en sorte que le bouton de droite prenne deux fois plus de place, on peut lui mettre android:layout_weight="1" et mettre au bouton de gauche android:layout_weight="2". C'est le composant qui "pse" le moins qui a la priorit.

Et si dans l'exemple prcdent du tableau o un bouton en crasait un autre, les deux boutons avaient eu un poids identique, par exemple android:layout_weight="1" pour les deux, ils auraient eu la mme priorit et auraient pris la mme place. Par dfaut, ce poids est 0. Dernier attribut particulier pour les widgets de ce layout, android:layout_gravity , qu'il ne faut pas confondre avec android:gravity . android:layout_gravity vous permet de dterminer comment se placera la vue dans le parent, alors que android:gravity vous permet de dterminer comment se placera le contenu de la vue l'intrieur mme de la vue. android:layout_gravity prend les mme valeurs que android:gravity . Et un petit exemple pour illustrer le fonctionnement: Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/bouton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1" android:text="Bouton 1" /> <Button android:id="@+id/bouton2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="2" android:text="Bouton 2" /> <Button android:id="@+id/bouton3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" android:layout_weight="1" android:text="Bouton 3" /> </LinearLayout>

Application de calcul de l'IMC (partie 3.1)


nonc
Maintenant mettez votre application en forme pour qu'elle soit un peu plus jolie.

Instructions

Essayez d'utiliser le plus d'attributs de LinearLayout possibles.

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Ma solution
Secret (cliquez pour afficher)

70/89

Les EditText prennent le plus de place possible, mais comme ils ont un poids plus fort que les TextView, ils n'ont pas la priorit. On rajoute des marges aux Button pour des raisons esthtiques. Code : XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Poids : " android:textStyle="bold" android:textColor="#FF0000" android:gravity="center" /> <EditText android:id="@+id/poids" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Poids" android:inputType="numberDecimal" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content"

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


android:layout_height="wrap_content" android:text="Taille : " android:textStyle="bold" android:textColor="#FF0000" android:gravity="center" /> <EditText android:id="@+id/taille" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Taille" android:inputType="numberDecimal" android:layout_weight="1" /> </LinearLayout> <RadioGroup android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checkedButton="@+id/radio2" android:orientation="horizontal" > <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mtre" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Centimtre" /> </RadioGroup> <CheckBox android:id="@+id/mega" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mega fonction !" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/calcul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Calculer l'IMC" android:layout_weight="1" android:layout_marginLeft="25dip" android:layout_marginRight="25dip"/> <Button android:id="@+id/raz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RAZ" android:layout_weight="1" android:layout_marginLeft="25dip" android:layout_marginRight="25dip"/> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Rsultat:" /> <TextView android:id="@+id/result" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Vous devez cliquer sur le bouton Calculer l'IMC pour obtenir un rsultat." /> </LinearLayout>

71/89

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


Le plus gros problme des LinearLayouts, c'est qu'il faut les emboiter. Et plus on emboite de layouts, plus on perd en performance.

72/89

RelativeLayout
De manire totalement diffrente, ce layout propose plutt de placer les composants les uns par rapport aux autres, en partant du premier. En fait, chaque widget, l'exception du premier, aura un attribut particulier pour qu'on sache o le mettre par rapport un autre composant.

Application de calcul de l'IMC (partie 3.2)


Mme chose pour un layout diffrent ! Moi, je vise le mme rsultat que prcdemment.

Ma solution

Secret (cliquez pour afficher) Code : XML <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/textPoids" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Poids : " android:textStyle="bold" android:textColor="#FF0000" /> <EditText android:id="@+id/poids" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Poids" android:inputType="numberDecimal" android:layout_toRightOf="@id/textPoids" android:layout_alignParentRight="true" /> <TextView android:id="@+id/textTaille" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Taille : " android:textStyle="bold" android:textColor="#FF0000" android:gravity="left" android:layout_below="@id/poids" /> <EditText android:id="@+id/taille" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Taille" android:inputType="numberDecimal" android:layout_below="@id/poids" android:layout_toRightOf="@id/textTaille" android:layout_alignParentRight="true" /> <RadioGroup android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checkedButton="@+id/radio2" android:orientation="horizontal" android:layout_below="@id/taille" > <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mtre" />

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


<RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Centimtre" /> </RadioGroup> <CheckBox android:id="@+id/mega" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mega fonction !" android:layout_below="@id/group" /> <Button android:id="@+id/calcul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Calculer l'IMC" android:layout_below="@id/mega" android:layout_marginLeft="25dip"/> <Button android:id="@+id/raz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RAZ" android:layout_below="@id/mega" android:layout_alignRight="@id/taille" android:layout_marginRight="25dip"/> <TextView android:id="@+id/resultPre" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Rsultat:" android:layout_below="@id/calcul" /> <TextView android:id="@+id/result" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Vous devez cliquer sur le bouton Calculer l'IMC pour obtenir un rsultat." android:layout_below="@id/resultPre" /> </RelativeLayout>

73/89

Le problme de ce layout, c'est qu'une petite modification dans l'interface graphique peut provoquer de grosses modification dans tout le fichier XML.

TableLayout
Dernier layout de base, il permet d'organiser les lments selon un tableau, comme en HTML. Chaque vue est une ligne du tableau, et pour avoir plusieurs lments sur une mme ligne, il faut placer ces vues entre les nuds <TableRow></TableRow>. Chaque lment qui correspond une ligne a son attribut android:layout_width la valeur fill_parent . Et tous les lments d'une ligne compose essayent de prendre le moins de place possible en longueur et en hauteur par rapport l'lment le plus grand de cette colonne. On a donc un wrap_content sur l'lment le plus grand de cette colonne. Le nombre de colonnes du tableau est le nombre de colonnes de la ligne qui a le plus de colonnes. Sur le nud TableLayout, on peut jouer avec trois attributs (attention, les rangs dbutent 0): android:stretchColumns pour que la longueur de tous les lments de cette colonne passe en fill_parent , donc pour prendre le plus de place possible. Il faut prciser le rang de la colonne cibler, ou plusieurs rangs spars par des virgules. android:shrinkColumns pour que la longueur de tous les lments de cette colonne passe en wrap_content pour le plus petit lment de la colonne, donc pour prendre le moins de place possible. Il faut prciser le rang de la colonne cibler, ou plusieurs rangs spars par des virgules. android:collapseColumns pour faire purement et simplement disparatre des colonnes du tableau. Il faut prciser le rang de la colonne cibler, ou plusieurs rangs spars par des virgules. On peut dfinir dans quelle colonne dbute une vue avec l'attribut android:layout_column (la premire colonne est au

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


rang 0). Si besoin, vous pouvez faire en sorte qu'un lment s'tende sur plusieurs colonnes, comme en HTML, avec l'attribut android:layout_span. Par exemple Code : XML <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableRow> <TextView android:text="@strings/hello" android:gravity="center"/> <EditText android:layout_span="2" android:layout_column="2"/> </TableRow> </TableLayout>

74/89

Notre EditText va commencer la deuxime colonne et s'tendra sur 2 colonnes. Le tableau contient donc 4 colonnes.

Application de calcul de l'IMC (partie 3.3)


nonc
C'est reparti pour un tour !

Ma solution

Secret (cliquez pour afficher) Code : XML <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1"> <TableRow> <TextView android:text="Poids : " android:textStyle="bold" android:textColor="#FF0000" android:gravity="center"/> <EditText android:id="@+id/poids" android:hint="Poids" android:inputType="numberDecimal" android:layout_span="2" /> </TableRow> <TableRow> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Taille : " android:textStyle="bold" android:textColor="#FF0000" android:gravity="center" /> <EditText android:id="@+id/taille" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Taille" android:inputType="numberDecimal" android:layout_span="2" /> </TableRow> <RadioGroup android:id="@+id/group"

www.siteduzero.com

Partie 1 : Les bases indispensables toutes applications


android:layout_width="wrap_content" android:layout_height="wrap_content" android:checkedButton="@+id/radio2" android:orientation="horizontal" > <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mtre" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Centimtre" /> </RadioGroup> <CheckBox android:id="@+id/mega" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mega fonction !" /> <TableRow> <Button android:id="@+id/calcul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Calculer l'IMC" /> <Button android:id="@+id/raz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RAZ" android:layout_column="2" /> </TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Rsultat:" /> <TextView android:id="@+id/result" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Vous devez cliquer sur le bouton Calculer l'IMC pour obtenir un rsultat." /> </TableLayout>

75/89

FrameLayout
Ce layout est plutt utilis pour afficher une unique vue. Il peut sembler inutile comme a mais ne l'est pas du tout ! Ce layout n'est destin afficher qu'un lment, mais il est possible d'en mettre plusieurs dedans puisqu'il s'agit d'un ViewGroup. Si par exemple vous souhaitez faire un album photo, il vous suffit de mettre plusieurs lments dans le FrameLayout et de ne laisser qu'une seule photo en visible, et de laisser les autres en invisible avec l'aide de l'attribut android:visibility (cet attribut est disponible pour toutes les vues). Il peut prendre trois valeurs : visible ( View.VISIBLE ) la valeur par dfaut. invisible ( View.INVISIBLE ) ne s'affiche pas mais est pris en compte pour l'affichage du layout niveau spatial (on lui rserve de la place). gone ( View.GONE ) ne s'affiche pas et ne prend pas de place. En fait on fait comme s'il n'tait pas l. L'quivalent java de cet attribut est public void setVisibility (int) avec comme paramtre une des valeurs entre parenthses dans la liste ci-dessus. Quand il y a plusieurs lments dans un FrameLayout, il les empile les uns au-dessus des autres, avec le premier lment du XML qui se trouve en dernire position, et le dernier ajout se trouve tout au-dessus. Vous l'aurez compris vous-mme, on a vu ici que les composants les plus basiques, les plus simples... et aussi les plus

www.siteduzero.com

Partie 2 : Annexes
primordiaux. Vous tes presque certains de les utiliser quasi-constamment. Le prochain chapitre prsentera d'autres composants, plus complexes peut-tre, moins fondamentaux certainement, mais aussi qui vous permettront d'exploiter toutes les possibilits d'Android dans ce domaine.

76/89

www.siteduzero.com

Partie 2 : Annexes

77/89

Partie 2 : Annexes

L'architecture d'Android
Aprs quelques rflexions et quelques recherches, je me suis dit que c'tait peut-tre une bonne ide de prsenter aux plus curieux l'architecture d'Android. Vous pouvez considrer ce chapitre comme facultatif s'il vous ennuie ou vous semble trop compliqu, vous serez tout de mme capable de dvelopper correctement sous Android mais un peu de culture technique ne peut pas vous faire de mal . Concrtement, l'architecture d'Android, c'est a :

Schma qui provient de la page suivante, provenant du site d'Android destin aux dveloppeurs. En soi, ce schma est incomprhensible et franchement pas glamour, mais il rsume de manire concrte ce que je vais vous raconter. Ce que vous observez est une pile des composants qui constituent le systme d'exploitation. Le sens de lecture se fait de bas en haut, puisque le composant de plus bas niveau est le noyau linux et celui de plus haut niveau sont les applications.

www.siteduzero.com

Partie 2 : Annexes

78/89

Le noyau Linux
Je vous avais dj dit que le systme d'exploitation d'Android se basait sur Linux. Si on veut tre plus prcis, c'est le noyau ( kernel en anglais) de Linux qui est utilis. Le noyau est l'lment du systme d'exploitation qui permet de faire le pont entre le matriel et le logiciel. Par exemple les pilotes Wifi permettent de contrler la puce Wifi. Quand Android veut activer la puce Wifi, on peut imaginer qu'il utilise la fonction allumerWifi() , et c'est au constructeur de spcifier le comportement de allumerWifi() pour sa puce. On aura donc une fonction unique pour toutes les puces, mais le contenu de la fonction sera unique pour chaque matriel. La version du noyau utilise avec Android est une version conue spcialement pour l'environnement mobile, avec une gestion avance de la batterie et une gestion particulire de la mmoire. C'est cette couche qui fait en sorte qu'Android soit compatible avec tant de supports diffrents. a ne signifie pas qu'Android est une distribution de Linux, il a le mme coeur mais c'est tout. Vous ne pourrez pas lancer d'applications destines GNU/Linux sans passer par de petites manipulations, mais si vous tes bricoleur... Si vous regardez attentivement le schma, vous remarquerez que cette couche est la seule qui gre le matriel. Android en soi ne s'occupe pas de ce genre de dtails. Je ne veux pas dire par l qu'il n'y a pas d'interactions entre Android et le matriel, juste que quand un constructeur veut ajouter un matriel qui n'est pas pris en compte par dfaut par Android, il doit travailler sur le kernel et non sur les couches au-dessus, qui sont des couches spcifiques Android.

www.siteduzero.com

Partie 2 : Annexes

79/89

Les bibliothques pour Android


Ces bibliothques proviennent de beaucoup de projets open-sources, cris en C/C++ pour la plupart, comme SQLite pour les bases de donnes, WebKit pour la navigation web ou encore OpenGL afin de produire des graphismes en 2D ou en 3D. Vous allez me dire qu'Android ne peut pas utiliser ces bibliothques puisqu'elles ne sont pas en Java, cependant vous auriez tort puisqu'Android comprend trs bien le C et le C++ !

www.siteduzero.com

Partie 2 : Annexes

80/89

Le moteur d'excution Android


C'est cette couche qui fait qu'Android n'est pas qu'une simple implmentation de Linux pour portables . Elle contient certaines bibliothques de base du Java accompagnes de bibliothques spcifiques Android et la machine virtuelle Dalvik . Un moteur d'excution ( runtime system en anglais) est un programme qui permet lexcution d'autres programmes. Vous savez peut-tre que pour utiliser des applications dveloppes en Java sur votre ordinateur vous avez besoin du JRE ( Java RUNTIME Environment ), et bien il s'agit du moteur d'excution ncessaire pour lancer des applications crites en Java. Voici un schma qui indique les tapes ncessaires la compilation et lexcution d'un programme Java standard :

Votre code est une suite d'instructions que l'on trouve dans un fichier .java et ce fichier sera traduit en une autre suite d'instructions dans un autre langage que l'on appelle le bytecode . Ce code est contenu dans un fichier .class . Le bytecode est un langage spcial qu'une machine virtuelle Java peut comprendre et interprter. Les diffrents fichiers .class sont ensuite regroups dans un .jar et c'est ce fichier qui est excutable. En ce qui concerne Android, la procdure est diffrente. En fait ce que vous appelez Java est certainement une variante particulire de Java qui s'appelle Java SE . Or, pour dvelopper des applications pour Android, on n'utilise pas vraiment Java SE. Pour ceux qui savent ce qu'est Jave ME , ce n'est pas non plus ce framework que l'on utilise (Java ME est une version spciale de Java destine au dveloppement mobile, mais pas pour Android donc). A noter que sur le schma le JDK et le JRE sont runis, mais il est possible de tlcharger le JRE sans tlcharger le JDK. La version de Java qui permet le dveloppement Android est une version rduite ampute de certaines fonctionnalits qui n'ont rien faire dans un environnement mobile. Par exemple, la bibliothque graphique Swing n'est pas supporte, on trouve la place un systme beaucoup plus adapt. Mais Android n'utilise pas une machine virtuelle Java ; une machine virtuelle toute tudie pour les systmes embarqus a t dveloppe, et elle s'appelle Dalvik . Cette machine virtuelle est optimise pour mieux grer les ressources physiques du systme. Je citerai par exemple qu'elle permet de laisser moins d'empreinte mmoire (la quantit de mmoire alloue une application pendant son excution) et qu'elle puise moins dans la batterie qu'une machine virtuelle Java. La plus grosse caractristique de Dalvik est qu'elle permet d'instancier (terme technique qui signifie crer une occurrence de . Par exemple quand vous crez un objet en java, on instancie une classe puisqu'on cre une occurrence de cette classe) un nombre trs important d'occurrences de lui-mme : chaque programme a sa propre occurrence de Dalvik et elles peuvent vivre sans se perturber les unes les autres. Voici un schma qui indique les tapes ncessaires la compilation et lexcution d'un programme Android standard :

www.siteduzero.com

Partie 2 : Annexes

81/89

On voit bien que le code Java est ensuite converti en bytecode Java comme auparavant. Mais souvenez-vous, je vous ai dit que le bytecode Java ne pouvait tre lu que par une machine virtuelle Java, et je vous ai aussi dit que Dalvik n'tait PAS une machine virtuelle Java. Il faut donc procder une autre conversion l'aide d'un programme qui s'appelle dx . Ce programme s'occupera de traduire les applications de bytecode Java en bytecode Dalvik, qui lui est comprhensible par la machine virtuelle. La puissante machine virtuelle Dalvik est destin uniquement Android, mais il est possible de dvelopper une machine virtuelle similaire et qui ne fonctionne pas sous Android. Par exemple, le Nokia N9 pourra excuter des applications Android sans utiliser ce systme.

www.siteduzero.com

Partie 2 : Annexes

82/89

Les frameworks pour les applications


Il s'agit d'un framework qui... Un quoi??

Un framework peut se traduire littralement par un cadre de travail. Il s'agit d'un ensemble de composants qui dfinissent les fondations ainsi que les grandes lignes directrices de l'organisation d'un code, en d'autres termes on peut parler de son architecture ou de son squelette. Un framework prodigue aussi quelques fonctionnalits de base (accs la base de donnes par exemple). Cet outil fournit ainsi une dmarcation radicale entre plusieurs aspects d'un programme et permet de mieux diviser les tches (toi tu fais l'interface graphique, toi l'interaction avec le rseau, etc). En fait ce sont ces frameworks l qui vous sont disponibles quand vous programmez en Java, et qui s'occupent d'interagir avec la bibliothque Android. Vous pouvez vous contenter d'appeler des fonctions dj faites l'avance par d'autres et les regarder s'excuter tranquillement.

www.siteduzero.com

Partie 2 : Annexes

83/89

Les applications
Il s'agit tout simplement d'un ensemble d'applications que l'on peut trouver sur Android, par exemple les fonctionnalits de base inclues un client pour recevoir/envoyer des emails, un programme pour envoyer/recevoir des SMS, un calendrier, un rpertoire, etc. C'est ici que vous intervenez, cette stle est celle de vos futures applications dveloppes en Java. Vous l'aurez compris, vous accdez aux mmes ressources que les applications fournies par dfaut, vous avez donc autant de possibilits qu'elles, vous avez mme la possibilit de les remplacer. C'est aussi a la force d'Android.

Attributs et mthodes des vues


Vous trouverez ici une liste des attributs choisis pour la manipulation des vues. Cette liste n'est pas exhaustive bien entendu, je n'ai pas pour vocation de traduire intgralement la trs longue documentation d'Android. Pour chaque tableau de cette section, on respectera la convention suivante : La premire colonne est le nom de l'attribut qu'il est possible d'utiliser dans le fichier XML. La seconde colonne donne l'ventail de valeurs que vous pouvez mettre dans le fichier XML. Si vous voyez la mention Cumulable , c'est qu'il est possible de mettre plusieurs attributs la suite l'aide du sparateur | . Exemple avec les attributs X , Y et Z : X | Z | Y . L'ordre importe peu. La troisime colonne donne la mthode Java quivalente si elle existe. Et la dernire colonne donne les valeurs qu'on peut utiliser avec la mthode Java.

www.siteduzero.com

Partie 2 : Annexes

84/89

TextView
Attribut Description Valeur XML et effet quivalent Java Valeur Java Permet Android de dtecter la prsence de motifs particuliers dans le texte, et de rendre les motifs cliquables. Par exemple android:autoLink cliquer sur un numro de tlphone permet de l'appeler et cliquer sur un lien permet d'accder au site. Cumulable.

none pour ne pas l'activer. web pour les sites webs. email pour les adresses emails. phone pour les numros de tlphone. map pour les cartes. all pour tout choisir.

setAutoLinkMask(int)

0 Linkify.WEB_URLS Linkify.EMAIL_ADDRESSES Linkify.PHONE_NUMBERS Linkify.MAP_ADDRESSES Linkify.All

android:gravity

Dtermine o doit se placer le texte dans le widget. Cumulable.

top pour qu'il se mette en haut. bottom pour qu'il se mette en bas. left pour qu'il se mette gauche. right pour qu'il se mette droite. center pour qu'il au centre. center_horizontal pour quelle se mette au centre de l'axe horizontal. center_vertical pour qu'il se mette au centre de l'axe setGravity(int) vertical. fill pour que le texte s'tire et remplisse tout le composant. fill_horizontal pour que le texte s'tire et remplisse tout le composant sur l'axe horizontal. fill_vertical pour que le texte s'tire et remplisse tout le composant sur l'axe vertical.

Gravity.TOP Gravity.BOTTOM Gravity.LEFT Gravity.RIGHT Gravity.CENTER Gravity.CENTER_HORIZONTAL Gravity.CENTER_VERTICAL Gravity.FILL Gravity.FILL_HORIZONTAL Gravity.FILL_VERTICAL

www.siteduzero.com

Partie 2 : Annexes
Dfinir le texte qu'affichera le composant.

85/89

android:text

La chane de caractres afficher.

setText(CharSequence) La chane de caractres afficher.

www.siteduzero.com

Partie 2 : Annexes

86/89

EditText
Attribut Description Valeur XML et effet quivalent Java Valeur Java

Indique pour quel type de texte sera utilis ce champs. Par exemple, si on dit que le champ android:inputType servira indiquer une adresse email, le clavier virtuel facilitera la saisie en mettant en avant l'arobase.

text pour tous les textes normaux. textEmailAddress pour pouvoir insrer une adresse email. numberDecimal pour pouvoir insrer des valeurs numriques avec ventuellement une virgule. textPassword pour pouvoir insrer un mot de passe, le texte sera setRawInputType donc cach. (int) phone pour pouvoir insrer un numro de tlphone. datetime pour pouvoir insrer une date et une heure. date pour pouvoir insrer uniquement des dates. time pour pouvoir insrer uniquement des heures.

InputType.TYPE_CLASS_TEXT TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_DECIMAL TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD TYPE_CLASS_PHONE TYPE_CLASS_DATETIME | TYPE_DATETIME_VARIATION_NORMAL TYPE_CLASS_DATETIME | TYPE_DATETIME_VARIATION_DATE TYPE_CLASS_DATETIME | TYPE_DATETIME_VARIATION_TIME

android:hint

Cette fonction permet d'crire un texte indicatif dans le champs.

On peut indiquer directement la chane de caractres ou une rfrence vers une ressource.

setHint(int) ou setHint(string)

On peut indiquer directement la chane de caractres ou une rfrence vers une ressource.

Faites attention, la mthode android:text va tablir la valeur du champ, c'est--dire ce qu'il vaudra par dfaut. Le texte indiqu devra tre supprim par l'utilisateur s'il veut le changer. En revanche, android:hint permet de prciser une valeur qui sera crite dans le champ, mais pas comme une valeur, juste comme une indication, qui ne sera pas prise en compte en tant que valeur. L'utilisateur n'aura pas supprimer ce texte, et ne sera pas la valeur par dfaut.

www.siteduzero.com

Partie 2 : Annexes

87/89

CheckBox
Attribut Description Valeur android:checked La case est-elle coche l'initialisation ? Un boolen.

www.siteduzero.com

Partie 2 : Annexes

88/89

RadioGroup
Attribut Description Valeur L'identifiant de l'un des boutons qui appartient au groupe. 0 pour horizontal. 1 pour vertical. android:checkedButton Quel est le bouton qui sera slectionn par dfaut ? Souhaitez-vous que le groupe se dirige de manire horizontale ou verticale ?

android:orientation

www.siteduzero.com

Partie 2 : Annexes

89/89

RelativeLayout
Attribut android:layout_above android:layout_alignBaseline android:layout_alignBottom android:layout_alignLeft android:layout_alignParentBottom android:layout_alignParentLeft android:layout_alignParentRight android:layout_alignParentTop android:layout_alignRight android:layout_alignTop android:layout_alignWithParentIfMissing android:layout_below android:layout_centerHorizontal android:layout_centerInParent android:layout_centerVertical android:layout_toLeftOf android:layout_toRightOf Description Aligne la base du widget avec le sommet du widget rfrenc. Aligne le centre du widget sur le mme axe horizontal que le centre du widget rfrenc. Aligne la base du widget avec la base du widget rfrenc. Aligne le ct gauche du widget avec le ct gauche du widget rfrenc. Ncessite un boolen. Aligne la base du widget avec la base du parent en cas de true. Ncessite un boolen. Aligne le ct gauche du widget avec le ct gauche du parent en cas de true. Ncessite un boolen. Aligne le ct droit du widget avec le ct droit du parent en cas de true. Ncessite un boolen. Aligne le sommet du widget avec le sommet du parent en cas de true. Aligne le ct droit du widget avec le ct droit du widget rfrenc. Aligne le sommet du widget avec le sommet du widget rfrenc. Ncessite un boolen. Si le widget rfrenc n'est pas trouv, c'est le layout parent qui remplacera le widget en cas de true Aligne le sommet du widget avec la base du widget rfrenc. Ncessite un boolen. Aligne le widget horizontalement dans le parent en cas de true. Ncessite un boolen. Aligne le widget horizontalement et verticalement dans le parent en cas de true. Ncessite un boolen. Aligne le widget verticalement dans le parent en cas de true. Aligne le ct droit du widget avec le ct gauche du widget rfrenc. Aligne le ct gauche du widget avec le ct droit du widget rfrenc.

Voil, c'est termin ! Non je plaisante, on est encore trs loin de la compltion. Merci Brenger Pelou pour l'icne laide.

Remerciements
Pour leur(s) critique(s) perspicace(s), je tiens remercier: les btas testeurs ( Taguan, Tpt et nitneuq65 ). Hilaia . Remerciements spciaux John-John pour sa collaboration troite.

www.siteduzero.com