Sie sind auf Seite 1von 172

Dveloppement d'applications pour Android

M. Dalmau IUT de Bayonne Pays Basque

Positionnement dAndroid
LiPhone (Apple) Nokia (Symbian OS) Window Mobile (Microsoft) BlackBerry Palm (WebOS) Google (Android)

Architecture dAndroid

Architecture dAndroid
Un noyau linux 2.6
Gestion de le mmoire Gestion des processus Gestion du matriel (cran clavier ) Gestion des capteurs (appareil photo, GPS, acclromtre )

Architecture dAndroid
Des bibliothques (C et C++)
Graphisme Mdias Web

Architecture dAndroid

Une machine virtuelle java


Dalvik (une JVM par application) Code spcifique Android

Architecture dAndroid

Des gestionnaires pour les applications + une API en java


Gestion des fentres, des activits, des ressources

API pour dveloppement des programmes

Architecture dAndroid
Les applications (Activits)

Dveloppement dapplications pour Android

Production de logiciel
AndroidManifest

Chane de compilation Code source java .java Bytecode .class Binaire Dalvik .dex

Constitution de l'application Application .apk

Ressources

Tlchargement

IDE Eclipse ou Netbeans + plugins

SDK Android + outils

Machine virtuelle Dalvik API Android

Terminal

Environnement d'excution Environnement de dveloppement

Dvelopper pour Android


Les interfaces et les constantes sont dfinies dans des fichiers XML
Facilite la modification Statique

Les ressources sont tlcharges avec lapplication Les fonctionnalits sont dans le code
Lien avec ce qui est dfini en XML Accs aux ressources

LAPI nest pas totalement celle de java (classes redfinies (par exemple Color), interfaces, couteurs ) La syntaxe des fichiers XML est extensible difficile de savoir ce qui est prdfini Les proprits dfinies en XML peuvent tre contradictoires Linterface ne peut tre utilise que par lactivit qui la cre Difficile de dvelopper sans un environnement adquat (Eclipse ou Netbeans) en raison des fichiers gnrs La pr-visualisation des interfaces par Eclipse nest pas toujours conforme (ascenseurs, contenu dfini dans le code )

Le SDK Android
Tlchargeable sur : developper.android.com/sdk sous la forme dun zip ou dun fichier dinstallation Propose le SDKManager qui permet de tlcharger les plateformes et outils :
Android versions xx Google API versions xx Outils (tools et platform-tools)

Quelques outils du SDK Android


Accessibles partir dune ligne de commande (fentre DOS) adb permet la connexion au terminal (smartphone ou simulateur) pour :
Transfrer des fichiers (push / pull) Travailler en ligne de commande unix (shell) Installer une application (install) Paramtrer le rseau (forward) Dboguer une application (logcat)

dx transforme le bytecode java en code Dalvik apkbuilder constitue un fichier .apk tlchargeable sur le terminal Remarque : Eclipse utilise ces outils directement mais on est parfois oblig dy recourir (transfert de fichiers, installations directes dapplications )

Eclipse
Tlchargeable sur www.eclipse.org Ne ncessite pas dinstallation (simple copie) Le plugin pour Android est tlcharg et install depuis Eclipse (Menu Help Install New Software) sur https://dl-ssl.google.com/android/eclipse Il suffit ensuite dindiquer Eclipse o se trouve le SDK Android (Menu Windows Preferences Android)

Dvelopper avec Eclipse


Espace de travail

Remarque : les paramtrages dEclipse sont lis lespace de travail nouvel espace nouveaux paramtres

Dvelopper avec Eclipse


Projet Android
(Menu File New Android Project)

Nom SDK Paquetage (au moins 2 niveaux)

Dvelopper avec Eclipse

Zone ddition

Explorateur

Vues Hirarchie Dclarations

Etats (erreurs, excution )

Crer un terminal virtuel (simulateur)


(Menu Windows Android SDK and AVD Manager)

Crer un terminal virtuel (simulateur)

Paramtrage: Nom SDK Taille carte SD Format dcran Matriel

Terminal virtuel ou smartphone

Terminaux connects

Terminaux disponibles

Le terminal virtuel

Contrle du terminal (DDMS)

Etats (mmoire, fichiers ) Processus

Traces et erreurs dexcution

Structure dun projet Eclipse


src contient les fichiers source gen contient les fichiers gnrs par
Eclipse

res contient les ressources (images,


descriptions dinterfaces, valeurs)
Organis en sous dossiers par types

AndroidManifest dcrit les


proprits de lapplication

. . .

Le fichier AndroidManifest
Gnr par Eclipse, contient la description de lapplication
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="iut.tp1" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".DemoCoursActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

On modifiera ce fichier pour dclarer les lments de lapplication, les permissions, etc.

Le Fichier AndroidManifest
Modifiable directement ou par des formulaires

Manifest

Rubriques du fichier AndroidManifest

Nom du paquetage Versions SDK

Application
Nom Icne Elments constituant lapplication (activits, services, )

Permissions
Accs aux capteurs Accs au rseau Accs la tlphonie

Instrumentation (pour les tests)

Les ressources

Les ressources
Application embarque tout doit tre dans le fichier .apk tlcharg Le rpertoire res contient toutes les ressources qui seront mises dans le apk :
drawable-hdpi (images en haute dfinition) drawable-ldpi (images en basse dfinition) drawable-mdpi (images en moyenne dfinition) layout (description en XML des interfaces) values (dfinitions en XML de constantes : chanes, tableaux, valeurs numriques ) anim (description en XML danimations) menus (description en XML de menus pour lapplication) xml (fichiers XML utiliss directement par lapplication) raw (tous les autres types de ressources : sons, vidos, )

On peut ajouter dautres sous rpertoires

Crer des ressources valeurs


Les ressources de type valeur sont dcrites dans des fichiers XML ayant la forme suivante :
<?xml version="1.0 encoding= utf-8 ?> <resources> <color name= "coulfond>#AA7B03</color> <integer name= limite>567</integer> <integer-array name= codes_postaux> <item>64100</item> <item>33000</item> </integer-array> <string name= mon_titre>Un titre</string> <string-array name= planetes> <item>Mercure</item> <item>Venus</item> </string-array> <bool name=actif>true</bool> <dimen name taille>55px</dimen> </resources>

Type Nom Valeur

Les noms (identificateurs) servent a les dsigner : Dans dautres fichiers XML Dans le code

La classe R
Cest une classe gnre par Eclipse qui permet lapplication daccder aux ressources Elle contient des classes internes dont les noms correspondent aux types de ressources (id, drawable, layout ) Elle est constitue partir des fichiers placs dans les sous rpertoires du rpertoire res Une proprit est cre pour :
Chaque image plac dans drawable-xxxx Chaque identificateur dfini dans des fichiers XML (objets dinterface, constantes) Chaque fichier plac dans les rpertoires xml , raw

Utilisation des ressources


Rfrencement dune ressource dans un fichier xml. La forme gnrale est : "@type/identificateur" Par exemple : @string/machaine
Fait rfrence une chaine contenue dans un fichier XML plac dans le rpertoire res/values et dfinie comme suit :
<resources> <string name="machaine">Contenu de cette chaine</string> </resources>

Rfrencement dune ressource dans le code. La forme gnrale est : R.type.identificateur Par exemple : R.string.machaine
Fait rfrence la mme chaine

La classe Resources
Permet laccs aux ressources rpertories dans R On obtient une instance de cette classe par getResources() de lactivit Principales mthodes de la classe Resources (le paramtre est un identifiant dfini dans R de la forme R.type.nom) :
boolean getBoolean(int) int getInteger(int) int[] getArray(int) String getString(int) String[] getStringArray(int) int getColor(int) float getDimension(int) Drawable getDrawable(int)

Exemple : String titre = getResources().getString(R.string.ma_chaine);

Utilisation des ressources


Accs aux ressources dans lapplication
Mise en place de linterface principale
setContentView(R.layout.nom_du_fichier_xml);

Mise en place dinterfaces supplmentaires


Par les classes LayoutInflater ou MenuInflater

Accs direct une valeur ou une ressource :


String titre = getResources().getString(R.string.texte_titre); Drawable monImage = getResources().getDrawable(R.drawable.nom_de_l_image)

Uri (Uniform Resource Identifiers)


Dsigne des ressources locales ou distantes (plus gnral que les URL car non li un protocole rseau) Cration
Ressource locale
Uri.parse("android.resource://nom_du_paquetage_de_l_activit/" + R.chemin.mon_son);

Ressource distante
Uri.parse("http://domaine.sous_doamine/chemin/nom_du_fichier"); Uri.fromFile(File)

Codage en chane de caractres


toString()

Les applications

Structure dune application


Activit (android.app.Activity)
Programme qui gre une interface graphique Programme qui fonctionne en tche de fond sans interface Partage dinformations entre applications

Service (android.app.Service)

Fournisseur de contenu (android.content.ContentProvider) Ecouteur dintention diffuses (android.content.BroadcastReceiver) : Permet une application de rcuprer des informations gnrales (rception
dun SMS, batterie faible, )

Elments dinteraction
Intention (android.content.Intent) : permet une application dindiquer ce quelle sait faire ou de chercher un savoir-faire Filtre dintentions (<intent-filter> : permet de choisir la meilleure application pour assurer un savoir-faire

Dclaration des lments dans AndroidManifest.xml


Activit
<activity> <intent-filter> les savoir-faire </intent-filter> </activity>

Ecouteur dintention diffuse


<receiver> <intent-filter> les savoir-faire </intent-filter> </receiver>

Service
<service> <intent-filter> les savoir-faire </intent-filter> </service>

Fournisseur de contenu
<provider> <grant-uri-permission /> <path-permission /> </provider>

Application Android
Une activit = un programme + une interface Un service = un programme sans interface Une application =
Une activit principale Eventuellement une ou plusieurs activits secondaires Eventuellement un ou plusieurs services Eventuellement un ou plusieurs couteurs dintentions diffuses Eventuellement un ou plusieurs fournisseurs de contenu

Contenu du fichier AndroidManifest


<?xml version="1.0" encoding="utf-8"?> <service> <intent-filter> <manifest> Pour chaque service . . . <uses-sdk /> </intent-filter> <uses-permission /> Gnral </service> <application> <receiver> <activity> <intent-filter> Pour chaque ... <intent-filter> couteur </intent-filter> dintentions <action /> diffuses </receiver> <category /> <provider> Pour chaque <data /> <grant-urifournisseur de permission /> </intent-filter> contenu </provider> </activity> Pour chaque activit <uses-library /> </application> </manifest>

Activit Android
Classe qui hrite de Activity ou dune classe drive de Activity (par exemple de MapActivity pour utiliser Google maps, ListActivity ou TabActivity pour des interfaces particulires) On surcharge certaines mthodes qui sont appeles par Android pour dfinir le comportement (mme principe que les applets) :
onCreate onDestroy onStart onPause onResume onStop onRestart lors de la cration lorsque lactivit se termine lorsque lactivit dmarre ou redmarre lorsque lactivit nest plus en premier plan lorsque lactivit revient en premier plan lorsque lactivit nest plus visible lorsque lactivit redevient visible

Cycle de vie dune activit


Android se rserve le droit de tuer le processus unix dune activit sil ny a plus assez de ressources (mmoire). Les rgles sont les suivantes :
Une activit en premier plan nest tue que si cest elle qui consomme trop de ressources. Une activit en arrire plan ou non visible peut tre tue.

Lorsquune activit a t tue, si on revient dessus elle est relance (onCreate)


On peut sauvegarder ltat (cest--dire les proprits) dune activit (dans onPause) pour le retrouver lorsquelle elle est recre par le paramtre transmis onCreate

L'activit dmarre

onCreate() L'utilisateur revient sur l'activit onStart()

Cycle de vie dune activit


on Restart()

Etats principaux :
Active
Aprs lexcution de onResume

Le processus est tu

onResume L'activit passe en premier plan L'activit est en cours

Une autre activit passe en premier plan

Suspendue
L'activit passe en premier plan

une autre application a besoin de la mmoire

onPause()

Aprs lexcution de onPause

Arrte
L'activit n'est plus visible onStop()

Aprs lexcution de onStop

Termine
Aprs lexcution de onDestroy

onDestroy()

L'activit est termine

Les interfaces

Pensez vos interface pour un smartphone


Ecran tactile de petite taille
Eviter les interfaces trop touffues (on ne peut pas agrandir lcran comme on agrandit une fentre) Eviter les lments cliquables trop petits (il faut pouvoir cliquer avec le doigt mme si on a des gros doigts) Eviter les lment cliquables trop tasss (il faut pouvoir cliquer sur le bon lment mme si on vise mal)

Le dfilement se fait par touch/gliss


Pas trop dascenseurs (on ne peut pas faire dfiler un conteneur entier ET des lments de ce conteneur dans le mme sens) Pas dascenseurs mal placs (si tous les lments sont cliquables comment faire dfiler sans cliquer ?)

Lcran peut tre tourn Tous les smartphones nont pas la mme dfinition dcran

Cration dinterfaces
Par programme (comparable java swing) mais avec des classes propres Android
Dfinition de conteneurs (un conteneur = un conteneur + un mode de placement JPanel + Layout) Dfinition dlments dinteraction (widgets) + placement et ajout dans les conteneurs

Par description dans des fichiers xml (forme dclarative statique) Une interface est un arbre dont la racine est lcran et les feuilles les lments de linterface (boutons, textes, cases cocher, )

View ViewGroup FrameLayout DatePicker TimePicker ScrollView HorizontalScrollView LinearLayout TableLayout RadioGroup RelativeLayout AdapterView AbsListView ListView GridView AbsSpinner Spinner Gallery TextView EditText AutoCompleteTextView Button CompoundButton CheckBox ToggleButton RadioButton DigitalClock Chronometer ImageView ImageButton Progressbar AbsSeekBar RattingBar SeekBar AnalogClock

Hirarchie partielle de classes pour les interfaces


View ViewGroup TextView

Lgende Trait double = conteneurs ou groupes Gris = lments dinteraction (wigets)

Dfinir une interface en XML


Dfinition de linterface
<?xml version="1.0" encoding="utf-8"?> <!-- Commentaire --> <Classe_du_conteneur_principal xmlns:android="http://schemas.android.com/apk/res/android" proprits du conteneur principal > Lorsquil sagit <Classe de conteneur ou d'lment d'interface proprits du conteneur ou de l'lment d'interface dun conteneur il /> doit tre dcrit avec son contenu <Classe de conteneur ou d'lment d'interface proprits du conteneur ou de l'lment d'interface /> </Classe_du_conteneur_principal>

Espace de nommage dAndroid (impos)

Dfinir une interface en XML


Description dun conteneur de linterface
<Classe_de_conteneur Pour chaque proprits du conteneur conteneur > <Classe de conteneur ou d'lment d'interface proprits du conteneur ou de l'lment d'interface /> <Classe de conteneur ou d'lment d'interface proprits du conteneur ou de l'lment d'interface /> </Classe_du_conteneur>

Crer une interface partir dun fichier XML


Dans lactivit principale
setContentView(R.layout.nom_du_fichier_xml)

Ailleurs
LayoutInflater decodeur = LayoutInflater.from(contexte); View vue = decodeur.inflate(R.layout.nom_du_fichier_xml, parent, false); contexte est lactivit qui gre cette interface parent est le contenant dans lequel doit se placer la vue constitue partir du fichier XML Il ne reste plus qu ajouter cette vue dans le conteneur.

Units de mesure dans les fichiers XML


Dans les fichiers XML, les dimensions des lments dinterface (taille, marges, ) peuvent tre exprimes en diverses units :
Pixels (px) Pouces (in) Millimtres (mm) Points (pt) = 1/72 pouce Pixel densit indpendante (dp) 1 dp = 1 pixel pour un cran de 160 dpi Pixel taille indpendante (sp) relatif la taille des polices de caractres

Dans les fichiers XML les units sont exprimes sous la forme : 24.5mm ou 65px

Couleurs dans les fichiers XML


Dans les fichiers XML, les couleurs sont exprimes sous la forme dune chane de caractres codant les composantes en hexadcimal : "#AARRVVBB"
AA est lopacit (00 totalement transparent, FF opaque) RR est la composante rouge (00 FF) VV est la composante verte (00 FF) BB est la composante bleue (00 FF) Si AA est omis la couleur est opaque

Les conteneurs
FrameLayout (un seul lment) AbsoluteLayout (plusieurs lments placs par leur coordonnes) LinearLayout (plusieurs lments placs horizontalement ou verticalement sans ascenseurs) TableLayout (plusieurs lments en tableau sans ascenseurs) RelativeLayout (plusieurs lments placs relativement les uns aux autres) ScrollView (un seul lment avec ascenseur vertical) HorizontalScrollView (un seul lment avec ascenseur horizontal)

Les groupes
Regrouper des lments participant un choix
ListView (plusieurs lments organiss en liste verticale avec sparateurs). Souvent utilis pour des listes de mots (type menu). GridView (plusieurs lments organiss en table). Souvent utilis pour des tables de mots (type menu). RadioGroup (groupe de boutons radio dont un seul peut tre coch la fois) Gallery (plusieurs lments organises horizontalement avec dfilement). Souvent utilis pour des images

Proprit communes aux lments dinterface (conteneurs et widgets)


Identifiant Un identifiant peut tre associ chaque lment dcrit dans un fichier XML, cet identifiant permet d'accder l'objet cr dans le code ou de le rfrences dans dautres fichiers XML. Les lments ne devant pas tre rfrencs peuvent ne pas avoir d'identifiant. android:id="@+id/mon_ident" permettra de retrouver cet lment par findViewById(R.id.mon_ident). Mthode correspondante : setId(int)

Proprit communes aux lments dinterface (conteneurs et widgets)


Visibilit
android:visibility Rend llment visible, invisible ou absent (avec invisible la place est conserve, avec absent la place n'est pas conserve .

Fond
android:background couleur ou une image de fond

Taille
android:minHeight et android:minWidth dimensions minimales

Placement des lments contenus (dfini pour chaque lment)


android:layout_height et android:layout_width place prise par llment dans le conteneur : FILL_PARENT rempli toute la place WRAP_CONTENT occupe la place ncessaire android:layout_gravity positionnement de llment dans le conteneur top, bottom, left, right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill

Proprit communes aux lments dinterface (conteneurs et widgets)


Ascenseurs (sil y en a)
android:fadeScrollbars Pour choisir de faire disparatre ou pas les ascenseurs lorsqu'ils ne sont pas utiliss android:scrollbarDefaultDelayBeforeFade Dfinit le dlai avant que les ascenseurs non utiliss disparaissent android:scrollbarFadeDuration Dfinit la dure d'effacement des ascenseurs

Marges internes (dfini pour chaque lment)


android:layout_paddingBottom , android:layout_paddingLeft , android:layout_paddingRight , android:layout_paddingTop

Marges externes (dfini pour chaque lment)


android:layout_marginBottom , android:layout_marginLeft , android:layout_marginRight , android:layout_marginTop

Proprit communes aux lments dinterface (conteneurs et widgets)


Prise en compte des vnements
Prise en compte des clics sur llment
android:clickable Autorise ou interdit la prise en compte des clics

Mthode correspondante : setClickable(boolean)

Prise en compte des clics longs sur llment


android:longClickable Autorise ou interdit la prise en compte des clics longs

Mthode correspondante : setLongClickable(boolean)

On ajoutera ensuite un couteur dvnements pour les traiter

Exemple dinterface simple


Un LinearLayout contenant 2 lments placs lun sous lautre
<?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="wrap_content" > <Spinner andoid:id="@+id/planetes" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ProgressBar andoid:id="@+id/attente" android:layout_width=" wrap_content " android:layout_height="wrap_content" /> </LinearLayout>

Exemple dinterface simple


Un LinearLayout contenant 3 lments placs lun cot de lautre
<?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="wrap_content" >
<ToggleButton /> <CheckBox /> <RadioButton />

</LinearLayout>

Exemple dinterface complexe


Un LinearLayout vertical contenant 2 lments + 2 LinearLayout horizontaux
<?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" > <Spinner /> <ProgressBar /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button /> <ImageButton /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ToggleButton /> <CheckBox /> <RadioButton /> </LinearLayout> </LinearLayout>

Les Contenants

FrameLayout
Ne contient quun seul lment (si on en met plusieurs ils se superposent) Proprits supplmentaires : Contenu
android:foreground Pour dfinir une couleur ou une image. android:foregroundGravity Pour positionner limage

LinearLayout
Pour placer plusieurs lments en ligne ou en colonne sans ascenseur (utiliser ScrollView et/ou HorizontalScrollView). Proprits supplmentaires :
android:orientation Pour en dfinir le sens du LinearLayout (vertical ou horizontal) android:layout_weightSum Un paramtre de type : android:layout_weight peut tre associ chacun des lments placs dans le LinearLayout pour indiquer leur poids de redimensionnement relatif la valeur de layout_weightSum. Par exemple : android:layout_weightSum= "100" permettra de placer 2 lments ayant android:layout_weight = "60" et android:layout_weight = "40"

Exemple avec LinearLayout


LinearLayout vertical LinearLayout horizontal LinearLayout horizontal

AbsoluteLayout
Pour placer les lments par positions fixes. Chaque lment ajout dans un AbsoluteLayout indiquera sa position en mettant dans ses proprits :
android:layout_x="unit" android:layout_y="unit"

TableLayout
Pour placer des lments en tableau sans ascenseurs (pour en avoir le mettre dans un ScrollView et/ou un HorizontalScrollView). Proprits supplmentaires :
android:collapseColumns Pour dfinir les numros de colonnes cacher android:shrinkColumns Pour dfinir les numros de colonnes qui peuvent tre rtrcies en fonction de la place disponible android:stretchColumns Pour dfinir les numros de colonnes qui peuvent tre agrandies en fonction de leur contenu

Chaque lment ajout dans un TableLayout indiquera le nombre de colonnes quil occupe en mettant dans ses proprits :
android:layout_span (par dfaut 1)

Exemple avec TableLayout


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" > <TableRow> <TextView /> <EditText android:id="@+id/nom" /> <Button android:id="@+id/envoyer" /> </TableRow> <TableRow> <ProgressBar android:id="@+id/attente" android:layout_span="2" /> <Button android:id="@+id/annuler" android:text="Abandonner" /> </TableRow> </TableLayout>

RelativeLayout
Permet de placer des lments les uns relativement aux autres
Placement par rapport au conteneur
android:layout_alignParentBottom="b" (o b vaut true ou false) android:layout_alignParentLeft="b" (o b vaut true ou false) android:layout_alignParentRight="b" (o b vaut true ou false) android:layout_alignParentTop="b" (o b vaut true ou false) android:layout_centerHorizontal="b" (o b vaut true ou false) android:layout_centerInParent="b" (o b vaut true ou false) android:layout_centerVertical="b" (o b vaut true ou false)

Placement par rapport aux autres lments


android:layout_above="@+id/ident"/ android:layout_below="@+id/ident"/ android:layout_toLeftOf="@+id/ident"/ android:layout_toRightOf="@+id/ident"/ android:layout_alignLeft="@+id/ident"/ android:layout_alignRight="@+id/ident"/ android:layout_alignTop="@+id/ident"/ android:layout_alignBottom="@+id/ident"/

Exemple avec RelativeLayout


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent"> <EditText android:id="@+id/nom" " android:layout_alignParentTop="true" android:layout_alignParentLeft="true" /> <Button android:id="@+id/envoyer" android:layout_toRightOf="@+id/nom" /> <ProgressBar android:id="@+id/attente" android:layout_below="@+id/nom" /> <Button android:id="@+id/annuler" android:layout_toRightOf="@+id/attente" android:layout_below="@+id/nom" /> </RelativeLayout>

ScrollView et HorizontalScrollView
En gnral utiliss pour ajouter des ascenseurs un conteneur. Ne peuvent contenir quun seul lment (le plus souvent un conteneur). Proprits supplmentaires :
android:fillViewport="b" (o b vaut true ou false) indique si le contenu doit tre tir pour occuper la place disponible ou pas

ATTENTION : En raison de lcran tactile le dfilement porte sur llment le plus externe (le plus haut dans larbre de linterface)

Les Groupes

ListView
Place les lments en liste verticale et ajoute un ascenseur si ncessaire
Sparateurs
android:divider Pour dfinir la couleur des sparateurs ou pour utiliser une image comme sparateur. android:dividerHeight="unit" Pour dfinir la hauteur des sparateurs (mme sils contiennent une image)

Type de choix
android:choiceMode="c" (o c peut prendre les valeurs : none, singlechoice, multipleChoice) pour indiquer le mode de choix dans la liste (aucun, un seul, plusieurs).

ListView (contenu)
En XML (texte seulement)
android:entries="@array/maliste" dfinit le contenu de la liste partir du contenu d'un fichier xml plac dans res/values/ et qui a la forme :
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="maliste"> <item>premier lment</item> <item>deuxime lment</item> <item>dernier lment</item> </string-array> </resources>

Dans le code (lments quelconques)

On utilise un gestionnaire de contenu (Adapter) setAdater(Adapter) pour associer la ListView Soit de classe prdfinie (ArrayAdapter , SimpleAdapter, CursorAdapter) ArrayAdapter(Context, type) le second paramtre est une type prdfini : android.R.layout.simple_list_item_1 pour une liste choix unique ou android.R.layout.simple_list_item_multiple_choice pour une liste choix multiple (une case cocher apparat cot de chaque lment de la liste) ArrayAdapter.add(Object) pour remplir la liste Soit de classe personnalise (hritage de BaseAdapter)

Exemple de ListView
En XML
Dans le XML dinterface
<ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/liste_de_planetes android:entries ="@array/planetes" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="@drawable/separateur" android:dividerHeight="25px" android:choiceMode="multipleChoice" />

Dans le XML de valeurs

<string-array name="planetes"> <item>Mercure</item> <item>Neptune</item> </string-array>

Dans le code
ListView liste = (ListView) findViewById(R.id.liste_de_planetes); String[] elements = getResources().getStringArray(R.array.planetes); ArrayAdapter<String> adaptateur = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice); for (int i=0; i<elements.length; i++) adaptateur.add(elements[i]); liste.setAdapter(adaptateur);

GridView
Fonctionne comme ListView mais permet une prsentation en plusieurs colonnes Exemple
Dans le XML dinterface
<GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/liste_de_planetes" android:entries ="@array/planetes" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="2" android:stretchMode="columnWidth" android:columnWidth="60dp" android:gravity="fill_horizontal" android:choiceMode="multipleChoice" />

Dans le code (mme principe)


GridView table = (GridView) findViewById(R.id.liste_de_planetes); String[] elements = getResources().getStringArray(R.array.planetes); ArrayAdapter<String> adaptateur = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice); for (int i=0; i<elements.length; i++) adaptateur.add(elements[i]); table.setAdapter(adaptateur);

RadioGroup
Pour grouper des boutons radio (ajoute un ascenseur si ncessaire) Un seul bouton peut tre coch la fois (attention ltat initial qui nest pris en compte par le RadioGroup que sil est fait par la mthode check du RadioGroup) Exemple de fichier XML :
<RadioGroup android:id="@+id/groupe_de_boutons" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <RadioButton /> <RadioButton /> </RadioGroup>

Gallery
Normalement utilis pour faire des galeries dimages avec dfilement horizontal Proprits supplmentaires
android:animationDuration Pour dfinir la dure de la transition (en ms) lorsque l'on passe d'un lment l'autre android:unselectedAlpha Pour dfinir la transparence des lments non slectionns

Pour remplir une galerie il faut un Adapter (comme pour ListView) mais que lon doit crire par hritage de la classe BaseAdapter puis lassocier la galerie par la mthode setAdapter
Exemple de fichier XML : <Gallery android:id="@+id/magalerie" android:layout_width="fill_parent" android:layout_height="wrap_content" android:unselectedAlpha="0.5" />

Les Composants dinterface (Widgets)

Placement des composants d'interface


Placement dans le conteneur
Lorsqu'ils sont placs dans un AbsoluteLayout leur position est dfinie par : android:layout_x="unit" android:layout_y="unit" Lorsqu'ils sont placs dans un RelativeLayout leur position est dfinie par rapport ce contenant et/ou aux autres composants Lorsqu'ils sont placs dans un autre contenant leur position est dfinie par ce contenant

Taille
android:layout_height="t" (o t peut tre une unit ou prendre les valeurs FILL_PARENT ou WRAP_CONTENT) android:layout_width="t" (o t peut tre une unit ou prendre les valeurs FILL_PARENT ou
WRAP_CONTENT)

Marges externes
android:layout_marginBottom="unit" marge externe en bas android:layout_marginLeft="unit" marge externe gauche android:layout_marginRight="unit" marge externe droite android:layout_marginTop="unit" marge externe en haut

Placement des composants d'interface


Occupation du conteneur (sauf Relative et Absolute Layout)
android:layout_gravity="g" (o g peut prendre les valeurs : top, bottom, left, right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill) On peut combiner (si a a une sens) plusieurs valeurs par | Par exemple : android:layout_gravity="top|right"

Dans le cas dun LinearLayout ce paramtre ne permet pas de modifier le placement implicite (les uns cot des autres ou les uns sous les autres selon lorientation du LinearLayout)
Comme un traitement de texte on ne peut pas faire une ligne dont le dbut est cadr gauche et la fin est cadre droite ! Pour obtenir ce type de placement il faut encapsuler llment dans un FrameLayout et le placer dans celui-ci

ImageView
Permet dafficher des images Proprits :
Contenu
android:src Pour dfinir une couleur ou une image. android:tint Pour dfinir une couleur qui teinte l'image

Position et dimensions de limage


android:adjustViewBounds La taille de lImageView sera ou pas modifie android:baselineAlignBottom Cadrage ou pas de l'image en bas de la zone android:cropToPadding L'image sera ou pas coupe si elle est plus grande que la taille disponible android:scaleType Pour dfinir le mode de redimensionnement de l'image avec ou sans dformation. (voir exemples transparent suivant)

Taille
android:maxHeight Pour dfinir la hauteur maximale android:maxWidth Pour dfinir la largeur maximale

ImageView Exemples
<ImageView android:id="@+id/image" android:src="@drawable/keithwembley" android:layout_width="fill_parent" android:layout_height="wrap_content" android:maxHeight="200px" android:adjustViewBounds="true" android:scaleType="centerCrop" /> <ImageView android:id="@+id/image" android:src="@drawable/keithwembley" android:layout_width="fill_parent" android:layout_height="wrap_content" android:maxHeight="200px" android:adjustViewBounds="true" android:scaleType="fitXY" />

TextView et EditText
TextView est normalement utilis pour afficher un texte tandis que EditText lest pour saisir du texte

Proprits :
Dimensions de texte
android:ems Pour dfinir la taille du texte en caractres android:maxems Pour dfinir le nombre de caractres des lignes du texte android:height="unit" android:maxheight="unit" android:minheight="unit" android:width="unit" android:maxwidth="unit" android:minwidth="unit"

TextView et EditText
Contenu
android:text="texte a afficher" android:hint="initial" dfinit le texte afficher quand la zone est vide

Taille et aspect du texte


android:textSize="unit" utiliser de prfrence l'unit sp qui est lie aux polices android:textScaleX Pour dfinir l'chelle horizontale du texte android:texteStyle="g" (o s peut tre normal, bold, italic) ces styles peuvent tre combins par | android:typeface="s" (o s peut tre normal, sans, serif, monospace) android:singleLine="b" (o b vaut true ou false) limite le texte une seule ligne android:lines Pour dfinir le nombre de lignes du texte android:maxlines Pour dfinir le nombre maximal de lignes du texte android:minlines Pour dfinir le nombre minimal de lignes du texte android:lineSpacingExtra Pour dfinir lespace supplmentaire entre les lignes android:scrollHorizontally Pour aurtoriser ou interdire le dfilement horizontal du texte

TextView et EditText
Comportement du texte
android:autoLink="a" (o a peut tre : none, web, email, phone, map ou all) indique si les liens de ce type apparaissant dans le texte sont automatiquement rendus cliquables. android:autoText Pour valider ou pas le mode correction du texte android:capitalize="c" (o c peut tre : none, sentences, words, characters) indique le type de saisies que le texte mmorise et peut re-proposer. android:digits Pour indiquer si la saisie n'accepte que du numrique ou pas android:numerics="x" (o x peut tre integer, signed, decimal) dfinit le mode de saisie numrique android:password pour cacher ou pas le texte lors d la saisie android:phonenumber Pour indiquer si la saisie n'accepte que des n0s de tlphone android:inputType Pour dfinir le mode de saisie (none, text, textCapCharacters, textCapWords, textCapSentences, textAutoCorrect, textAutoComplete, textMultiLine, textUri, textEmailAddress, textEmailSubject, textShortMessage, textLongMessage, textPersonName, textPostalAddress, textPassword, textVisiblePassword, textWebEditText, textFilter, textPhonetic, textWebEmailAddress, textWebPassword, number, numberDecimal, numberPassword, phone, datetime, date ou time)

TextView et EditText
Affichage
android:cursorVisible Pour rendre visible ou non le curseur android:editable Pour autoriser ou pas la modification du texte android:ellipsize="e" (o e peut tre : none, start, middle, end, marquee) dfinit le mode de csure du texte android:linksClickable Pour rendre ou pas les liens cliquables android:textIsSelectable pour autoriser/interdire la slection de texte

Couleurs et images
android:textColor Pour dfinir une couleur au texte android:textColorHighlight Pour dfinir une couleur de surlignage du texte android:textColorHint Pour dfinir une couleur au texte par dfaut android:textColorLink Pour dfinir une couleur aux liens du texte android:drawableBottom Pour dfinir une couleur ou une image de fond au texte

AutoCompleteTextView
Cest une spcialisation de EditText pour apporter lauto compltion Proprits supplmentaires:
android:completionHint="texte" texte affich en titre du menu droulant android:completionThreshold Pour dfinir le nombre de caractres taper avant que la compltion n'entre en action. android:dropDownHeight="unit" on peut aussi utiliser les constantes fill_parent et wrap_content, dfinit la hauteur du menu droulant android:dropDownWidth="unit" on peut aussi utiliser les constantes fill_parent et wrap_content, dfinit la hauteur du menu droulant android:dropDownHorizontalOffset Pour dfinir le dcalage horizontal du menu droulant android:dropDownVerticalOffset Pour dfinir le dcalage vertical du menu droulant

Les boutons
Button
Mmes paramtres que TextView

ImageButton
Mmes paramtres que ImageView cd :
android:src="couleur" pour dfinir une couleur ou une image android:adjustViewBounds Pour indiquer si la taille du bouton doit ou pas tre ajuste celle de l'image android:baselineAlignBottom Pour indiquer que l'image est place ou pas en bas de la zone android:cropToPadding Pour indiquer si l'image sera coupe ou pas si elle est plus grande que la taille disponible android:scaleType="s" (o s peut prendre les valeurs : matrix, fitXY, fitStart, fitCenter, fitEnd, center, centerCrop, centerInside) permet de redimensionner ou pas l'image la taille disponible et/ou de la dformer. android:maxHeight Pour dfinir la hauteur disponible android:maxWidth Pour dfinir la largeur disponible android:tint Pour dfinir une couleur qui teinte l'image

Les lments deux tats


Ils ont les mmes paramtres que TextView auxquels vient sajouter la dfinition de ltat initial :
android:checked="b" o b vaut true ou false Pour dfinir ltat initial

CheckBox RadioButton ToggleButton


android:disabledAlpha pour dfinir la transparence applique lorsque le bouton est inactif android:textOff Pour dfinir le texte quand le bouton n'est pas allum android:textOn Pour dfinir le texte quand le bouton n'est pas allum

Liste de choix (Spinner)


Affiche le choix actuel et affiche un RadioGroup quand on clique dessus pour le changer Proprits :
android:prompt Pour dfinir le titre de la fentre qui s'ouvre lorsque l'on fait un choix android:entries="@array/maliste" dfinit le contenu de la liste partir du contenu d'un fichier xml plac dans res/values/ qui a la forme suivante : <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="maliste"> <item>Mercure</item> <item>Neptune</item> </string-array> </resources>

Choix de date et dheure


DatePicker
android:startYear Pour dfinir l'anne de dpart du calendrier affich android:endYear Pour dfinir l'anne de fin du calendrier affich android:minDate Pour dfinir la date affiche de dpart du calendrier sous la forme mm/jj/aaaa android:maxDate Pour dfinir la date affiche de fin du calendrier sous la forme mm/jj/aaaa

TimePicker

ProgressBar
Deux comportements selon que lon connat ou pas la valeur maximale
android:indeterminate Pour dfinir le type de progressBar (true=indtermin, false=dtermin).

Animation (si indtermin)


android:indeterminateBehavior="i" (o i peut tre : repeat ou cycle) dfinit le comportement de l'animation pour le type circulaire (repeat=recommence l'animation, cycle=changer le sens de l'animation)

Dimensions
android:maxHeight="unit" android:minHeight="unit" android:maxWidth="unit" android:minWidth="unit"

Valeurs (si dtermin)


android:max Pour dfinir la valeur maximale android:progress Pour dfinir la valeur initiale android:secondaryProgress Pour dfinir une valeur secondaire (par exemple celle d'un buffer comme on le voit sur des vidos en streaming)

Formes des ProgressBar


En labsence de paramtre style la forme est circulaire Pour obtenir dautres forme on utilise le paramtre style :
style="?android:attr/s" o s peut tre :
progressBarStyleHorizontal progressBarStyleSmall progressBarStyleLarge

On ne peut pas changer la couleur

SeekBar
C'est un ProgressBar sous forme de barre horizontale dote d'un curseur permettant de modifier la valeur si on a choisi
android:indeterminate="false"

sinon le curseur ne marche pas et la barre bouge sans arrt.

RatingBar
Paramtres :
android:isIndicator Pour indiquer si l'utilisateur peut modifier la valeur ou pas (true= non modifiable) android:numStars Pour dfinir le nombre d'toiles affiches android:rating Pour dfinir la position initiale android:stepSize Pour dfinir le pas de progression (on peut colorier des dtoiles par exemple)

Horloges et Chronomtres
AnalogClock DigitalClock Chronometer
android:format="f" (o f est une chane dans laquelle la premire occurrence de %s sera remplace par la valeur du chronomtre sous la forme MM:SS ou H:MM:SS)

Les vnements (interaction)

Traitement des vnements


Tous les lments dinterface (conteneurs et widgets) possdent les mthodes suivantes :
setOnClickListener(View.OnClickListener) associe un couteur d'vnements aux clics sur la vue setOnLongClickListener(View.OnLongClickListener) associe un couteur d'vnements aux clics longs sur la vue setOnKeyListener(View.OnKeyListener) associe un couteur d'vnements aux actions clavier sur la vue setOnTouchListener(View.OnTouchListener) associe un couteur d'vnements aux touchs sur la vue

qui permettent de leur associer des couteurs dvnements Certains lments ont des couteurs spcifiques

Traitement des vnements (les bonnes habitudes)


Quand un widget est modifi la mthode correspondante de lcouteur dvnements associ est excute Ceci est vrai que le widget soit modifi par lutilisateur ou par programme. Il est donc prfrable de ne mettre en place les couteurs dvnements quaprs avoir totalement initialis les widgets pour viter quils ne sexcutent au cours de ces initialisations

Evnements gnraux
Evnement Clic Clic long Clavier
setOnKeyListener View.OnKeyListener Association Classe setOnClickListener View.OnClickListener Mthode Paramtres onClick(View) lment concern

setOnLongClickListener onLongClick(View) View.OnLongClickListener lment concern onKey(View, int, KeyEvent) lment concern Code clavier Evnement clavier onTouch(View, MotionEvent) lment concern Evnement de touch

Touch

setOnTouchListener View.OnTouchListener

Evnements spcifiques
ListView , GridView et Gallery
Evnement sur un lment Clic Association Classe Mthode
Paramtres
onItemClick(AdapterView, View, int, long) Gestionnaire de contenu lment concern Rang de llment Identifiant de llment onItemLongClick(AdapterView, View, int, long) Idem onItemSelected (AdapterView, View, int, long) Idem onNothingSelected(AdapterView)

setOnItemClickListener
AdapterView.OnItemClickListener

Clic long Slection

setOnItemLongClickListener
AdapterView.OnItemLongClickListener

setOnItemSelectedListener
AdapterView.OnItemSelectedListener

Evnements spcifiques
Spinner et AutoCompleteTextView
Evnement sur un lment Slection Association Classe Mthode
Paramtres
onItemSelected (AdapterView, View, int, long) Elment permettant le choix lment concern Rang de llment Identifiant de llment onNothingSelected(AdapterView)

setOnItemSelectedListener
AdapterView.OnItemSelectedListener

Evnements spcifiques
TextView et EditText
Evnement Association Classe
TextWatcher

Mthode
Paramtres
onEditorAction(TextView, int, KeyEvent)
Elment concern EditorInfo.IME_NULL (si touche Entre) Evnement clavier (si touche Entre)

Fin de saisie setOnEditorActionListener

Modification

addTextChangedListener TextChangedListener

beforeTextChanged(CharSequence, int, int, int) afterTextChanged(CharSequence, int, int, int)


Texte Point de dpart de la modification Nombre de cars remplacs Nombre de cars de remplacement

Saisie

setKeyListener KeyListener

onKeyDown(View, Editable, int, KeyEvent) onKeyUp(View, Editable, int, KeyEvent)


Elment concern Texte Code de la touche Evnement clavier

Evnements spcifiques
DatePicker
Evnement de choix

Association Classe init DatePicker.OnDateChangedListener

Choix

Mthode Paramtres onDateChanged(DatePicker, int, int, int) Elment concern


Anne Mois Jour

TimePicker
Evnement de choix

Association Classe setOnTimeChangedListener TimePicker.OnTimeChangedListener

Choix

Mthode Paramtres onTimeChanged(TimePicker , int, int) Elment concern


Heure Minutes

Evnements spcifiques
SeekBar
Evnement

Association Classe

Curseur dplac
setOnSeekBarChangeListener SeekBar.OnSeekBarChangeListener

Mthode Paramtres onProgressChanged( SeekBar, int, boolean) Elment concern


Position du curseur Action de lutilisateur

Dbut de dplacement Fin de dplacement

onStartTrackingTouch( SeekBar)
Elment concern

onStopTrackingTouch( SeekBar)
Elment concern

Evnements spcifiques
RatingBar
Evnement

Valeur modifie

Mthode Paramtres onRatingChanged(RatingBar, setOnRatingBarChangeListener RatingBar.OnRatingBarChangeListener float, boolean) Elment concern Association Classe
Valeur choisie Action de lutilisateur

Chronometer
Evnement

Incrmentation

Mthode Paramtres onChronometerTick( setOnChronometerTickListener Chronometer) Chronometer.OnChronometerTickListener Elment concern

Association Classe

Notifications

La classe Toast
Texte qui apparat en premier plan puis disparat au bout d'un temps donn
Cration d'un Toast
Toast.makeText(Context, String, int) renvoie l'objet de classe Toast cr. Le premier paramtre est l'activit Le deuxime paramtre est le message afficher Le dernier paramtre indique la dure d'affichage les seules valeurs possibles sont : Toast.LENGTH_SHORT (2 secondes) ou Toast.LENGTH_LONG (5 secondes).

Positionnement d'un Toast


setGravity(int, int, int) appele avant l'affichage par show pour indiquer o s'affichera le message. Le premier paramtre sert placer le message par rapport l'cran. Il peut prendre l'une des valeurs dfinies dans la classe Gravity soit : Gravity. (TOP, BOTTOM, LEFT, RIGHT, CENTER_VERTICAL, FILL_VERTICAL, CENTER_HORIZONTAL, FILL_ HORIZONTAL, CENTER, FILL). Les deux paramtres suivants indiquent le dcalage (en pixels).

Affichage d'un Toast


show() affiche le message pour la dure dfinie lors de sa cration.

Menus

Menus
Deux types
Menu gnral de lactivit Menu contextuel associ un lment dinterface

Contiennent des rubriques sous la forme texte et/ou image Dcrits par un fichier XML plac dans res/menu (rpertoire crer) de la forme :
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/nom_du_choix_1" android:icon="@drawable/image_du_choix_1" android:title="@string/texte_du_choix_1" /> <item /> </menu>

Sous menus
Chaque lment dun menu peut proposer des sous menus Dcrits dans le fichier XML sous la forme :
<item android:id="@+id/nom_du_choix_N" android:icon="@drawable/image_du_choix_N" android:title="@string/texte_du_choix_N"> <menu> <item android:id="@+id/nom_du_sous_choix_1" android:title="texte_du_sous_choix_1" /> </menu> </item>

Menu gnral
Apparat par appui de la touche Menu Cration dans la mthode onCreateOptionMenu de l'activit partir du fichier xml de description du menu sous la forme :
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.nom_du_fichier_xml_du_menu, menu); return true; }

Menu gnral
Ractions aux choix
Dans la mthode onOptionsItemSelected de l'activit qui est appele lorsque l'utilisateur fait un choix dans un menu ou un sous menu gnral :
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.nom_du_choix_1: // traitement du choix 1 return true; case R.id.nom_du_sous_choix_1: // traitement du sous choix 1 return true; default: return super.onOptionsItemSelected(item); } }

Menu contextuel
Apparat par appui long sur llment dinterface Associ llment dinterface par la mthode :
registerForContexMenu(element_associe_au_menu_contextuel);

Cration dans la mthode onCreateContextMenu de l'activit partir du fichier xml de description du menu sous la forme :
public void onCreateContextMenu(ContextMenu menu, View element, ContextMenuInfo info) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.nom_du_fichier_xml_du_menu, menu); }

Menu contextuel
Ractions aux choix
Dans la mthode onContextItemSelected de l'activit qui est appele lorsque l'utilisateur fait un choix dans un menu ou un sous menu contextuel :
public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.nom_du_choix_1: // traitement du choix 1 return true; case R.id.nom_du_sous_choix_1: // traitement du sous choix 1 return true; default: return super.onContextItemSelected(item); } }

Couleurs et images

La classe Color
Diffrente de celle de java
argb(int, int, int, int) renvoie le code de la couleur dfinie par les 4 paramtres (transparence, rouge, vert, bleu). Le 1er paramtre peut tre omis pour obtenir une couleur opaque. alpha(int) renvoie la transparence de la couleur dont le code est pass en paramtre red(int) renvoie la composante rouge de la couleur dont le code est pass en paramtre green(int) renvoie la composante verte de la couleur dont le code est pass en paramtre blue(int) renvoie la composante bleue de la couleur dont le code est pass en paramtre

Couleurs prdfinies
Color.BLACK, Color.WHITE Color.LTGRAY, Color.GRAY, Color.DKGRAY Color.RED, Color.GREEN, Color.BLUE Color.CYAN, Color.MAGENTA, Color.YELLOW Color.TRANSPARENT

La classe Drawable
Classe de tout ce qui peut se dessiner (dont les images)
Quelques types :
Bitmap : image PNG ou JPEG Nine Patch : extension de PNG permettant dindiquer comment la dformer. Le SDK propose un utilitaire draw9path plac dans le rpertoire tools Shape : dessin Layers : calques States : image ayant plusieurs tats (aspects) par exemple pour avoir un aspect diffrent quand slectionn, actif

La classe BitmapDrawable
Spcialisation de Drawable pour les images

La classe BitmapFactory
Permet de crer des images depuis diverses sources Un tableau doctets (decodeByteArray) Un fichier (decodeFile)
Une ressource (decodeResource) Un flux (decodeStream)

Ces crations utilisent des options (BitmapFactory.Options)


inSampleSize pour rduire limage inScaled pour redimensionner limage inDither pour autoriser ou interdire le tramage inPugeable pour librer la mmoire occupe par limage outHeigth, outWidth pour dfinir la taille

Navigation entre activits

Navigation entre activits


Dmarrer une activit Mode explicite :
On indique la classe de lactivit lancer (par exemple dans une application multi interfaces) Cette activit doit tre dclare dans le fichier AndroidManifest.xml de lapplication par une balise <activity android:name=".classe ">

Mode implicite :
On dcrit lactivit lancer et Android recherche une activit correspondant cette description (par exemple un navigateur web)

On peut ventuellement passer des paramtres et rcuprer des valeurs de retour de lactivit lance

Invocation implicite
Activit Appelante Intent Android Intent

Filtre Activit

Filtre Activit

Filtre Activit choisie

Android choisit lactivit lancer en fonction de lIntent mis par lactivit appelante et des filtres associs aux activits prsentes Lactivit choisie reoit cet Intent Lactivit choisie renvoie un Intent lappelante lorsquelle se termine

Intention diffuse
Intent Android

Filtre Ecouteur dintentions diffuses

Filtre Ecouteur dintentions diffuses

Filtre Ecouteur dintentions diffuses

Android envoie lIntent toutes les applications ayant un couteur dintentions diffuses associ des filtres correspondants cet Intent

LIntent
Informe sur les intentions de lactivit ou du service recherch par 3 lments :
Action
Chane de caractres qui indique le type daction recherch (par exemple appel tlphonique)

Catgorie
Chane de caractres qui indique la catgorie de lactivit recherche (par exemple CATEGORY_LAUNCHER indique une activit propose comme excutable par Android (icne de lancement))

Donne ou Type
Chane de caractres et Uri qui indiquent la donne transmise lactivit lance (par exemple le nde tlphone) ou le type de rponse attendu

Peut contenir les paramtres passs lactivit lance Peut contenir les valeurs renvoyes par lactivit lance

Mthodes de la classe Intent


Construction
Intent(String) : avec action Intent(String, Uri) :avec action et Uri

Ajout de catgorie
addCategory(String) ajoute une catgorie setDataAndType(Uri, String) dfinit lUri et le type mime des donnes

Comparaison
filterEquals(Intent) renvoie true si le paramtre correspond au mme filtre

Contenu
getAction() renvoie laction (String) getCategories() renvoie les catgorie (collection de String) getData() renvoie lUri correspondant aux donnes (Uri) getType() renvoie le type mime des donnes (String)

Paramtres
putExtra(nom, valeur) ajoute un paramtre associ un nom getxxxExtra(nom) renvoie le paramtres correspondant au nom (xxx dpend du type de paramtre : Int, String, StringArray )

Filtres dintentions
Dans le AndroidManifest.xml chaque activit ou service est associ un ou plusieurs filtres dintentions qui permettent Android de choisir une activit (en mode implicite) Forme gnrale :
<activity android:name=".Nom_De_La_Classe_De_L_Activit" > <intent-filter> <action android:name=nom_d_action_1 /> . <action android:name=nom_d_action_N /> <category android:name=nom_de_categorie_1 /> <category android:name=nom_de_categorie_N /> <data android:mimeType=nom_de_type_mime android:scheme=protocole://hote:port/chemin /> /> </intent-filter> <intent-filter> </intent-filter> </activity>

Filtrage dintentions
En mode explicite il ny a aucun filtrage
Lobjet Intent de lappelant est transmis lappel

En mode implicite Android utilise les informations contenues dans lobjet Intent de lappelant pour les confronter aux filtres dfinis par les activits connues dans leur fichiers AndroidManifest. Ces filtres dfinissent les capacits de lactivit en termes :
Dactions : lune des actions indiques dans lIntent doit correspondre lune de celles du filtre De catgorie : toutes les catgories indiques dans lIntent doivent apparatre dans le filtre De donnes : le type de donnes indiqu dans lIntent doit correspondre celui du filtre

Quelques valeurs prdfinies


Actions
android.intent.action.CALL appel tlphonique android.intent.action.EDIT affichage de donnes pour dition par lutilisateur android.intent.action.MAIN activit principale dune application android.intent.action.VIEW affichage de donnes android.intent.action.WEB_SEARCH recherche sur le WEB

Catgories
android.intent.category.DEFAULT activit pouvant tre lance explicitement android.intent.category.BROWSABLE peut afficher une information dsigne par un lien android.intent.category.LAUNCHER activit propose au lancement par Android android.intent.category.TAB activit associe dans un onglet dinterface (TabHost)

En gras le cas dune activit principale dapplication La plupart des valeurs prdfinies correspondent des activits disponibles sur Android (appel tlphonique, navigateur )

Exemple
On a crit une application contenant une activit de traduction franais/basque Cette activit affiche 2 zones de texte et un bouton : on tape le texte traduire dans la 1re zone quand on clique le bouton la traduction saffiche dans la 2me zone On prvoit que lactivit puisse dmarrer avec un texte traduire quelle reoit dans un Bundle (on verra plus tard comment faire) On la dote dun filtre avec :
Action = android.intent.action.VIEW Catgorie = "Traduction FR-BSQ" Type mime de donnes = "text/plain

Un dveloppeur ayant cette application installe pourra lancer une traduction depuis une application en prparant un Intent runissant ces informations et en y ajoutant la chane traduire : Android la trouvera pour lui et la lancera Si cette application a prvu de renvoyer la chane traduite quand elle se termine, lautre application pourra la rcuprer et lutiliser.

Lancer une activit


Lancer explicitement une activit
Intent demarre = new Intent(this, NomDeLaClasseDeLActiviteALancer.class); startActivity(demarre);

Lancer implicitement une activit


Exemple : lancer un navigateur sur une page :
Uri chemin = Uri.parse("http://www.google.fr"); Intent naviguer = new Intent(Intent.ACTION_VIEW, chemin); startActivity(naviguer);

Exemple : appeler un nde tlphone :


Uri numero = Uri.parse("tel:0559574320"); Intent appeler = new Intent(Intent.ACTION_CALL, numero); startActivity(appeler);

Lancer une activit et obtenir un retour


Lancement (dans lactivit A)
static final int MON_CODE = 1; // code servant identifier lactivit qui rpond Intent demarre = new Intent(this, NomDeLaClasseDeLActiviteB.class); // ajouter les paramtres passs B dans lIntent demarre startActivityForResult(intention, MON_CODE); // lancement de lactivit B

Renvoi du code et des valeurs de retour (dans lactivit B)


Intent intent_retour = new Intent(); // Prparer un Intent pour les valeurs de retour // Ajouter les valeurs de retour lIntent intent_retour setResult(code, intent_retour); // renvoyer un code de retour (entier) et lIntent de retour finish(); // terminer lactivit B

Traitement du code de retour (dans lactivit A)


protected void onActivityResult(int ident, int code_retour, Intent retour) { // surcharge switch(ident) { case MON_CODE : // cest lactivit B qui a rpondu // rcupration des valeurs de retour contenues dans lIntent retour // traitement selon le code de retour contenu dans lentier code_retour return; } }

Passer des paramtres lactivit appele


La classe Intent permet de passer des paramtres lactivit appele et den rcuprer les valeurs en retour Ajouter des paramtres (types simples ou tableaux)
Objet_intent.putExtra(String, val) Le 1er paramtre est un nom (cl) Le second paramtre est la valeur :
De type simple (boolean, int, short, long, float, double, char) Tableau de types simples String et tableau de String

Lactivit appele pourra rcuprer ces paramtres par leur nom :

Rcuprer les paramtres dans lactivit appele


Lactivit lance rcupre lobjet de classe Bundle contenant les paramtres par :
Bundle params = getIntent().getExtras()

Les paramtres sont rcuprs dans ce Bundle par ses mthodes :


getBoolean(String) getInt(String) getBooleanArray(String)

auxquelles on passe la cl en paramtre

Placer des valeurs de retour dans lactivit appele


Le mthode setResult(int, Intent) permet de renvoyer un code de retour et un Intent de retour Lactivit appele place les valeurs de retour dans cet Intent par putExtra(String, val) comme dj vu pour les paramtres Lactivit appelante rcupre cet Intent comme dernier paramtre de la mthode :
onActivityResult(int req, int code_retour, Intent retour)

Elle en extrait les paramtres par les mthodes de la classe Intent :


getBooleanExtra(String) getIntExtra(String) getBooleanArrayExtra(String)

Permissions dune activit

Permissions
Une activit ne peut accder certaines ressources matrielles quavec une permission Les permissions apparaissent dans le AndroidManifest Elles sont visibles par lutilisateur (scurit) Elles concernent :
La golocalisation (GPS) Les accs aux contacts et l'agenda du tlphone Les modifications de paramtres (orientation, fond dcran ) Les appels tlphoniques Lenvoi et rception de SMS/MMS Laudio Le rseau (dont laccs Internet) Le matriel (bluetooth, appareil photo, )

Surveiller vos applications


Il est prudent de regarder quelles permissions demande une application On peut le faire par Paramtres Applications Grer les applications puis clic sur lapplication Certaines permissions peuvent tre dangereuses pour :
Votre forfait (envoi de SMS/MMS, appels) Votre vie prive (consultation/modification des donnes personnelles, position) Votre appareil (modifications de paramtres)

Permissions dans AndroidManifest


<?xml version="1.0" encoding="utf-8"?> <manifest> <uses-sdk /> <uses-permission android:name="android.permission.CALL_PHONE" /> . <uses-permission android:name="android.permission.INTERNET " /> <application> <activity> <intent-filter> ATTENTION <action /> Loubli de permissions provoquera <category /> une erreur dexcution <data /> </intent-filter> </activity>

Le matriel et les capteurs

Tlphonie (appel)
Permettre lutilisateur dappeler un ncompos
Uri numero = Uri.parse("tel:0559574320"); Intent composer = new Intent(Intent.ACTION_DIAL, numero); startActivity(composer);

Il faut avoir positionn la permission :


<uses-permission android:name="android.permission.CALL_PHONE" /

Appeler directement un n
Uri numero = Uri.parse("tel:0559574320"); Intent appeler = new Intent(Intent.ACTION_CALL, numero); startActivity(appeler);

Il faut avoir positionn la permission :


<uses-permission android:name="android.permission.CALL_PRIVILEGED" />

Tlphonie (envoi de SMS)


Classe SmsManager dont une instance est obtenue par : SmsManager.getDefault() Envoi dun message par : sendTextMessage en prcissant le net le texte Il faut avoir positionn la permission :
<uses-permission android:name="android.permission.SEND_SMS" />

Tlphonie (Rception de SMS)


1. Dclaration dun couteur dintentions diffuses
<receiver android:name=".receiver.monRecepteur" android:enabled="true"> <intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter> </receiver>

2. Ecriture de lcouteur dintention diffuses par hritage de BroadcastReceiver et surcharge de la mthode onReceive 3. LIntent reu en paramtre de onReceive contient les messages reus sous forme brute dsigns par la cl "pdus" 4. Ces message bruts peuvent tre convertis en objets de classe SmsMessage par la mthode createFromPdu de cette classe. 5. Un SmsMessage permet de rcuprer lexpditeur, le corps du message ainsi que lexpditeur et le corps dun mail Il faut avoir positionn la permission :
<uses-permission android:name="android.permission.RECEIVE_SMS" />

Golocalisation par GPS


1. 2. Acces au GPS par :
getSystemService(Context.LOCATION_SERVICE)

Associer un couteur dvnements par :


requestLocationUpdate en prcisant : Le mode (GPS ou rseau) Le rythme La distance minimale

3.

Rcuprer les informations dans lcouteur


Latitude, longitude, altitude Prcision

4.

Possibilit de calculer une distance

Il faut avoir positionn les permissions : <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

Appareil photo
La classe Camera permet la prise de photo par takePicture en associant un couteur dvnement pour rcuprer la photo en raw ou JPEG. La mthode onPictureTaken de cet couteur est appel quand la photo est faite, limage est reue en tableau doctets. Ncessite une prvisualisation par un objet de classe SurfaceView dans linterface auquel on associe un couteur dvnements pour :
Dmarrer/arrter lappareil photo (mthodes open et release de la classe Camera) Lancer/arrter la prvisualisation (mthodes startPreview et stopPreview de la classe Camera)

On peut enregistrer le tableau doctets reu par onPictureTaken dans un fichier ou utiliser BitmapFactory pour le convertir en image Il faut avoir positionn la permission :
<uses-permission android:name="android.permission.CAMERA" />

Vibreur (classe Vibrator)


Peut tre utilis pour alerter lutilisateur (par exemple dans un service ou un couteur dintentions diffuses qui na pas dinterface) Accs au vibreur par :
getSystemService(Context.Vibrator_SERVICE)

Faire vibrer par :


La mthode vibrate(int) de la classe Vibrator En donnant la dure en ms

Il faut avoir positionn la permission :


<uses-permission android:name="android.permission.VIBRATE" />

Capteurs
Les types de capteurs disponibles sont les suivants (selon le modle certains capteurs peuvent ne pas tre disponibles) :
Acclromtre (acclration du priph sur 3 axes) Gravit (composante de la gravit selon les 3 axes) Gyroscope (vitesse angulaire de rotation du priph sur 3 axes) Lumire (luminosit ambiante) Champ magntique (champ magntique ambiant sur 3 axes) Orientation (angles du priph par rapport aux 3 axes) Pression (pression exerce sur lcran tactile) Proximit (dtection de proximit souvent binaire) Temprature (temprature ambiante)

Utilisation des capteurs


Classe SensorManager dont une instance est obtenue par :
SensorManager gestionnaireCapteurs = (SensorManager)getSystemService(Context.SENSOR_SERVICE);

Rcupration dun capteur par :


Sensor monCapteur = gestionnaireCapteurs.getDefaultSensor(type_de_capteur); Avec type_de_capteur : Sensor.TYPE_ACCELEROMETER Sensor.TYPE_GRAVITY Sensor.TYPE_GYROSCOPE Sensor.TYPE_LIGHT Sensor.TYPE_MAGNETIC_FIELD Sensor.TYPE_ORIENTATION Sensor.TYPE_PRESSURE Sensor.TYPE_PROXIMITY Sensor.TYPE_TEMPERATURE

Mesures par capteurs


Association dun couteur dvnements par :
gestionnaireCapteurs.registerListener(SensorEventListener, Sensor, int) Interface SensorEventListener surcharge des mthodes :
void onSensorChanged(SensorEvent) excute chaque fois que le capteur effectue une nouvelle mesure. void onAccuracyChanged(Sensor, int) excute si la prcision du capteur change.

Capteur auquel est associ lcouteur Rythme des mesures :


SENSOR_DELAY_NORMAL SENSOR_DELAY_UI (adapt pour interfaces) SENSOR_DELAY_GAME (adapt pour jeux) SENSOR_DELAY_FASTEST.

Rcupration des mesures


Par le paramtre de classe SensorEvent de onSensorChanged SensorEvent a une proprit values dont on fait une copie par values.clone() le rsultat est un tableau de 3 lments (float) Selon le cas une seule ou les 3 valeurs sont significatives Remarque : la copie permet dviter que les valeurs ne soient modifies par une nouvelle mesure SensorEvent a galement : une proprit timeStamp qui indique linstant de la mesure une proprit accuracy qui indique la prcision de la mesure :
SENSOR_STATUS_ACCURACY_HIGH SENSOR_STATUS_ACCURACY_LOW SENSOR_STATUS_ACCURACY_MEDIUM

Multimdia

Audio
Crer un MediaPlayer :
MediaPlayer lecteur = MediaPlayer.create(Context, int) Le premier paramtre est l'activit elle-mme Le second paramtre est l'identificateur du fichier son obtenu par : R.raw.nom_du_fichier_son

Utiliser le MediaPlayer :
lecteur.start() pour jouer le son lecteur.pause() pour suspendre le son, il sera repris par start() lecteur.stop() pour arrter le son, il sera repris par : lecteur.reset(); lecteur.prepare(); lecteur.start();

MediaPlayer (utilisation)
Configuration
prepare() initialisation du player release() libre les ressources du player ( faire dans la mthode onDestroy de l'aactivit) reset() rinitialisation du player setDataSource(String) dfinit le mdia par un chemin de fichier ou une URL setDataSource(Context , Uri) dfinit le mdia par une Uri setLooping(boolean) met le player en mode boucle setVolume(float, float) dfinit le volume (le 1er paramtre est la voie gauche, le second la voie droite)

Controle
pause() met en pause seekTo(int) dplacement dans le mdia en ms (en + ou en -) start() lancement stop() arrt

Etat
getCurrentPosition() renvoie la position actuelle dans le mdia (en ms) getDuration() renvoie la dure du mdia (en ms) isPlaying() renvoie true si le media est en cours isLoopPlaying() renvoie true si le media est en mode boucle

MediaPlayer (vnements)
Evnements
setOnCompletionListener(MediaPlayer.OnCompletionListener) associe un couteur d'vnements
onCompletion(MediaPlayer) appele lorsque le mdia se termine

setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener) associe un couteur d'vnements


onBufferingUpdate(MediaPlayer, int) appele lors de la mise jour du buffer. Le second paramtre est le pourcentage de remplissage du buffer.

setOnPreparedListener(MediaPlayer.OnPreparedListener) associe un couteur d'vnements


onPrepared(MediaPlayer) appele lorsque le MediaPlayer est prt.

setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener) associe un couteur d'vnements


onSeekComplete(MediaPlayer) appele lorsque dplacement dans le mdia est termin.

Vido
Mettre un VideoView dans linterface
<VideoView android:id="@+id/ecran_video" android:layout_width="fill-parent" android:layout_height="fill-parent" />

Dfinir le chemin de la vido (place dans res/raw)


Uri chemin = Uri.parse("android.resource://paquetage_de_l_application/" +R.raw.nom_du_fichier_video);

Associer un lecteur vido la vue:


VideoView lecteur = (VideoView) findViewById (R.id.ecran_video); lecteur.setVideoURI(chemin); lecteur.setMediaController(new MediaController(activit)); // facultatif lecteur.requestFocus();

Si on a mis setMediaController, lors dun clic long sur la vue une fentre de contrle apparat avec :
Un bouton Play/pause Un bouton Avance rapide Un bouton Recul rapide Un curseur indiquant la position courante et permettant de se dplacer

Sinon, et de toutes faons, on peut tout contrler par programme :

VideoView
Configuration
setMediaController(MediaController) associe un contrtleur de mdia setVideoPath(String) dfinit le mdia par un chemin de fichier setVideoURI(Uri) dfinit le mdia par une Uri

Controle
start() lancement pause() mise en pause, reprise par start() seekTo(int) dplacemant dans le mdia, le paramtre est un temps en ms partir du dbut stopPlayback() arrt dfinitif ne sera pas relanc par start()

Etat
canPause() renvoie true si le media peut tre mis en pause canSeekBackward() renvoie true si le media peut tre recul canSeekForward() renvoie true si le media peut tre avanc getBufferPercentage() renvoie le pourcentage d'occupation du buffer de mdia getCurrentPosition() renvoie la position actuelle dans le mdia (en ms) getDuration() renvoie la dure du mdia (en ms) isPlaying() renvoie true si le media est en cours

Evnements
setOnCompletionListener(MediaPlayer.OnCompletionListener) associe un couteur d'vnements mthode onCompletion(MediaPlayer) appele lorsque le mdia se termine.

Synthse de parole
Crer un synthtiseur :
parle = new TextToSpeech(activit, new SynthPret());

Initialiser le synthtiseur quand il est prt par l'couteur d'vnements


private class SynthPret implements TextToSpeech.OnInitListener { public void onInit(int etat) { if (etat == TextToSpeech.SUCCESS) { parle.setLanguage(Locale.FRANCE); // langue } } }

Synthtiser un texte :
parle.speak(texte a dire, TextToSpeech.QUEUE_FLUSH, null);

Ajouter du texte synthtiser pendant la synthse :


parle.speak(texte a ajouter, TextToSpeech.QUEUE_ADD, null);

Arrter la synthse de son :


parle.stop(); // arrt de la synthse

TextToSpeech
Rglages :
setSpeechRate(float) permet de rgler la vitesse de synthse (1 normal, <1 plus lent, >1 plus rapide) setPitch(float) permet de rgler la tonalit (1 normal, <1 plus grave, >1 plus aigu)

Arrt du synthtiseur de son :


parle.shutdown(); // arrt du synthtiseur

Fermeture du synthtiseur dans la mthode onDestroy de l'activit :


public void onDestroy() { if (parle != null) { parle.stop(); parle.shutdown(); } super.onDestroy(); }

Internet

Ressources sur Internet


Images
Crer une connexion sur la ressource et se connecter :
HttpURLConnection connexion = (HttpURLConnection) new URL("url de l'image").openConnection(); connexion.connect();

Crer un flux de lecture sur la ressource :


BufferedInputStream lecture = new BufferedInputStream (connexion.getInputStream());

Lire la ressource et la transformer en Drawable de type image :


BitmapDrawable img; BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = x; // pour rduire la taille en 1/x img = BitmapFactory.decodeStream(lecture, null, opts);

Ressources sur Internet


Son :
On utilise toujours un MediaPlayer mais cr diffremment :
MediaPlayer mp = new MediaPlayer(); try { mp.setDataSource("http://domaine.sous_domaine/chemin/nom_son.mp3"); mp.prepare(); } catch (IllegalArgumentException e) { // Le paramtre de setDataSource est incorrect } catch (IllegalStateException e) { // Le MediaPlayer n'est pas dans l'tat initial } catch (IOException e) { // L'acces l'URL provoque une erreur }

Vido :
La seule chose qui change cest lUri qui dsigne le mdia
Uri chemin = Uri.parse("http://domaine. sous_domaine /rep1/nom_video.3gp");

Services WEB

Golocalisation par service WEB


La classe Geocoder permet de retrouver des adresses (type adresse postale) partir :
De coordonnes GPS Dun nom (par exemple : "parc Montaury, Anglet

La recherche peut tre limite un pays ou une zone gographique Utilise la classe Address qui contient :
Coordonnes GPS Nom de pays Nom de ville Code postal Adresse complte (n , rue, )

Il faut avoir positionn la permission :


<uses-permission android:name="android.permission.INTERNET" />

Localisation
Cration Geocoder(activit, Locale) le second paramtre indique la zone gographique concerne, il peut prendre les valeurs (Locale.FRANCE, Locale.CANADA, Locale.UK, Locale.US ). Omis si l'on ne souhaite pas limiter la localisation. Recherches getFromLocation(double, double, int) renvoie les adresses connues proches du point dfini par ses coordonnes gographiques (latitude et longitude exprimes en degrs). Le dernier paramtre permet de limiter la taille de la liste. getFromLocationName(String, int) renvoie les adresses connues proches dun point dfini par un nom (chane du type "parc Montaury, 64600, Anglet"). Le second paramtre permet de limiter la taille de cette liste. getFromLocationName(String, int, double, double, double, double) fonctionne comme la prcdente mais permet de limiter la zone de recherche un rectangle. longitude et latitude du coin infrieur gauche de ce rectangle et longitude et latitude du coin suprieur droit. Toutes ces mthodes renvoient une liste (classe List de java) contenant des objets de classe Address

Exemple dutilisation du service de localisation


Le code suivant :
Geocoder localisateur = new Geocoder(this, Locale.FRANCE); List<Address> liste = localisateur.getFromLocationName("Parc Montaury, Anglet", 10);

Renvoie une liste ne contenant qu'un seul objet de classe Address dont le contenu est le suivant :
latitude : 43,4800424 longitude : -1,5093202 nom de lieu : Alle du Parc Montaury nom de ville : Anglet code postal : 64600 nom de pays : France Deux lignes d'adresse qui sont :
Alle du Parc Montaury 64600 Anglet

La classe Address
Construction
Address(Locale) le paramtre indique la zone gographique concerne, il peut prendre les valeurs (Locale.FRANCE, Locale.CANADA, Locale.UK, Locale.US ). Ce dernier paramtre peut tre omis si l'on ne souhaite pas limiter la localisation.

Contenu
getLatitude() renvoie la latitude en degrs (rel) getLongitude() renvoie la longitude en degrs (rel) getFeatureName() renvoie le nom du lieu getLocality() renvoie le nom de la ville getPostalCode() renvoie le code postal getCountryName() renvoie le nom du pays getAddressLine(int) renvoie la ligne d'adresse dsigne par son index pass en paramtre (en commenant 0). Renvoie null s'il n'y a rien correspondant l'index. On peut connatre le nombre de lignes d'adresse disponibles par la mthode : getMaxAddressLineIndex()

Google Maps (prrequis)


Le SDK utilis doit tre "Google API " Le fichier AndroidManifest doit intgrer la bibliothque Google Maps :
<uses-library android:name="com.google.android.maps" />

L'activit doit hriter de MapActivity Une seule carte est possible par activit L'activit doit surcharger la mthode :
protected boolean isRouteDisplayed() { return false; } Utilise pour les statistiques de Google

Il faut obtenir une cl dutilisation auprs de Google :


Avoir un compte Google Obtenir la signature de lapplication par la commande keytool de java Rcuprer la cl avec cette signature sur : http://code.google.com/intl/fr/android/maps-api-signup.html

Google Maps (affichage)


La carte est affich dans un widget MapView :
<com.google.android.maps.MapView android:id="@+id/carte" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="mettre ici la cl obtenue" />

MapView permet de dfinir lapparence de la carte :


displayZoomControls(boolean) affiche le contrle de zoom. Le paramtre permet de donner le focus ce contrle (true) setBuiltInZoomControls(boolean) autorise (true) ou invalide (false) le contrle de zoom setSatellite(boolean) affichage en mode satellite ou plan setStreetView(boolean)affichage avec ou sans visualisation des rues setTraffic(boolean)affichage avec ou sans visualisation du traffic

Google Maps (dplacements)


Les dplacements dans la cartes sont grs par un MapController

Obtention :
par la mthode getController() de l'objet MapView

Utilisation :
animateTo(GeoPoint) positionne la carte sur le point pass en paramtre en faisant une animation. La classe GeoPoint possde un constructeur acceptant en paramtres ses coordonnes gographiques en millionimes de degrs setCenter(GeoPoint) positionne la carte sur le point pass en paramtre sans faire d'animation. scrollBy(int , int) dplace la carte. Le premier paramtre exprime le dplacement horizontal (en pixels), le second le dplacement vertical. setZoom(int) dfinit le niveau de zoom zoomIn() zoome d'un niveau zoomOut() d-zoome d'un niveau

Google Maps (projection)


la classe Projection permet de rcuprer les coordonnes gographiques dun point de la carte affiche : Obtention :
par la mthode getProjection() de l'objet MapView

Utilisation :
fromPixels(int, int) renvoie un GeoPoint avec les coordonnes du point dsign par sa position en pixels dur la carte affich (x et y)

ATTENTION : GeoPoint utilise des coordonnes gographiques entires en millionimes de degr alors que le GPS travaille en coordonnes relles en degrs

Formatage du texte

SpannableStringBuilder
Les widgets contenant du texte hritent de TextView Les mthodes dajout de texte (setText et append) prennent en paramtre un CharSequence String hrite de CharSequence mais le format est alors celui associ au widget (dans le XML par exemple) Pour formater le texte on utilise SpannableStringBuilder qui hrite de CharSequence mais permet de dfinir zone par zone :
La police La taille Ltirement horizontal La couleur du fond et du texte Le style (gras, italique ) Le soulignement

Texte format
Cration dun texte formatable :
SpannableStringBuilder texte = new SpannableStringBuilder("chaine formater");

Association dun format une zone du texte :


texte.setSpan(CharacterStyle, int, int, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Les 2me et 3me paramtres de setSpan indiquent le point de dpart et de fin de la zone la chane de caractres laquelle le format est appliqu Format possibles (classes pour le premier paramtre) :
ForegroundColorSpan (int couleur) BackgroundColorSpan (int couleur) AbsoluteSizeSpan (int taille, boolean pixel_a_densit_dpendante) RelativeSizeSpan (double echelle) ScaleXSpan (float echelle) UnderlineSpan () TypeSpaceSpan (" {normal, sans, serif, monospace } " ) StyleSpan (android.graphics.Typeface.{BOLD, BOLD_ITALIC, ITALIC, NORMAL })

Et le reste ?
Beaucoup de choses ont t vues mais beaucoup ne lont pas t :
Ecriture de services Ecriture de fournisseurs de contenu Ecriture dcouteurs dintensions diffuses Interfaces onglets ou liste (une activit est associe chaque onglet ou lment de la liste) Cration de composants dinterface personnaliss Ecriture de pilotes permettant de modifier linterface depuis lextrieur de lactivit Animations des vues Persistance des donnes (SQLite) Communication par rseau (sockets , HTTP, SOAP, REST ) Srialisation (Parcelable , JSON) Graphisme en 2D et 3D (openGL) Utilisation du Bluetooth Internationalisation des applications

Das könnte Ihnen auch gefallen