Vous êtes sur la page 1sur 66

Dveloppement d'applications

pour Android

M. Dalmau, IUT de Bayonne-Pays Basque

NOTE
Ce manuel n'a pas la prtention d'tre exhaustif, il ne prsente que quelques classes de
l'API Android (les plus utilises).
De mme pour les classes dcrites seules les mthodes les plus utilises le sont.
SOURCE DU CODE ANDROID
Il est accessible sur : http://source.android.com/source/index.html
DOCUMENTATION
Pour une documentation complte d'Android on se reportera au site :
http://developer.android.com
L'onglet "Reference" contient la documentation en ligne des classes de l'API. La case
cocher et la liste droulante en haut droite permettent de limiter cette documentation
une version prcise de l'API.
L'onglet "Dev Guide" propose des aides pour le dveloppement.
L'onglet "Resources" propose des aides et des exemples d'utilisation des classes de
l'API.
D'autres tutoriels sont disponibles sur :
http://www.ace-art.fr/wordpress/tag/android/
et sur bien d'autres sites (attention : certains se contentent de donner des "trucs et
astuces" sans explications et parfois mme pas trs bien matriss par leurs auteurs !).
Un forum trs actif est celui de : http://stackoverflow.com
Un manuel intitul "Dvelopper des applications mobiles pour les Google Phones"
crit par F. Garin et publi chez Dunod (EAN13 : 9782100531813) peut tre tlcharg
en pdf sur : http://kslimi.files.wordpress.com/2011/01/dunod-android.pdf
Le livre "Programmation Android De la conception au dploiement avec le SDK
Google Android 2" de D. Guignard, J Chable, E. Robles aux ditions Eyrolles (ISBN :
978-2-212-12587-0) a galement t utilis pour rdiger ce document.

Sommaire
Notion d'activit ......................................................................................................................... 1
Cycle de vie d'une application Android (activit). ................................................................. 1
Mthodes de la classe Activity............................................................................................... 2
Mthodes correspondant au cycle de vie............................................................................ 2
Mthodes relatives l'interface .......................................................................................... 2
Mthodes relatives aux menus et menus contextuels......................................................... 2
Mthodes relatives l'environnement et aux ressources.................................................... 3
Mthodes de lancement d'activits et de services .............................................................. 3
Manifeste .................................................................................................................................... 3
Activits ................................................................................................................................. 4
Permissions............................................................................................................................. 5
Ressources .................................................................................................................................. 6
Rpertoires des ressources ..................................................................................................... 6
Classe de rfrencement des ressources (classe R) ................................................................ 6
Ressources de type valeurs..................................................................................................... 6
Utilisation de ressources......................................................................................................... 7
Rfrencement dune ressource dans un fichier XML....................................................... 7
Rcupration dune ressource dans le code (la classe Resources) ..................................... 7
Uri............................................................................................................................................... 7
Ressource sur Internet ............................................................................................................ 7
Ressource locale ..................................................................................................................... 8
Fichiers et rpertoires sur Android............................................................................................. 8
Rpertoires d'Android ............................................................................................................ 8
La classe File .......................................................................................................................... 8
Mthodes de la classe File.................................................................................................. 8
Lecture/criture dans un fichier.......................................................................................... 9
Interfaces .................................................................................................................................. 10
Mise en place d'une interface ............................................................................................... 10
Hirarchie (partielle) des classes pour les interfaces............................................................ 11
Proprits et classes de base des interfaces .......................................................................... 12
Les units.......................................................................................................................... 12
Les couleurs...................................................................................................................... 12
La classe View ................................................................................................................. 12
La classe ViewGroup ....................................................................................................... 14
Evnements traits par les classes de base des interfaces .................................................... 15
L'interface OnClickListener ............................................................................................. 15
L'interface OnLongClickListener..................................................................................... 15
L'interface OnKeyListener ............................................................................................... 15
La classe KeyEvent .......................................................................................................... 16
L'interface OnTouchListener............................................................................................ 16
La classe MotionEvent ..................................................................................................... 16
Les conteneurs...................................................................................................................... 16
La classe FrameLayout..................................................................................................... 16
La classe LinearLayout .................................................................................................... 17
La classe AbsoluteLayout ................................................................................................ 17
Les classe ScrollView et HorizontalScrollView .............................................................. 18
La classe TableLayout...................................................................................................... 18
La classe RelativeLayout ................................................................................................. 19

Les groupes .......................................................................................................................... 20


RadioGroup ...................................................................................................................... 20
ListView ........................................................................................................................... 21
GridView .......................................................................................................................... 23
Gallery.............................................................................................................................. 25
Les composants d'interface................................................................................................... 28
ImageView ....................................................................................................................... 29
TextView.......................................................................................................................... 30
EditText............................................................................................................................ 33
AutoCompleteTextView .................................................................................................. 34
Button ............................................................................................................................... 34
ImageButton ..................................................................................................................... 35
ToggleButton.................................................................................................................... 35
CheckBox ......................................................................................................................... 36
RadioButton ..................................................................................................................... 36
Spinner ............................................................................................................................. 36
DatePicker ........................................................................................................................ 37
TimePicker ....................................................................................................................... 38
ProgressBar ...................................................................................................................... 39
SeekBar ............................................................................................................................ 40
RatingBar ......................................................................................................................... 40
AnalogClock..................................................................................................................... 41
DigitalClock ..................................................................................................................... 41
Chronometer..................................................................................................................... 42
Notifications ......................................................................................................................... 42
La classe Toast ................................................................................................................. 42
Textes Formats ....................................................................................................................... 43
Cration d'un texte format : ................................................................................................ 43
Application de formats : ....................................................................................................... 43
Couleurs et Images ................................................................................................................... 44
La classe Color d'Android .................................................................................................... 44
Mthodes de la classe Color............................................................................................. 44
Couleurs prdfinies......................................................................................................... 44
La classe Drawable............................................................................................................... 44
Les menus................................................................................................................................. 44
Description en XML d'un menu ........................................................................................... 44
Menu gnral........................................................................................................................ 45
Cration du menu ............................................................................................................. 45
Ractions aux choix ......................................................................................................... 45
Menus contextuels................................................................................................................ 45
Association ....................................................................................................................... 45
Cration du menu contextuel............................................................................................ 46
Ractions aux choix ......................................................................................................... 46
Communication entre activits................................................................................................. 46
Filtres d'intensions................................................................................................................ 46
Forme gnrale ................................................................................................................. 46
Lancer une activit ............................................................................................................... 47
Sans attente de rponse .................................................................................................... 47
Avec attente de rponse.................................................................................................... 47
Passage de paramtres et de valeurs de retour ..................................................................... 48

Le matriel et les capteurs ........................................................................................................ 48


Envoi d'un SMS.................................................................................................................... 48
Utilisation du GPS................................................................................................................ 48
Appareil photo...................................................................................................................... 49
Accs l'appareil photo.................................................................................................... 49
Prvisualisation ................................................................................................................ 49
Prise de photo ................................................................................................................... 50
Affichage de photo ........................................................................................................... 50
Vibreur ................................................................................................................................. 51
Capteurs................................................................................................................................ 51
Le multimdia .......................................................................................................................... 52
Jouer un son.......................................................................................................................... 52
La classe MediaPlayer...................................................................................................... 53
Afficher une video................................................................................................................ 53
La classe VideoView........................................................................................................ 54
Synthse de parole................................................................................................................ 54
Internet ..................................................................................................................................... 55
Rcuprer un fichier texte depuis une URL ......................................................................... 55
Rcuprer une image depuis une URL................................................................................. 56
Jouer un son depuis une URL .............................................................................................. 56
Jouer une vido depuis une URL ......................................................................................... 56
Utiliser des services WEB........................................................................................................ 56
Trouver les coordonnes gographiques de lieux ................................................................ 56
La classe Geocoder........................................................................................................... 57
La classe Address ............................................................................................................. 57
Exemple :.......................................................................................................................... 57
GoogleMaps ......................................................................................................................... 58
Prparation du projet ........................................................................................................ 58
Cl d'utilisation................................................................................................................. 58
Afficher des cartes dans une application.......................................................................... 58

Notion d'activit
Cycle de vie d'une application Android (activit).
A chaque tape du cycle de vie correspond l'appel d'une mthode que l'on peut surcharger pour dfinir le
comportement correspondant cette tape.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

Mthodes de la classe Activity


import android.app.Activity

Mthodes correspondant au cycle de vie


Les mthodes onXxx sont appeles au cours du cycle de vie. Si elles sont surcharges elles doivent faire appel
leur homologue de la classe suprieure (super.onXxx). Voir schma du cycle de vie d'une activit ci-dessus.
onCreate(Bundle) appele la cration. Le paramtre permet de rcuprer un tat sauvegard
lors de l'arrt de l'activit (si on a fait une sauvegarde)
onPause()appele quand l'activit n'est plus en premier plan
onDestroy()appele quand l'activit se termine
onStart()appele quand l'activit dmarre
onRestart()appele quand l'activit redmarre
onStop()appele quand l'activit n'est plus visible
onResume()appele quand l'activit vient en premier plan
finish() permet de terminer une activit

Mthodes relatives l'interface

setContentView(int) permet de crer l'interface depuis un fichier XML, le paramtre dsigne


ce fichier par son identifiant
findViewById(int) rcupration d'un lment d'interface (renvoie un objet de classe View) , le
paramtre dsigne cet lment par son identifiant (normalement dfini dans la classe R)
showDialog(int) ouverture d'une fentre de dialogue. Le paramtre dsigne la fentre de dialogue
par son identifiant
showDialog(int, Bundle) ouverture d'une fentre de dialogue. Le 1er paramtre dsigne la
fentre de dialogue par son identifiant, le second permet de lui passer des paramtres
dismissDialog(int) fermeture d'une fentre de dialogue dsigne par son identifiant
onCreateDialog(int, Bundle) appele lors de l'ouverture d'une fentre de dialogue. Le 1er
paramtre est l'identifiant de la fentre de dialogue, le second est celui qui avait t pass lors de l'appel
de showDialog
onPrepareDialog(int, Bundle) appele lors de l'activation d'une fentre de dialogue dj
ouverte. Le 1er paramtre est l'identifiant de la fentre de dialogue, le second est celui qui avait t pass
lors de l'appel de showDialog
getCurrentFocus() renvoie l'lment de l'interface (objet de classe View) ayant actuellement le
focus

Mthodes relatives aux menus et menus contextuels

onCreateOptionsMenu(Menu) appele lorsqu'un menu de l'activit est affich. Le paramtre est


le menu affich.
onOptionsItemSelected(MenuItem) appele lors d'un choix dans un menu de l'activit. Le
paramtre est le choix effectu.
onOptionsMenuClosed(Menu) appele lors de la fermeture d'un menu de l'activit. Le paramtre
est le menu ferm.
registerForContextMenu(View) associe un menu contextuel l'lment pass en paramtre
unregisterForContextMenu(View) supprime l'association du menu contextuel l'lment
pass en paramtre
onCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo)
appele lorsqu'un menu contextuel est affich. Le 1er paramtre est ce menu contextuel, le 2me est
l'lment d'interface auquel il est associ, le dernier donne des informations sur le contenu de l'lment
d'interface qui a caus l'apparition du menu contextuel
onContextItemSelected(MenuItem) appele lors d'un choix dans un menu contextuel. Le
paramtre est le choix effectu.
onContextMenuClosed(ContextMenu) appele lors de la fermeture d'un menu contextuel. Le
paramtre est le menu ferm.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

Mthodes relatives l'environnement et aux ressources

getResources() renvoie un objet de classe Resources permettant l'accs aux ressources de


l'applicaction (voir plus loin la classe Resources)
onUserInteraction()appele chaque interaction de l'utilisateur (clavier, trackball, touch)
onBackPressed()appele lorsque l'utilisateur appuie la touche de retour arrire du tlphone
onLowMemory()appele lorsque le niveau de batterie devient faible
getFilesDir() renvoie un objet de classe File reprsentant le chemin o sont placs les fichiers
propres l'application
openFileInput(String) renvoie un objet de classe FileInputStream correspondant un flux de
lecture connect au fichier dont le nom est pass en paramtre.
openFileOutput(String, int) renvoie un objet de classe FileOutputStream correspondant
un flux d'criture connect au fichier dont le nom est pass en premier paramtre. Le second paramtre
est le mode d'ouverture qui peut tre : MODE_PRIVATE (mode normal), MODE_APPEND (ajout un
fichier existant), MODE_WORLD_READABLE et MODE_WORLD_WRITEABLE (pour les droits d'accs).
On peut cumuler plusieurs attributs par |

Mthodes de lancement d'activits et de services

startActivity(Intent) Lance une autre activit, le paramtre dsigne l'activit ou les


proprits permettant Android de l'identifier.
startActivityForResult(Intent, int) Lance une autre activit dont on attend un retour,
le 1er paramtre dsigne l'activit ou les proprits permettant Android de l'identifier, le second
paramtre est un numro associ cette activit qui permettra d'en identifier la rponse.
startNextMatchingActivity(Intent) Utilis pour demander Android de lancer une autre
activit lorsque celle propose prcdemment n'a pas donn satisfaction. Le paramtre correspond
celui qui a donn un rsultat infructueux.
finishActivity(int) Termine une activit dont on attendait un retour, le paramtre est le
numro associ cette activit lors de son lancement
startService(Intent) Lance un service, le paramtre dsigne le service ou les proprits
permettant Android de l'identifier
stopService(Intent) Arrte un service, le paramtre dsigne le service ou les proprits
permettant Android de l'identifier
getIntent() renvoie l'objet de classe Intent associ l'activit lors de son lancement
setResult(int) Utilis par l'activite appele pour renvoyer un code de rsultat l'activit
appelante
setResult(int, Intent) comme la prcdente, le paramtre supplmentaire est un Intent
contenant les valeurs de retour qui sera galement renvoy.
onActivityResult(int, int, Intent) cette mthode de l'activit appelante est excute
lorsqu'une activit lance se termine, le 1er paramtre est le numro associ cette activit lors de son
lancement, le deuxime est le code de retour de cette activit, le dernier est l'Intent de retour de cette
activit

Manifeste
Une application est dcrite par un fichier XML appel AndroidManifest. Ce fichier permet d'indiquer :
Le SDK utilis par une balise uses-sdk
Les permissions : une balise uses-permission par autorisation demande
Les activits de l'application : une balise activity pour chaque activit contenant chacune une ou
plusieurs balises intent-filter
Les services de l'application : une balise service pour chaque service contenant chacune une ou
plusieurs balises intent-filter
les couteurs d'intentions diffuses : une balise receiver pour chaque couteur contenant chacune
une ou plusieurs balises intent-filter
Les fournisseurs de contenu : une balise provider pour chaque activit
Les bibliothques utilises : une balise uses-library pour chaque bibliothque

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

La structure gnrale de ce fichier est la suivante :


<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-sdk />
<uses-permission />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
</activity>
<service>
<intent-filter> . . . </intent-filter>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
</receiver>
<provider>
<grant-uri-permission />
</provider>
<uses-library />
</application>
</manifest>

Activits
Chaque activit constituant une application doit tre dcrite par une balise <activity>. La balise minimale de
l'activit principale est de la forme :
<activity android:name=".ClasseDeLActivite"
android:label="nom_de_l_activite"
android:icon="@drawable/nom_du_fichier_icone"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
La balise <activity> peut contenir de nombreux paramtres. Les paramtres gnralement utiliss sont :
name qui dsigne la classe de l'activit
label qui dsigne le nom sous lequel elle apparatra sur le terminal
icon qui dsigne l'icne afficher sur le terminal
Une activit secondaire (lance par l'activit principale) n'a pas de prorit android:icon ni
android:label. Elle peut ne pas avoir de balise <intent-filter> et si elle en a une on n'y rencontrera
pas la proprit <action android:name="android.intent.action.MAIN" /> puisque ce n'est
pas un programme principal.
La balise <intent-filter> permet d'indiquer ce que fait l'activit (on parle d'intension). Elle sera utilise
par Android pour rechercher une activit pouvant rpondre une spcification donne (cette spfication lui sera
fournie dans un objet de classe Intent). La forme gnrale de la balise <intent-filter> est la suivante:
<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 />

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

<data android:mimeType=nom_de_type_mime
android:scheme=protocole://hote:port/chemin />
/>
</intent-filter>
On y trouve les rubriques suivantes :
Action qui indique le type daction effectue par l'activit (par exemple affichage, dition )
Category qui indique la catgorie daction (par exemple CATEGORY_BROWSABLE indique une
activit qui peut tre appele par un navigateur)
Data qui indique le type de donnes transmises lactivit lance ou le type de rponse attendu ainsi
que le protocole (http, content, file )
Bien que le concepteur puisse dfinir ses propres valeurs de paramtres, il existe des valeurs prdfinies pour ces
diverses rubriques dont les principales sont :
Actions
o android.intent.action.VIEW affichage de donnes
o android.intent.action.EDIT affichage de donnes pour dition par lutilisateur
o android.intent.action.MAIN activit principale dune application
o android.intent.action.CALL appel tlphonique
o android.intent.action.WEB_SEARCH recherche sur le WEB
Catgories
o android.intent.category.LAUNCHER activit propose au lancement par Android
o android.intent.category.DEFAULT activit pouvant tre lance explicitement
o android.intent.category.BROWSABLE peut afficher une information dsigne par un lien
o android.intent.category.TAB activit associe dans un onglet dinterface (TabHost)

Permissions
Pour autoriser une application accder certaines ressources il faut lui en donner l'autorisation par une balise
<uses-permission>. Les principales permissions sont :

Golocalisation (GPS)
<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" />

Accs aux donnes personnelles


<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_HISTORY_BOOKMARKS" />
<uses-permission android:name="android.permission.WRITE_HISTORY_BOOKMARKS" />

Modification de paramtres
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
<uses-permission android:name="android.permission.SET_WALLPAPER" />

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

Envoi et rception de SMS/MMS


<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

Audio
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

Rseau
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

Access au matriel
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.BATTERY_STATS" />

Ressources
Rpertoires des ressources
Le rpertoire res contient toutes les ressources qui seront mises dans le fichier application (apk). Il est constitu
de sous rpertoires :
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 valeurs : chanes, tableaux, valeurs numriques )
anim (description en XML danimations)
menu (description en XML de menus pour lapplication)
xml (fichiers XML utiliss directement par lapplication)
raw (tous les autres types de ressources : fichiers texte, vido, son )
Remarque : Il est possible de crer d'autres rpertoires que ceux indiqus ci-dessus pour des cas particuliers.

Classe de rfrencement des ressources (classe R)


Eclipse explore les fichiers contenus dans les sous-rpertoires de res et gnre une classe (appele R) dans
laquelle un identifiant est cr pour chacun des lments trouvs :
Fichiers (images, textes ..) placs dans drawable-xxxx , raw et xml
Elments d'interface dfinis dans les fichiers placs dans layout et menu
Valeurs dfinies dans les fichiers placs dans values
Animations dfinies dans les fichiers placs dans anim
On pourra ensuite, dans la pluspart des mthodes, dsigner ces ressources par leur identifiant dans cette classe R
sous la forme : R.type.nom.
Par exemple une image "photo.png" place dans drawable-hdpi sera dsigne par R.drawable.photo

Ressources de type valeurs


On peut dfinir des ressources de type valeur (entiers, boolens, chanes de caractres, etc. et des tableaux) en les
dcrivant 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>

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

<item>33000</item>
</integer-array>
<string name= 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>

Utilisation de ressources
Les ressources peuvent tre utilises dans les fichiers XML (comme ceux de description d'interface) ou dans le
code java.

Rfrencement dune ressource dans un fichier XML


On rfrence une resource dans un fichier XML par :
"@[paquetage:]type/identificateur"
Par exemple : @string/machaine fait rfrence une chane dcrite dans un fichier XML plac dans le rpertoire
res/values (le nom de ce fichier n'a aucune importance) et dfinie par :
<string name="machaine">contenu de cette chaine</string>

Rcupration dune ressource dans le code (la classe Resources)


Dans le code les ressources sont dsignes par leur identifiant dans la classe R de la forme : R.type.nom.
Certaines mthodes acceptent cette dsignation comme paramtre pour accder la ressource. Toutefois lorsque
l'on doit accder au contenu de ressources on peut faire applet la classe Resources.
import android.content.res.Resources
On obtient une instance de la classe Resources par la mthode getResources() de lactivit. On accde
ensuite aux ressources grce aux mthodes de cet objet qui acceptent en paramtre un identifiant de la forme
R.type.nom, ces mthodes sont :
boolean getBoolean(int) renvoie le boolen dsign
int getInteger(int) renvoie l'entier dsign
int[] getIntArray(int) renvoie le tableau d'entiers dsign
String getString(int) renvoie la chane dsigne
String[] getStringArray(int) renvoie le tableau de chanes dsign
int getColor(int) renvoie le code de la couleur dsigne
float getDimension(int) renvoie la valeur de l'unit dsigne
Drawable getDrawable(int) renvoie l'image dsigne (formats possibles du fichier plac dans le
rpertoire res : gif , jpeg , png et bmp)
InputStream openRawResource(int) renvoie un flux de lecture sur la ressource dsigne.
Par exemple : String titre = getResources().getString(R.string.texte_titre);
permet de rcuprer la chane dfinie dans un fichier XML par : <string name="texte_titre">..</string>

Uri
Les Uri sont un moyen utilis pour dsigner des resources que ce soit sur Internet ou localement

Ressource sur Internet


Pour crer une Uri faisant rfrence une ressource sur Internet :
Uri ressource =
Uri.parse("http://domaine.sous_doamine/chemin/nom_du_fichier");

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

Exemple : Uri.parse("http://www.iutbayonne.univ-pau.fr/~dalmau/testTPs/ma_video.3gp");
Dsigne le fichier vido ma_video.3gp accessible sur http://www.iutbayonne.univ-pau.fr/~dalmau/testTPs/

Ressource locale
Pour crer une Uri faisant rfrence une ressource embarque :
Uri ressource =
Uri.parse("android.resource://nom_du_paquetage_de_l_activit/" +
R.chemin.mon_son);
Exemple : Uri.parse("android.resource://iut.TP/" + R.raw.mon_son");
Dsigne le fichier son mon_son plac dans le rpertoire res/raw de l'activit dont le paquetage est iut.TP

Fichiers et rpertoires sur Android


Rpertoires d'Android
import android.os.Environment
Android permet la manipulation de fichiers de faon classique en java (classe File). Certains rpertoires ont un
rle particulier dans le systme. On peut les obtenir grce l'activit ou la classe Environment comme suit :
Rpertoire propre l'application : on l'obtient par la mthode getFilesDir() de l'activit
Rpertoire de donnes : on l'obtient par Environment.getDataDirectory()
Rpertoire des tlchargements : on l'obtient par Environment.getDownloadCacheDirectory()
Rpertoire de stockage externe (en gnral une carte SD) : on l'obtient par
Environment.getExternalStorageDirectory()
Rpertoire racine d'Android : on l'obtient par Environment.getRootDirectory()

Toutes ces mthodes renvoient un objet de classe File. Lorsqu'il s'agit d'un rpertoire il peut tre utilis pour
ouvrir un fichier par : File monFichier = new File(repertoire, "nom_du_fichier");
ATTENTION : certains rpertoires peuvent tre totalement ferms ou n'autoriser que la lecture.

La classe File
import java.io.File
C'est une classe java qui n'est pas propre Android, elle permet de manipuler des fichiers et des rpertoires

Mthodes de la classe File


Ouverture

File(String, String) ouvre un fichier, le premier paramtre est le nom du chemin, le second le nom du
fichier
File(File, String) ouvre un fichier, le premier paramtre est le rpertoire, le second le nom du fichier
File(URI uri) ouvre un fichier, le paramtre dsigne ce fichier sous forme d'URI (de la forme
file:/chemin/nom). Ce constructeur peut lever une exception de classe IllegalArgumentException si
le paramtre n'est pas une URI correcte

Cration

createNewFile() cre le fichier correspondant l'objet File. Cette mthode peut lever une exception de
classe IOException si le fichier ne peut pas tre cr.

Supression

delete() supprime le fichier, cette mthode renvoie on boolen indiquant si la destruction a pu se faire ou
pas

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

deleteOnExit() le fichier sera supprim lorsque la machine virtuelle java se terminera si elle se termine
normalement

Etats

exists() renvoie true si le fichier ou le rpertoire existe


canRead() renvoie true si le fichier ou le rpertoire peut tre lu
canWrite() renvoie true si le fichier ou le rpertoire peut tre crit
isDirectory() renvoie true si c'est un rpertoire
isFile() renvoie true si c'est un fichier
isHiden() renvoie true si le fichier ou le rpertoire est cach
length() renvoie la taille du fichier (ne fonctionne pas pour un rpertoire)
setReadOnly() positionne le fichier ou le rpertoire en lecture seule

Noms

getName() renvoie la partie correspondant au nom du fichier ou du rpertoire (String)


getPath() renvoie la partie correspondant au chemin du fichier ou du rpertoire (String)
getAbsolutePath() renvoie le chemin absolu du fichier ou du rpertoire (String)
getCanonicalPath() renvoie le chemin relatif du fichier ou du rpertoire (String). Cette mthode peut
lever une exception de classe IOException.
toURI() renvoie le fichier ou le rpertoire sous forme d'URI (de la forme file:/chemin/nom)

Rpertoires

list() renvoie la liste des noms des fichiers contenus dans le rpertoire (String[])
listFiles() renvoie la liste des fichiers contenus dans le rpertoire (File[])
mkdirs() crer le rpertoire dsign par l'objet, si ncessaire les rpertoires du chemin son galement cres

Lecture/criture dans un fichier


On utilise des flux de lecture ou d'criture de classe FileInputStream et FileOutputStream qui sont construits
partir de l'objet de classe File par :
new FileInputStream(File)
new FileOutputStream(File)
Puis, partir de ces flux lis au fichier, on construit des flux adapts aux types de donnes lire ou crire.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

Interfaces
Mise en place d'une interface
Elle peut se faire de deux faons :
Par description de l'interface dans des fichiers XML
Par programme
Les fichiers XML qui dcrivent une interface sont placs dans le rpertoire res/layout.
Ils sont rfrencs par R.layout.nom_du_fichierXML.
Les activits peuvent utiliser la mthode setContentView(R.layout.nom_du_fichierXML) pour mettre en
place l'interface dcrite par un tel fichier.
Leur forme gnrale est :
<?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
>
<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_principal>

Lorsque l'un des lments est un conteneur, il faut indiquer les lments qu'il contient :
<Classe_de_conteneur
proprits du conteneur (voir ci-dessous)
>
<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>

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

10

Hirarchie (partielle) des classes pour les interfaces


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

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

11

Proprits et classes de base des interfaces


Les units
Lorsque l'on indique des units dans les fichiers XML elles peuvent l'tre de plusieurs faons :
en pixels (faire suivre la valeur de px)
relativement la taille de la fonte de caractres (faire suivre la valeur de sp)
en millimtres (faire suivre la valeur de mm)
en pouces (faire suivre la valeur de in)
en points = 1/72 pouce (faire suivre la valeur de pt)
en pixels densit indpendante valent 1 pixel pour un cran de 160 dpi (faire suivre la valeur de dp)
La valeur est exprime par un rel de la forme "14.3mm" par exemple.
Dans ce qui suit on dsignera les units par "unit"

Les couleurs
Elles sont dfinies par un code hexadcimal indiquant la transparence et les composantes (RVB) sous la forme
"#AARRVVBB" o :
AA est la transparence (FF opaque, 00 totalement transparent). Si le code de couleur ne comporte que 3
composantes AA est considr comme FF c'est--dire que #44FA8B est quivalent #FF44FA8B
RR VV et BB sont, respectivement, les composantes rouge, verte et bleue
Dans ce qui suit on dsignera les couleurs par "couleur"

La classe View
Les classes View et ViewGroup ne sont pas utilises directement mais constituent les classes mres des autres.
Elles sont dcrites ici pour viter de rpter leurs proprits dans les autres classes d'interface.
View est la classe dont hritent toutes les classes utilises pour raliser des interfaces. Ses proprits et ses
mthodes se retrouvent donc dans tous les lments d'interface.

Proprits positionnables en XLM

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

Visibilit

android:visibility="x" (les valeurs possibles pour x sont : visible, invisible ou gone)


Avec invisible la place est conserve, avec gone la place n'est pas conserve.

Fond

android:background="couleur" pour dfinir une couleur ou


android:background="@drawable/monimage" pour utiliser une image. L'image est place dans
res/drawable-xxxx/ et s'appelle monimage.t (o t est png, jpg, ou gif).
ATTENTION : les noms des images ne doivent utiliser que des minuscules ou des chiffres.

Taille et marges internes

android:minHeight="unit" dfinit la hauteur minimale si possible


android:minWidth="unit" dfinit la largeur minimale si possible
android:paddingBottom="unit" marge interne en bas
android:paddingLeft="unit" marge interne gauche
android:paddingRight="unit" marge interne droite
android:paddingTop="unit" marge interne en haut

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

12

Ascenseurs
Ces paramtres ne permettent pas d'ajouter des ascenseurs mais seulement de grer leur comportement lorsqu'ils
existent.
android:fadeScrollbars="b" o b vaut true ou false selon que l'on souhaite que les
ascenseurs disparaissent ou pas lorsqu'ils ne sont pas utiliss.
android:scrollbarDefaultDelayBeforeFade="x" o x est un entier qui dfinit le dlai (en
ms) avant que les ascenseurs non utiliss ne disparaissent
android:scrollbarFadeDuration="x" o x est un entier qui dfinit la dure d'effacement
des ascenseurs (en ms)

Evnements

android:clickable="b" (o b vaut true ou false).


android:longClickable="b" (o b vaut true ou false).

Mthodes de la classe View :


import android.view.View

Construction

View(Context) le paramtre est gnralement l'activit elle-mme

Placement

setLayoutParams(ViewGroup.LayoutParams)permet de dfinir le placement des objets


dans la vue. Le paramtre de cette mthode est gnralement new ViewGroup.LayoutParams(l,
h) o l dfinit la largeur et h la hauteur. Les valeurs pour l et h peuvent tre exprimes en pixels ou
prendre les valeurs ViewGroup.LayoutParams.WRAP_CONTENT pour adapter la taille au
contenu ou ViewGroup.LayoutParams.FILL_PARENT pour adapter la taille la place
disponible.

Position

bringToFront() met la vue en premier plan


getLeft() renvoie la position en pixels de la gauche de la vue
getTop()renvoie la position en pixels du haut de la vue
getRight()renvoie la position en pixels de la droite de la vue
getBottom()renvoie la position en pixels du bas de la vue

Taille et marges internes

getWidth()renvoie la largeur de la vue en pixels


getHeight()renvoie la hauteur de la vue en pixels
setPadding(int, int, int, int) dfinit les marges (en pixels). Les paramtres sont, dans
l'ordre : gauche, haut, droite, bas.
getPaddingLeft()renvoie la marge gauche (en pixels).
getPaddingTop()renvoie la marge haute (en pixels).
getPaddingRight()renvoie la marge droite (en pixels).
getPaddingBottom()renvoie la marge basse (en pixels).

Fond

setBackgroundColor(int) dfinit la couleur du fond


setBackgroundDrawable(Drawable) dfinit une image de fond
setBackgroundResource(int)dfinit le fond partir d'un identificateur de ressource

Rafraichissement

requestLayout() provoque un rafraichissement des positions des lments de la vue

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

13

invalidate()provoque un rafraichissement de la vue

Evenements

setOnClickListener(OnClickListener) associe un couteur d'vnements aux clics sur la


vue
setOnLongClickListener(OnLongClickListener) associe un couteur d'vnements aux
clics longs sur la vue
setOnKeyListener(OnKeyListener) associe un couteur d'vnements aux actions clavier
sur la vue
setOnTouchListener(OnTouchListener) associe un couteur d'vnements aux touchs sur
la vue

Focus

isFocusable() renvoie true si la vue peut prendre le focus


setFocusable(boolean) fait ou pas prendre le focus la vue
isFocusableInTouchMode()renvoie true si la vue peut prendre le focus lorsqu'elle est touche
setFocusableInTouchMode(boolean) autorise ou non la vue a prendre le focus lorsqu'elle est
touche

La classe ViewGroup
Proprits positionnables en XLM pour les lments placs l'intrieur

Taille

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


ou WRAP_CONTENT) pour occuper tout l'espace en hauteur ou seulement ce qui est ncessaire
android:layout_width="t" (o t peut tre une unit prendre les valeurs : FILL_PARENT ou
WRAP_CONTENT) pour occuper tout l'espace en largeur ou seulement ce qui est ncessaire

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
La mthode correspondant ces 4 paramtres est : setPadding(int, int, int, int)

Mthodes de la classe ViewGroup :


import android.view.ViewGroup

Construction

ViewGroup(Context) le paramtre est gnralement l'activit elle-mme

Elments du groupe

addView(View) ajoute un lment au groupe


getChildCount() renvoie le nombre d'lments du groupe
getFocusedChild() renvoie l'lment qui a actuellement le focus (objet de classe View)
removeView(View) enlve un lment du groupe
removeAllViews() enlve tous les lments du groupe

Marges

setPadding(int, int, int, int) dfinit les marges (en pixels). Les paramtres sont, dans
l'ordre : gauche, haut, droite, bas.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

14

Evnements traits par les classes de base des interfaces


L'interface OnClickListener
import android.view.View.OnClickListener
Dfinit les couteurs d'vnements de type clic. La mthode surcharger pout traiter les vnements est :
onClick(View)

L'interface OnLongClickListener
import android.view.View.OnLongClickListener
Dfinit les couteurs d'vnements de type clic long. La mthode surcharger pout traiter les vnements est :
onLongClick(View)

L'interface OnKeyListener
import android.view.View.OnKeyListener
Dfinit les couteurs d'vnements de type clavier. La mthode surcharger pout traiter les vnements est :
onKey(View, int, KeyEvent)
Le deuxime paramtre est le code de la touche tape, le troisime est l'vnement clavier.
Le code de la touche tape peut prendre les valeurs :
KEYCODE_0 KEYCODE_9 pour les chiffres
KEYCODE_A KEYCODE_Z pour les majuscules
KEYCODE_ALT_LEFT , KEYCODE_ALT_RIGHT , KEYCODE_SHIFT_LEFT et
KEYCODE_SHIFT_RIGHT pour les touches Alt et Shift
KEYCODE_NUM pour la touche Num
KEYCODE_APOSTROPHE , KEYCODE_GRAVE pour l'apostrophe et l'anti apostrophe
KEYCODE_SLASH et KEYCODE_BACKSLASH pour le / et l'antislash
KEYCODE_AT pour @
KEYCODE_STAR pour la touche *
KEYCODE_TAB pour la touche Tab
KEYCODE_SPACE pour l'espace
KEYCODE_COMMA , KEYCODE_PERIOD , KEYCODE_SEMICOLON pour la virgule, le point et
le point virgule
KEYCODE_BACK pour la touche de correction (backspace)
KEYCODE_CALL et KEYCODE_ENDCALL pour les touches d'appel et de fin d'appel
KEYCODE_CAMERA , KEYCODE_FOCUS pour la touche de dclenchement et de rglage de focus
de l'appareil photo
KEYCODE_CLEAR pour la touche Clear
KEYCODE_DEL pour la touche Del
KEYCODE_HOME pour la touche Home
KEYCODE_MENU pour la touche Menu
KEYCODE_DPAD_CENTER, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT,
KEYCODE_DPAD_RIGHT, KEYCODE_DPAD_UP pour le joystick
KEYCODE_ENTER pour la touche Entre
KEYCODE_ENVELOPE pour la touche spciale Enveloppe
KEYCODE_EXPLORER pour la touche spciale Explorateur
KEYCODE_EQUALS, KEYCODE_MINUS ,
KEYCODE_LEFT_BRACKET , KEYCODE_RIGHT_BRACKET pour les crochets
KEYCODE_MEDIA_FAST_FORWARD , KEYCODE_MEDIA_NEXT ,
KEYCODE_MEDIA_PLAY_PAUSE , KEYCODE_MEDIA_PREVIOUS ,
KEYCODE_MEDIA_REWIND , KEYCODE_MEDIA_STOP pour les touches de contrle des mdias

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

15

KEYCODE_MUTE , KEYCODE_VOLUME_DOWN, KEYCODE_VOLUME_UP pour les touches de


contrle du volume

La classe KeyEvent
import android.view.KeyEvent
Associe aux vnements clavier. Ses mthodes sont les suivantes :
getAction () qui renvoie un entier pouvant prendre les valeurs ACTION_DOWN ou ACTION_UP
qui indique l'action faite sur la touche (appuye, lche).
getRepeatCount()renvoie le nombre de rptitions lorsque la touche est maintenue
getKeyCode() renvoie le code de la touche (mme valeur que le dernier paramtre de onKey)
Les mthodes isAltPressed() , isShiftPressed() , isCtrlPressed() ,
isCapsLockOn() , isNumLockOn() , isScrollLockOn() permettent de tester l'tat des
touches de modification.

L'interface OnTouchListener
import android.view.View.OnTouchListener
Dfinit les couteurs d'vnements de type touch. La mthode surcharger pout traiter les vnements est :
onTouch(View, MotionEvent)
Le second paramtre est l'vnement de touch.

La classe MotionEvent
import android.view.MotionEvent
Associe aux vnements de dplacement (souris, cran tactile). Ses mthodes sont les suivantes :
getAction () qui renvoie un entier pouvant prendre les valeurs ACTION_DOWN , ACTION_UP ,
ACTION_MOVE ou ACTION_OUTSIDE
getPressure() renvoie un rel entre 0 et 1 indiquant la force de pression du touch sur l'cran
getX() et getY() renvoient un rel entre -1 et 1 indiquant les coordonnes (resp en x et en y).
getXPrecision() et getYPrecision() renvoient un rel indiquant la prcision des
coordonnes (resp en x et en y).

Les conteneurs
Les conteneurs sont utiliss pour placer des lments d'interface ou d'autres conteneurs. Ils hritent tous de
ViewGroup. Leurs proprits sont donc au moins celles dcrites ci-dessus pour View et ViewGroup auxquelles
viennent s'ajouter des proprits spcifiques dcrites dans cette partie.

La classe FrameLayout
Placement en haut gauche. Si l'on place plusieurs lments ils se superposent, gnralement FrameLayout est
utilis pour ne placer qu'un seul lment.

Proprits supplmentaires positionnables en XLM

Couleurs ou images

android:foreground="couleur" pour dfinir une couleur ou


android:foreground="@drawable/monimage" pour utiliser une image. L'image est place dans
res/drawable/ et s'appelle monimage.x (o x est png, jpg, ou gif).
android:foregroundGravity="g" (o g peut prendre les valeurs : top, bottom, left,
right, center_vertical, fill_vertical, center_horizontal,
fill_horizontal, center, fill) utilis lorsque android:foreground est dfini par
une image pour donner sa position.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

16

Mthodes de la classe FrameLayout


android.widget.FrameLayout

Construction

FrameLayout(Context) le paramtre est gnralement l'activit elle-mme

Fond

setForeground(Drawable) dfinit une image comme fond


getForeground() renvoie l'image de fond (objet de classe Drawable)
setForegroundGravity(int) Le paramtre est l'une des constantes dfinies dans la classe
Gravity on utilise donc Gravity. TOP, BOTTOM, LEFT, RIGHT, CENTER_VERTICAL,
FILL_VERTICAL, CENTER_HORIZONTAL, FILL_ HORIZONTAL, CENTER, FILL

La classe LinearLayout
Place les lments les uns cot des autres horizontalement ou verticalement.

Proprits supplmentaires positionnables en XLM

android:orientation="o" (o o peut prendre les valeurs : vertical ou horizontal)


android:weightSum="x" (o x est un rel entre 0 et 1) dsigne la somme des poids de tous les
lments mis dans le LinearLayout. Un paramtre de type android:layout_weight="x" (o x est
un rel entre 0 et 1) peut tre associ chacun des lments placs dans le LinearLayout pour indiquer
leur poids de redimensionnement relatif la valeur de layout_weightSum.
android:gravity="g" (o g peut prendre les valeurs : top, bottom, left, right,
center_vertical, fill_vertical, center_horizontal, fill_horizontal,
center, fill) dfinit comment se placent les lments contenus par ce conteneur.

Mthodes de la classe LinearLayout


android.widget.LinearLayout

Construction

LinearLayout(Context) le paramtre est gnralement l'activit elle-mme

Position et disposition

getOrientation() renvoie un entier qui vaut LinearLayout.HORIZONTAL ou


LinearLayout.VERTICAL
setOrientation(int) dfinit l'orientation, le paramtre est un entier qui vaut
LinearLayout.HORIZONTAL ou LinearLayout.VERTICAL
getWeightSum() renvoie un rel correspondant la somme des poids associe au LinearLayout
setWeightSum(float) dfinit la somme des poids associe au LinearLayout
setGravity(int) Le paramtre est l'une des constantes dfinies dans la classe Gravity on
utilise donc Gravity. (TOP, BOTTOM, LEFT, RIGHT, CENTER_VERTICAL, FILL_VERTICAL,
CENTER_HORIZONTAL, FILL_ HORIZONTAL, CENTER, FILL)

La classe AbsoluteLayout
Place les lments selon des coordonnes.

Proprits positionnables en XLM pour les lments placs l'intrieur


Chaque lment ajout dans un AbsoluteLayout indique sa position en mettant dans ses proprits :
android:layout_x="unit"
android:layout_y="unit"

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

17

Mthodes de la classe AbsoluteLayout


android.widget.AbsoluteLayout

Construction

AbsoluteLayout(Context) le paramtre est gnralement l'activit elle-mme

Les classe ScrollView et HorizontalScrollView


Un ScrollView est une zone dfilement vertical tandis qu'un HorizontalScrollView permet un dfilement
horizontal. Ils ne peuvent contenir qu'un seul lment. Gnralement ils sont utiliss pour contenir un
LinearLayout (dont l'orientation correspond celle du ScrollView) et offrir des ascenseurs. Lorsque l'on veut
avoir un dfilement horizontal et vertical il suffit de mettre un HorizontalScrollView dans un ScrollView.
ATTENTION : En raison de l'cran tactile il n'est pas possible de mettre une zone avec ascenseurs dans une zone
ayant elle-mme des ascenseurs car le dfilement se fera toujours sur la zone la plus externe (sur le contenant et
non sur le contenu).

Proprits supplmentaires positionnables en XLM


Mmes paramtres XML que FrameLayout plus :
android:fillViewport="b" (o b vaut true ou false) indique si le contenu doit tre tir pour
occuper la place disponible ou pas.

Mthodes des classes ScrollView et HorizontalScrollView


android.widget.ScrollView
android.widget.HorizontalScrollView

Construction

ScrollView(Context) le paramtre est gnralement l'activit elle-mme


HorizontalScrollView(Context) le paramtre est gnralement l'activit elle-mme

Dfilement

smoothScrollBy(int, int) permet de faire dfiler la vue. Les paramtres indiquent le nombre
de pixels de dfilement (resp horizontalement et verticalement)
smoothScrollTo(int, int) permet de faire dfiler la vue. Les paramtres indiquent la nouvelle
position de la vue en pixels (resp horizontalement et verticalement)
awakenScrollBars()provoque l'affichage des ascenseurs (qui s'effaceront au bout d'un moment).
isHorizontalScrollBarEnabled()renvoie true si l'ascenseur horizontal est autoris.
setHorizontalScrollBarEnabled(boolean) active ou pas l'ascenseur horizontal.
isVerticalScrollBarEnabled()renvoie true si l'ascenseur vertical est autoris.
setVerticalScrollBarEnabled(boolean) active ou pas l'ascenseur vertical.

Placement

setFillViewport(boolean) permet de dfinir si le contenu doit tre tir pour occuper la place
disponible (paramtre true) ou pas (paramtre false)

La classe TableLayout
Dispose les lments en lignes et colonnes. Chaque ligne est dsigne dans le fichier XML par <TableRow>
</TableRow>. Elle contient 1 ou plusieurs lments. Le nombre de colonnes est dtermin par la ligne
contenant le plus d'lments. TableLayout n'a pas d'ascenseurs, on peut les ajouter en l'incluant dans un
ScrollView ou HorizontalScrollView.

Proprits supplmentaires positionnables en XLM

android:collapseColumns="x,y, " (o x, y, ... sont des numros de colonnes cacher


(dmarrant 0)).

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

18

android:shrinkColumns="x,y, " (o x, y, ... sont des numros de colonnes qui peuvent tre
rtrcies en fonction de la place disponible (dmarrant 0)).
android:stretchColumns="x,y, " (o x, y, ... sont des numros de colonnes qui peuvent tre
agrandies en fonction de leur contenu (dmarrant 0)).

Proprits positionnables en XLM pour les lments placs l'intrieur

android:layout_span="x" (o x est un entier indiquant sur combien de colonnes s'tend


l'lment (par dfaut 1))

Mthodes de la classe TableLayout


android.widget.TableLayout

Construction

TableLayout(Context) le paramtre est gnralement l'activit elle-mme

Aspect

isColumnCollapsed(int) indique si la colonne dont le numro est donn en paramtre est


cache
setColumnCollapsed(int, boolean) cache ou pas (second paramtre) la colonne dont le
numro est donn en premier paramtre
isColumnShrinkable(int) indique si la colonne dont le numro est donn en paramtre est
rtrcissable
setColumnShrinkable(int, boolean) rend ou pas rtrcissable (second paramtre) la
colonne dont le numro est donn en premier paramtre
isColumnStretchable(int) indique si la colonne dont le numro est donn en paramtre est
tirable
setColumnStretchable(int, boolean) rend ou pas tirable (second paramtre) la colonne
dont le numro est donn en premier paramtre
isShrinkAllColumns() indique si toutes les colonnes sont rtrcissables
setShrinkAllColumns(boolean) rend toutes les colonnes (ou aucune) rtrcissables
isStretchAllColumns() indique si toutes les colonnes sont tirables
setStretchAllColumns(boolean) rend toutes les colonnes (ou aucune) tirables

La classe RelativeLayout
Permet de placer des lments les uns relativement aux autres.

Proprits supplmentaires positionnables en XLM

android:gravity="g" (o g peut prendre les valeurs : top, bottom, left, right,


center_vertical, fill_vertical, center_horizontal, fill_horizontal,
center, fill) dfinit comment se placent les lments contenus par ce conteneur.

Proprits positionnables en XLM pour les lments placs l'intrieur


Pour dfinir la position d'un lment par rapport un autre ou par rapport au RelativeLayout lui-mme
(parent) on ajoute dans la balise de cet lment :
Pour les positions par rapport au RelativeLayout :
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)
Pour les positions par rapport d'autres lments :
android:layout_above="@+id/ident"/

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

19

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

Mthodes de la classe RelativeLayout


android.widget.RelativeLayout

Construction

RelativeLayout(Context) le paramtre est gnralement l'activit elle-mme

Disposition

setGravity(int) Le paramtre est l'une des constantes dfinies dans la classe Gravity on utilise
donc Gravity. (TOP, BOTTOM, LEFT, RIGHT, CENTER_VERTICAL, FILL_VERTICAL,
CENTER_HORIZONTAL, FILL_ HORIZONTAL, CENTER, FILL)

Les groupes
Les groupes permettent de regrouper des lments en liste, tableaux, etc. Ils hritent tous de ViewGroup. Leurs
proprits sont donc au moins celles dcrites ci-dessus pour View et ViewGroup auxquelles viennent s'ajouter
des proprits spcifiques dcrites dans cette partie.
Le groupe RadioGroup ne permet que de regroupes des boutons radio et de faire en sorte qu'un seul soit
slectionn la fois.
Les groupes ListView, GridView et Gallery permettent d'organiser des lments quelconques.
Gnralement ListView et GridView sont utiliss pour des listes ou des tableaux de chanes de caractres
tandis que Gallery est utilis pour des images. Toutefois ces trois groupes peuvent grer des vues quelconques
(classe View ou drive) dans ce cas il faut crire un gestionnaire de contenu (Adapter) et le leur associer.

RadioGroup
Rserv au groupage de boutons radio (classe RadioButton). Le RadioGroup garantit
qu'un seul bouton soit coch la fois toutefois il ne fait aucune hypothse sur l'tat initial des
boutons. Ceci signifie que si dans le fichier XML vous avez activ l'un des boutons du
groupe il le restera mme lorsque vous en activerez un autre. Il est donc prfrable de ne
mettre dans le fichier XML que des boutons non cochs puis d'initialiser le RadioGroup par
sa mthode check (voir plus loin).

Proprits supplmentaires positionnables en XLM


Mmes paramtres XML que LinearLayout
Exemple de fichier XML :
<RadioGroup android:id="@+id/groupe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton

/>

</RadioGroup>

Mthodes de la classe RadioGroup


android.widget.RadioGroup

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

20

Construction

RadioGroup(Context) le paramtre est gnralement l'activit elle-mme

Selection

check(int) active le bouton radio dont l'identifiant est pass en paramtre


clearCheck() dsactive tous les boutons radio
getCheckedRadioButtonId() renvoie l'identifiant du bouton radio actif

Evnements

setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener) associe un
couteur aux changements de slection. La mthode onCheckedChanged(RadioGroup, int)
de l'interface RadioGroup.OnCheckedChangeListener doit tre surgarge pour traiter les
vnements. Le premier paramtre est la RadioGroup concern, le second indique le rang du bouton
radio activ.

ListView
ListView place les lments en liste avec un ascenseur vertical si ncessaire. ListView est normalemnt
utilis pour afficher des lments textuels ventuellement accompagns d'une case cocher lorsqu'il s'agit d'une
liste choix multiples. Il est toutefois possible d'y afficher des lments plus complexes en utisant un
gestionnaire de contenu.

Proprits supplmentaires positionnables en XLM

Contenu de type texte

android:entries="@array/maliste" dfinit le contenu de la liste partir d'une ressource de type


tableau de chanes de caractres dfinie dans un fichier xml plac dans res/values/ sous la forme
suivante :
<string-array name="maliste">
<item>premier lment</item>
<item>deuxime lment</item>

<item>dernier lment</item>
</string-array>

Sparateurs

android:divider="couleur" dfinit la couleur des sparateurs ou


android:divider="@drawable/monimage" pour utiliser une image. L'image est place dans
res/drawable/ et s'appelle monimage.x (o x est png, jpg, ou gif).
android:dividerHeight="unit" dfinit la hauteur des sparateurs (si c'est une image elle sera
dforme).

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

Mthodes de la classe ListView


android.widget.ListView

Construction

ListView(Context) le paramtre est gnralement l'activit elle-mme

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

21

Contenu
Le contenu d'une ListView peut tre dfini de faon statique par la proprit android:entries dans le
fichier xml. Lorsque l'on souhaite avoir un contenu dynamique on utilise un ArrayAdapter (collection) que
l'on remplit (mthodes add ou insert du ArrayAdapter) et que l'on associe la ListView par la mthode
setAdapter(ArrayAdapter). La classe ArrayAdapter possde les mthodes suivantes :

Construction
ArrayAdapter(Context, type) le premier paramtre est gnralement l'activit elle-mme,
le
second
paramtre
peut
tre
une
valeur
prdfinie
:
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 (dans ce cas une case cocher apparat cot de chaque lment de la liste). Le second
paramtre peut galement tre l'identificateur d'un widget TextView personnalis dfini dans un
fichier xml plac dans res/layout et dsign par R.layout.nom_du_fichier_xml

Elments

add(Object) pour ajouter la fin


insert(Object, int) pour insrer un lment au rang donn en 2me paramtre
clear() pour enlever tous les lments
remove(Object) pour enlever un lment
getCount() renvoie le nombre d'lments
getItem(int) renvoie l'lment (Onject) dont le rang est donn en 2me paramtre
getPosition(Object) renvoie le rang de l'objet dsign en paramtre

Remarque : Pour grer un contenu autre que du texte il existe un gestionnaire (classe SimpleAdapter)
permettant que chaque lment de la liste soit une petite interface dfinie dans un fichier xml. On peut galement
crire son propre gestionnaire de contenu en dfinissant une classe hritant de BaseAdapter (voir exemple
fourni pour la classe Gallery plus loin).

Aspect

setDivider(Drawable) dfinit l'image qui sera dessine entre chaque lment de la liste
getDivider() retourne l'image dessine entre chaque lment de la liste
setDividerHeight(int) dfinit la hauteur de la sparation entre chaque lment de la liste
getDividerHeight() renvoie la hauteur de la sparation entre chaque lment de la liste
addFooter(View)ajoute une vue en bas de la liste
addHeader(View) ajoute une vue en haut de la liste
setFooterDividersEnabled(boolean) autorise ou interdit la dessin d'un sparateur pour le
bas de liste
setHeaderDividersEnabled(boolean) autorise ou interdit la dessin d'un sparateur pour le
haut de liste
invalidateViews() provoque le rafraichissement des tous le lments internes

Selection

setItemChecked(int, boolean) slectionne (true) ou dslectionne (false) un lment de liste


par son rang ( partir de 0).
isItemChecked(int) renvoie un boolen qui indique si l'lment de liste dsign par son rang (
partir de 0) est selectionn.
clearChoices() invalide les choix actuels
getChoiceMode() renvoie le mode de choix peut prendre les valeurs : none, singleChoice ou
multipleChoice
setChoiceMode(int) dfinit le mode de choix le paramtre peut prendre les valeurs : none,
singleChoice ou multipleChoice
clearTextFilter() supprime le filtrage des lments au fur et mesure de la saisie

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

22

getTextFilter() renvoie la chane de caractres utilise pour le filtrage des lments au fur et
mesure de la saisie
isTextFilterEnabled() renvoie un boolen qui indique si le filtrage des lments au fur et
mesure de la saisie est actif ou pas
setFilterText(String) dfinit la chane de caractres utilise pour le filtrage des lments au
fur et mesure de la saisie
setTextFilterEnabled(boolean) active ou dsactive le filtrage des lments au fur et
mesure de la saisie

Evnements

setOnItemClickListener(AdapterView.OnItemClickListener) associe un couteur


d'vnements au clic sur un lment. La mthode onItemClick(AdapterView<?>, View,
int, long) de l'interface AdapterView.OnItemLongClickListener est surcharge pour
traiter l'vnement. Le 3me paramtre indique le rang de l'lment et le dernier son identifiant.
setOnItemLongClickListener(AdapterView.OnItemLongClickListener) associe
un couteur d'vnements au clic long sur un lment. La mthode
onItemLongClick(AdapterView<?>, View, int, long) de l'interface
AdapterView.OnItemLongClickListener est surcharge pour traiter l'vnement. Le 3me
paramtre indique le rang de l'lment et le dernier son identifiant.
setOnItemSelectedListener(AdapterView.OnItemSelectedListener) associe un
couteur d'vnements la slection d'un lment (pour les listes choix multiples). La mthode
onItemSelected
(AdapterView<?>,
View,
int,
long)
de l'interface
AdapterView.OnItemSelectListener est surcharge pour traiter l'vnement de slection
d'un lment. Le 3me paramtre indique le rang de l'lment et le dernier son identifiant.
La mthode onNothingSelected(AdapterView<?>) est surcharge pour traiter l'vnement de
non slection.

GridView
Fonctionne comme un ListView mais place les lments en tableau avec ascenseur vertical seulement si
ncessaire.

Proprits supplmentaires positionnables en XLM

android:gravity="g" (o g peut prendre les valeurs : top, bottom, left, right,


center_vertical, fill_vertical, center_horizontal, fill_horizontal, center,
fill) dfinit comment se placent les lments contenus par ce conteneur.

Couleurs

android:listSelector="couleur" pour dfinir une couleur pour dsigner l'objet slectionn

Slection

android:choiceMode="m" (o m peut prendre les valeurs : none, singleChoice ou


multipleChoice dfinit le type de slection
android:textFilterEnabled="b" (o b vaut true ou false) mise en place d'un filtrage des
lments au fur et mesure de la saisie
android:drawSelectorOnTop="b" (o b vaut true ou false) true indique que le selecteur est
dessin sur l'lment choisi (par dfaut c'est false)
android:fastScrollEnabled="b" (o b vaut true ou false) autorise ou pas le parcours rapide

Dimensions et espacement des colonnes

android:numColumns="x" (o est une valeur entire) dfinit le nombre de colonnes


android:columnWidth="unit"
android:horizontalSpacing="unit"
android:verticalSpacing="unit"

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

23

android:stretchMode="s" (o s peut prendre les valeurs : none, spacingWidth,


columnWidth, spacingWidthUniform) dfinit comment les colonnes occupent la place
disponible : none=non occupe, spacingWidth=tirement de l'espace entre les colonnes,
columnWidth=tirement des colonnes, spacingWidthUniform=tirement uniforme de toutes les
colonnes.

Mthodes de la classe GridView


android.widget.GridView

Construction

GridView(Context) le paramtre est gnralement l'activit elle-mme

Contenu
Pour remplir un GridView on utilise les mmes mcanismes que ceux dcrits plus haut pour la classe
ListView.

Position et disposition

setGravity(int) Le paramtre est l'une des constantes dfinies dans la classe Gravity on utilise
donc Gravity. (TOP, BOTTOM, LEFT, RIGHT, CENTER_VERTICAL, FILL_VERTICAL,
CENTER_HORIZONTAL, FILL_ HORIZONTAL, CENTER, FILL)
setStretchMode(int) dfinit comment les colonnes occupent la place disponible le paramtre
peut prendre les valeurs : none, spacingWidth, columnWidth, spacingWidthUniform)
none=non
occupe,
spacingWidth=tirement
de
l'espace
entre
les
colonnes,
columnWidth=tirement des colonnes, spacingWidthUniform=tirement uniforme de toutes les
colonnes
getStretchMode() renvoie l'information de placement des colonnes (voir setStretchMode
pour la valeur renvoye).
setColumnWidth(int) dfinit en pixels la largeur des colonnes
setHorizontalSpacing(int) dfinit en pixels l'espacement entre les colonnes
setVerticalSpacing(int) dfinit en pixels l'espacement entre les lignes
setNumColumns(int numColumns) dfinit le nombre de colonnes
invalidateViews() provoque le rafraichissement des tous le lments internes

Selection

setSelection(int) slectionne un lments de liste par son rang ( partir de 0).


clearChoices() invalide les choix actuels
getChoiceMode() renvoie le mode de choix peut prendre les valeurs : none, singleChoice ou
multipleChoice
setChoiceMode(int) dfinit le mode de choix le paramtre peut prendre les valeurs : none,
singleChoice ou multipleChoice
clearTextFilter() supprime le filtrage des lments au fur et mesure de la saisie
getTextFilter() renvoie la chane de caractres utilise pour le filtrage des lments au fur et
mesure de la saisie
isTextFilterEnabled() renvoie un boolen qui indique si le filtrage des lments au fur et
mesure de la saisie est actif ou pas
setFilterText(String) dfinit la chane de caractres utilise pour le filtrage des lments au
fur et mesure de la saisie
setTextFilterEnabled(boolean) active ou dsactive le filtrage des lments au fur et
mesure de la saisie

Evnements
Mmes mthodes que pour ListView

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

24

Gallery
Cette classe est gnralement utilise pour faire une galerie d'images mais elle
peut contenir d'autres types d'lments (voir plus loin). Le contenu d'une
galerie est dfini dans le code java par un gestionnaire de contenu.

Proprits supplmentaires positionnables en XLM

android:gravity="g" (o g peut prendre les valeurs : top,


bottom,
left,
right,
center_vertical,
fill_vertical,
center_horizontal,
fill_horizontal, center, fill) dfinit comment se placent les lments dans la galerie.
android:animationDuration="x" (o est une valeur entire) dfinit la dure de la transistion
(en ms) lorsque l'on passe d'un lment l'autre.
android:unselectedAlpha="x" (o est une valeur relle) dfinit la transparence des lments
non slectionns.

Exemple de fichier XML :


<Gallery android:id="@+id/galerie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

Mthodes de la classe Gallery


android.widget.Gallery

Construction

Gallery(Context) le paramtre est gnralement l'activit elle-mme

Contenu

setAdapter(Adapter) permet de dfinir le contenu de la galerie. Lorsqu'il s'agit d'images, la


faon de procder est la suivante :
1. Rcuprer l'objet de classe Gallery dfini dans le fichier xml de description de l'interface par :
galerie = (Gallery) findViewById(R.id.identificateur_de_votre_galerie_dans_le_xml);
2. Lui associer un gestionnaire de contenu par :
galerie.setAdapter(new GestionnaireDeContenuImages(mon_activit, largeur, hauteur));
Le premier paramtre est l'activit elle-mme. Les 2 derniers paramtres dfinissent la hauteur et la
largeur des images affiches dans la galerie. Celles-ci seront ventuellement dformes pour
obtenir ces dimensions.
3. Dfinir une classe pour ce gestionnaire de contenu par :
public class MonGestDeContenu extends BaseAdapter {
private Context contexte;
// Tableau des identificateurs d'images.
// Les images ont t places dans res/drawable/hdmi sous les noms a_1 a_N
private Integer[] identificateurDImages = { R.drawable.a_1, R.drawable.a_2, , R.drawable.a_N };
private int largeur, hauteur;
private int marges;
private int couleurFond;
public GestionnaireDeContenuImages(Context ctx, int l, int h) {
contexte = ctx;
largeur = l; hauteur = h; // dimensions des images
marges = 6; // marges droite et gauche de chaque image (ventuellement passer en paramtre)
couleurFond = Color.BLACK; // couleur de fond des images (ventuellement passer en paramtre)
}
public int getCount() { return identificateurDImages.length; }

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

25

public Object getItem(int position) {


return contexte.getResources().getDrawable(imgId[position]);
}
public long getItemId(int position) {
return imgId[position];
}
public View getView(int position, View ancienneVue, ViewGroup vueParente) {
ImageView vueDImage = new ImageView(contexte);
vueDImage.setImageResource(identificateurDImages[position]);
vueDImage.setLayoutParams(new Gallery.LayoutParams(largeur, hauteur));
vueDImage.setPadding(marges, 0, marges, 0);
vueDImage.setScaleType(ImageView.ScaleType.FIT_XY);
vueDImage.setBackgroundColor(couleurFond);
return vueDImage;
}
}

Disposition et aspect

setGravity(int) Le paramtre est l'une des constantes dfinies dans la classe Gravity on
utilise donc Gravity. (TOP, BOTTOM, LEFT, RIGHT, CENTER_VERTICAL, FILL_VERTICAL,
CENTER_HORIZONTAL, FILL_ HORIZONTAL, CENTER, FILL)
setSpacing(int)dfinit l'espace en pixels entre les lments de la galerie
setUnselectedAlpha(float)dfinit la transparence pour les lments non slectionns
showContextMenu()rend visible le menu contextuel

Slection

getCount() renvoie le nombre d'lments de la galerie


setSelection(int, boolean) slectionne un lment de la galerie par son rang ( partir de 0),
le second paramtre active ou pas l'animation lie cette slection
getSelectedItemId() renvoie l'identificateur l'lment slectionn
getSelectedItemPosition() renvoie le rang de l'lment slectionn ( partir de 0)

Evnements
Mmes mthodes que pour ListView

Animation

setAnimationDuration(int) dfinit la dure (en ms) de l'animation de changement d'lment

Utilisation de la classe Gallery pour faire une interface organise en pages


La classe Gallery est normalement utilise pour faire dfiler des images. Toutefois elle ne se restreint pas ce
seul usage, en effet il est possible d'utiliser une galerie contenant des interfaces. Le contenu d'une galerie est gr
par un gestionnaire de contenu (Adapter) si l'on crit un gestionnaire de contenu qui gre des contenants
(ViewGroup) on peut raliser une interface dont on fait dfiler les pages (comme le fait le bureau d'Android).
Fichier XML de l'interface de base de l'application (par exemple "main.xml") plac dans res/layout :
<?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"
>
<Gallery
android:id="@+id/magalerie"

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

26

android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:unselectedAlpha="0.5"
android:animationDuration="1000"
/>
</LinearLayout>
Il ne contient qu'un LinearLayout ne contenant qu'une galerie.
Il faut ensuite dfinir autant de fichiers xml que de pages chacun dcrivant l'interface d'une page de faon tout
fait classique. Supposons que ces fichiers s'appellent page1.xml , page2.xml Ils sont placs dans res/layout.
On va associer la galerie un gestionnaire de contenu qui cre les pages partir de ces fichiers :
public class GaleriePagesActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Gallery galerie = (Gallery) findViewById(R.id.magalerie);


galerie.setAdapter(new MonGestDeContenu());

}
public class MonGestDeContenu extends BaseAdapter {
private static final int nombreDePages = 2; // l'exemple a 2 pages
public MonGestDeContenu() {
}
@Override
public View getView(int position, View old, ViewGroup parent) {
View vue = null;
LayoutInflater decode =
LayoutInflater.from(GaleriePagesActivity.this);
switch (position) {
case 0:
vue = decode.inflate(R.layout.page1, parent, false);
break;
case 1 :
vue = decode.inflate(R.layout.page2, parent, false);
break;
}
return vue;
}
@Override
public int getCount() {
return nombreDePages;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
}
}

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

27

Si l'on veut associer des couteurs d'vnements aux lments d'interface qui sont dans les pages, il faudra le
faire lorsque la page est affiche c'est--dire dans chaque branche du switch du gestionnaire de contenu de la
galerie. Ceci pourra se faire de la faon suivante (on suppose pour cet exemple avoir dans la premire page un
bouton dont l'identifiant dans le fichier "page1.xml" est "mon_bouton") :
public class MonGestDeContenu extends BaseAdapter {
private static final nombreDePages = 2;
private ActionBouton actionBouton = null;
public MonGestDeContenu() {
actionBouton = new ActionBouton();
}
@Override
public View getView(int position, View old, ViewGroup parent) {
View vue = null;
LayoutInflater decode =
LayoutInflater.from(GalleriePagesActivity.this);
switch (position) {
case 0:
vue = decode.inflate(R.layout.page1, parent, false);
Button bouton = (Button) vue.findViewById(R.id.mon_bouton);
bouton.setOnClickListener(actionBouton);
break;
case 1 :

Il ne reste plus qu' crire la classe ActionBouton qui ragit aux vnements du bouton "mon_bouton"

Les composants d'interface


Ce sont les composants finals d'interface qui permettent l'interaction de l'utilisateur.
Leur position est dfinie :
Lorsqu'ils sont placs dans un AbsoluteLayout par :
android:layout_x="unit"
android:layout_y="unit"
Lorsqu'ils sont placs dans un RelativeLayout par rapport ce contenant et/ou aux autres
composants (voir RelativeLayout)
Lorsqu'ils sont placs dans un autre contenant par ce contenant (voir ci-dessous)
Leur taille est dfinie par :
android:layout_height="t" (o t peut tre une unit ou prendre les valeurs : FILL_PARENT
ou WRAP_CONTENT) pour occuper tout l'espace en hauteur ou seulement ce qui est ncessaire
android:layout_width="t" (o t peut tre une unit prendre les valeurs : FILL_PARENT ou
WRAP_CONTENT) pour occuper tout l'espace en largeur ou seulement ce qui est ncessaire
Sauf pour AbsoluteLayout et RelativeLayout, leur occupation du conteneur est dfinie par :
android:layout_gravity="g" (o g peut prendre les valeurs : top, bottom, left, right,
center_vertical,
fill_vertical,
center_horizontal,
fill_horizontal,
center, fill). Il est possible de composer ces valeurs par | (par exemple : top|right)
Remarque : le fonctionnement de layout_gravity est plutt trange dans un LinearLayout. En effet ce
contenant place les lments les uns cot des autres ou les uns sous les autres selon son orientation, et
layout_gravity n'a d'effet que sur l'autre direction c'est--dire que pour un LinearLayout horizontal
seules les valeurs top, center et bottom ont un sens alors que pour un LinearLayout vertical seules les
valeurs left, center et right ont un sens. Si on veut dfinir un placement de certains lments dans le
sens du LinearLayout lui-mme il faut les inclure dans un FrameLayout et les placer dans ce
FrameLayout.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

28

Exemple :
La description ci-dessous ne placera pas, comme on pourait s'y
attendre, la case cocher droite de l'cran
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="Essai placement"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
/>
</LinearLayout>
Pour obtenir le rsultat souhait il faut encapsuler la case cocher dans un FrameLayout :
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
/>
</FrameLayout>
Pour un TableLayout le nombre de colonnes occupespar l'lment est dfini par :
android:layout_span="s" (o s indique le nombre de colonnes (par dfaut 1))
Les marges externes sont dfinies par :
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

ImageView
Il s'agit simplement d'une zone dans laquelle s'affiche une image.

Proprits supplmentaires positionnables en XLM :

Contenu

android:src="couleur" pour dfinir une couleur ou ="@drawable/monimage" pour dfinir une


image. L'image est place dans res/drawable/ et s'appelle monimage.x (o x est png, jpg, ou
gif).
Mthodes
correspondantes
:
setImageBitmap,
setImageDrawable,
setImageResource

Dimensions

android:tint="couleur" pour dfinir une couleur qui teinte l'image


android:adjustViewBounds="b" (o b vaut true ou false) false indique que la taille de la zone
d'affichage correspond celle de l'image

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

29

Dans le cas o ce paramtre est true on prcise le comportement de l'image


android:baselineAlignBottom="b" (o b vaut true ou false) indique si l'image est place en
bas de la zone
android:cropToPadding="b" (o b vaut true ou false) true indique que l'image sera coupe si
elle est plus grande que la taille de la zone d'affichage
android:scaleType="s" (o s peut prendre les valeurs :
o matrix
l'image n'est ni centre ni redimensionne
o center
l'image est centre mais non redimensionne
o fitXY
l'image est dforme pour occuper tout l'espace
o fitStart
l'image est cadre en haut gauche et redimensionne
o fitCenter
l'image est centre et redimensionne
o fitEnd
l'image est cadre en bas droite et redimensionne
o centerCrop
l'image est centre et redimensionne selon sa dimension minimale et non
dforme, l'autre dimension pourra donc tre coupe
o centerInside l'image est centre et redimensionne selon sa dimension maximale et non
dforme; elle ne sera donc pas coupe
Exemple de fichier XML :
<ImageView android:id="@+id/image"
android:src="@drawable/photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
/>

Mthodes de la classe ImageView


android.widget.ImageView

Construction

ImageView(Context) le paramtre est gnralement l'activit elle-mme

Aspect

getDrawable() renvoie l'image du bouton (objet de classe Drawable)


setAlpha(int) dfinit la transparence (le paramtre est un rel entre 0 et 1)
setImageBitmap(Bitmap) dfinit l'image (objet de classe Bitmap)
setImageDrawable(Drawable) dfinit l'image (objet de classe Drawable)
setImageResource(int) dfinit l'image par son identificateur
setMaxHeight(int) dfinit la hauteur maximale en pixels
setMaxWidth(int) dfinit la largeur maximale en pixels
setScaleType(int) dfinit le positionnement de l'image. les valeurs possibles du paramtre sont :
ImageView.ScaleType. MATRIX , CENTER , FIT_XY ,
FIT_START , FIT_CENTER
, FIT_END , CENTER_CROP ou CENTER_INSIDE. Aprs avoir modifi le positionnement si on
n'a pas chang l'image il faut appeler la mthode invalidate() de l'ImageView pour que ce soit
pris en compte.

TextView
Affichage de texte a priori non ditable (pour du texte ditable utiliser EditView).

Proprits supplmentaires positionnables en XLM

Contenu

android:text="texte afficher"
android:hint="initial" dfinit le texte afficher quand la zone est vide

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

30

Taille et aspect du texte

android:gravity="g" (o g peut prendre les valeurs : top, bottom, left, right,


center_vertical,
fill_vertical,
center_horizontal,
fill_
horizontal,
center, fill) dfinit comment se place le texte
android:textSize="unit" utiliser de prfrence l'unit sp qui est lie aux polices
android:textScaleX="x" (o est une valeur relle) dfinit 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="x" (o est une valeur entire) dfinit le nombre de lignes du texte
android:maxLines="x" (o est une valeur entire) dfinit le nombre maximal de lignes du texte
android:minLines="x" (o est une valeur entire) dfinit le nombre minimal de lignes du texte
android:lineSpacingExtra="unit" espace supplmentaire entre les lignes
android:scrollHorizontally="b" (o b vaut true ou false) autorise ou pas le dfilement
horizontal du texte

Dimensions

android:ems="x" (o est une valeur entire) dfinit la taille du texte en caractres


android:maxEms="x" (o est une valeur entire) dfinit le nombre maximal de caractres des lignes
du texte
android:height="unit"
android:maxHeight="unit"
android:minHeight="unit"
android:width="unit"
android:maxWidth="unit"
android:minWidth="unit"

Comportement

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="b" (o b vaut true ou false) valide ou pas le mode correction du texte
android:capitalize="c" (o c peut tre : none, sentences, words, caracters) indique le
type de saisies que le texte mmorise et peut re-proposer.
android:digits="b" (o b vaut true ou false) true indique que la saisie n'accepte que du numrique
android:numerics="x" (o x peut tre integer, signed, decimal) dfinit le mode de
saisie numrique
android:password="b" (o b vaut true ou false) si true lors de la saisie des points sont affichs
android:phonenumber="b" (o b vaut true ou false) true indique que la saisie n'accepte que des
numros de tlphone
android:inputType="t" (o t peut tre : 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) dfinit le
mode de saisie.

Affichage

android:cursorVisible="b" (o b vaut true ou false) rend visible ou non le curseur


android:editable="b" (o b vaut true ou false) autorise 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

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

31

android:linksClickable="b" (o b vaut true ou false) rend ou pas les liens cliquables


android:textIsSelectable="b" (o b vaut true ou false) autorise ou interdit le slection dans
le texte

Couleurs et images

android:textColor="couleur" pour dfinir la couleur du texte


android:textColorHighlight="couleur" pour dfinir la couleur de surlignage du texte
android:textColorHint="couleur" pour dfinir la couleur du texte par dfaut
android:textColorLink="couleur" pour dfinir la couleur des liens dans le texte
android:drawableBottom="couleur" pour dfinir la couleur de fond du texte ou
="@drawable/monimage" pour dfinir une image de fond au texte. L'image est place dans
res/drawable/ et s'appelle monimage.x (o x est png, jpg, ou gif)
android:shadowColor="couleur" pour dfinir la couleur d'ombrage du texte
android:shadowDx="x" (o est une valeur relle) dfinit le dcalage en X de l'ombre (voir
shadowRadius)
android:shadowDy="x" (o est une valeur relle) dfinit le dcalage en Y de l'ombre (voir
shadowRadius)
android:shadowRadius="x" (o est une valeur relle) dfinit l'paisseur de l'ombre
(ATTENTION : par dfaut c'est 0 donc il n'y a pas d'ombre)

Exemple de fichier XML :


<TextView android:id="@+id/untexte"
android:text="Contenu du texte"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

Mthodes de la classe TextView


android.widget.TextView

Construction

TextView(Context) le paramtre est gnralement l'activit elle-mme

Manipulation du texte

getText() renvoie le texte contenu dans le TextView sous forme d'un objet de classe Editable
que l'on peut transformer en String par sa mthode toString() cd par : getText().toString()
setText(CharSequence) dfinit le texte du TextView
append(CharSequence) ajoute du texte au TextView
getLineCount() renvoie le nombre de lignes du texte contenu dans le TextView
length() renvoie la longueur du texte contenu dans le TextView
getSelectionStart() renvoie la position de dbut du texte slectionn
getSelectionEnd() renvoie la position de fin du texte slectionn
hasSelection() indique s'il y a ou pas du texte slectionn (true si oui, false si non)

Aspect

setCursorVisible(boolean) rend le curseur visible (true) ou invisible (false)


setEnabled(boolean) rend le TextView actif ou pas
getCurrentTextColor() renvoie la couleur actuelle du texte normal
setTextColor(int) dfinit la couleur du texte
setHighlightColor(int) dfinit la couleur du texte surlign
setHint(CharSequence) dfinit le texte afficher quand la zone est vide

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

32

Evnements

addTextChangedListener(TextWatcher) pour associer un couteur d'vnements aux


modifications du texte. L'interface TextWatcher possde les mthodes surcharger suivantes :
o beforeTextChanged(CharSequence, int, int, int) appele avant la
modification du texte
o onTextChanged(CharSequence, int, int, int) appele aprs la modification
du texte
Pour ces 2 mthodes les paramtres sont :
o Le texte (avant ou aprs sa modification)
o Le point de dpart de la modification (rang du caractre)
o Le nombre de caractres remplacs
o Le nombre de caractres de remplacement

setOnEditorActionListener(TextView.OnEditorActionListener) pour associer


un couteur d'vnements aux actions. L'interface TextView.OnEditorActionListener
possde la mthode surcharger suivante :
o onEditorAction(TextView, int, KeyEvent) appele lorsqu'une action est effectue (en
particulier quand on tape la touche Entre). Cette mthode doit retourner un boolen (true si
l'vnement a t trait)
Les paramtres sont :
o Le TextView lui-mme
o Un identificateur d'action ou la valeur EditorInfo.IME_NULL lorsque l'action provient
de la touche Entre
o L'vnement clavier lorsque l'action provient de la touche Entre

setKeyListener(KeyListener) pour associer un couteur d'vnements au clavier. L'interface


KeyListener possde les mthodes surcharger suivantes :
o onKeyDown(View, Editable, int, KeyEvent) appele lorsqu'une touche est
appuye
o onKeyUp(View, Editable, int, KeyEvent) appele lorsqu'une touche est lche
Pour ces 2 mthodes les paramtres sont :
o Le TextView lui-mme
o Le texte
o Le code de la touche (voir OnKeyListener)
o L'vnement clavier

EditText
C'est la mme chose que TextView mais pour du texte ditable
Exemple de fichier XML :
<EditText android:id="@+id/texte"
android:text="contenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:typeface="serif"
android:phoneNumber="true"
/>

Mthodes de la classe EditText


android.widget.EditText

Construction

EditText(Context) le paramtre est gnralement l'activit elle-mme

Manipulation du texte

getText() renvoie le texte contenu dans le EditText

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

33

selectAll() slectionne tout le texte


setSelection(int start, int stop) slectionne le texte entre les positions passes en
paramtre (dbut, fin).

AutoCompleteTextView
Texte ditable proposant de la compltion. Possde les mmes
paramtres XML que EditText plus :

android:completionHint="texte" texte affich en titre


du menu droulant
android:completionThreshold="x" (o x est une
valeur entire) dfinit 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 largeur du menu droulant
android:dropDownHorizontalOffset="unit" dcalage horizontal du menu droulant
android:dropDownVerticalOffset="unit" dcalage vertical du menu droulant

Mthodes de la classe AutoCompleteTextView


android.widget.AutoCompleteTextView

Construction

AutoCompleteTextView(Context) le paramtre est gnralement l'activit elle-mme

Aspect et contenu

showDropDown() montre la liste droulante


dismissDropDown()cache la liste droulante
getListSelection() renvoie le rang de la proposition choisie
setListSelection(int) choisit une proposition par son rang
setAdapter(ArrayAdapter) Permet de remplir la liste de propositions. La classe
ArrayAdapter est dcrite dans ListView.
setCompletionHint(CharSequence) dfinit le texte affich en titre du menu droulant

Evnements

setOnItemClickListener(AdapterView.OnItemClickListener) associe un couteur


d'vnements au clic sur un lment propos. La mthode onItemClick(AdapterView<?>,
View, int, long) de l'interface AdapterView.OnItemLongClickListener est
surcharge pour traiter l'vnement. Le 3me paramtre indique le rang de l'lment et le dernier son
identifiant.
setOnItemSelectedListener(AdapterView.OnItemSelectedListener) associe un
couteur d'vnements la slection d'un lment propos. La mthode onItemSelected
(AdapterView<?>, View, int, long) de l'interface
AdapterView.OnItemSelectListener est surcharge pour traiter l'vnement de slection
d'un lment. Le 3me paramtre indique le rang de l'lment et le dernier son identifiant.
La mthode onNothingSelected(AdapterView<?>) est surcharge pour traiter l'vnement de
non slection.

Button
Mmes paramtres XML que TextView
Exemple de fichier XML :
<Button android:id="@+id/compte"

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

34

android:text="Count"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

Mthodes de la classe Button


android.widget.Button

Construction

Button(Context) le paramtre est gnralement l'activit elle-mme

ImageButton
Mmes paramtres XML que ImageView
Exemple de fichier XML :
<ImageButton android:id="@+id/boutonloupe"
android:src="@drawable/loupe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

Mthodes de la classe ImageButton


android.widget.ImageButton
ImageButton hrite de ImageView il a donc les mmes sauf le constructeur :

Construction

ImageButton(Context) le paramtre est gnralement l'activit elle-mme

ToggleButton
Mmes paramtres XML que TextView plus :
android:disabledAlpha="x" (o est une valeur relle entre 0 et 1) dfinit la transparence
applique lorsque le bouton est inactif
android:textOff="txt" dfinit le texte quand le bouton n'est pas allum
android:textOn="txt" dfinit le texte quand le bouton n'est pas allum
android:checked="b" (o b vaut true ou false) place le bouton en position allum ou teint

Mthodes de la classe ToggleButton


android.widget.ToggleButton

Construction

ToggleButton(Context) le paramtre est gnralement l'activit elle-mme

Etat

isChecked() indique si le bouton est allum ou teint (true/false)


setChecked(boolean) positionne le bouton (true = allum, false = teint)
toggle() change l'tat du bouton

Aspect

getTextOff() renvoie le texte associ au bouton quand il n'est pas allum


getTextOn() renvoie le texte associ au bouton quand il est allum
setTextOff(CharSequence) dfinit le texte associ au bouton quand il n'est pas allum
setTextOn(CharSequence) dfinit le texte associ au bouton quand il est allum

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

35

setBackgroundDrawable(Drawable) dfinit le fond du bouton

CheckBox
Mmes paramtres XML que TextView plus :
android:checked="b" o b vaut true ou false coche ou dcoche la case au dpart
Exemple de fichier XML :
<CheckBox android:id="@+id/case"
android:text="Checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
/>

Mthodes de la classe CheckBox


android.widget.CheckBox

Construction

Checkbox(Context) le paramtre est gnralement l'activit elle-mme

Etat

isChecked() renvoie true si la case est coche


setChecked(boolean) coche (true) ou dcoche (false) la case
toggle() change l'tat de la case

RadioButton
Mmes paramtres XML que TextView plus :
android:checked="b" o b vaut true ou false coche ou dcoche
le bouton au dpart
Exemple de fichier XML :
<RadioButton android:id="@+id/gauche"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Left"
android:checked="false"
android:layout_gravity="left"
/>

Mthodes de la classe RadioButton


android.widget.RadioButton

Construction

RadioButton(Context) le paramtre est gnralement l'activit elle-mme

Etat

isChecked() renvoie true si la case est coche


setChecked(boolean) coche (true) ou dcoche (false) la case
toggle() change l'tat de la case

Spinner
Propose une liste de choix. Le choix actuellement slectionn est affich, la flche permet de faire apparatre les
autres possibilits sous la forme d'un RadioGroup.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

36

Proprits supplmentaires positionnables en XLM


android:gravity="g" (o g peut prendre les valeurs : top, bottom, left, right,
center_vertical,
fill_vertical,
center_horizontal,
fill_
horizontal,
center, fill) dfinit comment se placent les lments de choix.
android:prompt="texte" dfinit 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 d'une ressource de type
tableau de chanes de caractres mise dans un fichier xml plac dans res/values/ sous la forme :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="maliste">
<item>Mercure</item>
<item>Venus</item>
<item>Terre</item>
<item>Mars</item>
</string-array>
</resources>

Mthodes de la classe Spinner


android.widget.Spinner

Construction

Spinner(Context) le paramtre est gnralement l'activit elle-mme

Contenu

setAdapter(ArrayAdapter) Permet de remplir la liste de choix. La faon de procder est


dcrite dans ListView.

Slection

getCount() renvoie le nombre de choix


setSelection(int) slectionne un lment de la liste par son rang ( partir de 0)

Evnements

setOnItemSelectedListener(AdapterView.OnItemSelectedListener) associe un
couteur d'vnements la slection d'une choix.
La mthode onItemSelected (AdapterView<?>, View, int, long) de l'interface
AdapterView.OnItemSelectListener est surcharge pour traiter l'vnement. Le 3me
paramtre indique le rang de l'lment et le dernier son identifiant.
La mthode onNothingSelected(AdapterView<?>) est surcharge pour traiter l'vnement de
non slection.

DatePicker
Mmes paramtres XML que FrameLayout plus :

android:startYear="x" o x est l'anne de dpart du calendrier affich


android:endYear="x" o x est l'anne de fin du calendrier affich
android:minDate="x" o x est la date de dpart du calendrier affich sous la forme mm/jj/aaaa
android:maxDate="x" o x est la date de fin du calendrier affich sous la forme mm/jj/aaaa

Exemple de fichier XML :


<DatePicker android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:startYear="2000"
android:endYear="2020"
/>

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

37

Mthodes de la classe DatePicker


android.widget.DatePicker

Construction

DatePicker(Context) le paramtre est gnralement l'activit elle-mme

Contenu

getDayOfMonth() renvoie le jour affich (1 31)


getMonth() renvoie le mois affich (1 12)
getYear() renvoie l'anne affich
updateDate(int, int, int) met jour la date affiche, les paramtres sont dans l'ordre :
anne, mois, jour)
isEnabled() indique si le DatePicker est actif ou pas
setEnabled(boolean) rend le DatePicker actif ou pas

Initialisation et prise en compte des vnements

init(int, int, int, DatePicker.OnDateChangedListener) initialise l'anne (1er


paramtre), le mois (2me paramtre), le jour (3me paramtre) et dfinit un couteur d'vnements
lorsque une date est choisie (dernier paramtre). La mthode onDateChanged(DatePicker,
int, int, int)
de l'interface DatePicker.OnDateChangedListener doit tre surcharge pour traiter
l'vnement. Ses paramtres sont : le DatePicker lui-mme, l'anne choisie, le mois choisi et le jour
choisi.

TimePicker
Mmes paramtres XML que FrameLayout
Exemple de fichier XML :
<TimePicker android:id="@+id/temps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

Mthodes de la classe TimePicker


android.widget.TimePicker

Construction

TimePicker(Context) le paramtre est gnralement l'activit elle-mme

Contenu

getCurrentHour() renvoie l'heure affiche


getCurrentMinute() renvoie les minutes affiches
setCurrentHour(Integer) dfinit l'heure affiche
setCurrentMinute() dfinit les minutes affiches
is24HourView() indique si l'affichage est fait sur 12 ou 24 heures
setIs24HourView(Boolean) dfinit le mode d'affichage (true en 24 heures, false en 12
heures)
isEnabled() indique si le TimePicker est actif ou pas
setEnabled(boolean) rend le TimePicker actif ou pas

Evnements

setOnTimeChangedListener(TimePicker.OnTimeChangedListener)
dfinit
un
couteur d'vnements lorsqu'une heure est choisie. La mthode onTimeChanged(TimePicker,

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

38

int, int)de l'interface TimePicker.OnTimeChangedListener doit tre surcharge pour


traiter l'vnement. Ses paramtres sont : le TimePicker lui-mme, l'heure choisie et la minute
choisie.

ProgressBar
Deux comportements possibles selon que l'on connat le taux de progression
ou pas. Dans le premier cas on peut faire voluer la progression, dans le
second on a une animation.
Deux formes sont possibles (barre verticale ou cercle).

Proprits supplmentaires positionnables en XLM


Mode

android:indeterminate="b" (o b vaut true ou false) dfinit le type de ProgressBar (true =


taux indtermin, false= taux dtermin).

Valeurs si on a choisi le mode dtermin

android:max="x" (o est une valeur entire) dfinit la valeur maximale


android:progress="x" (o est une valeur entire) dfinit la valeur initiale
android:secondaryProgress="x" (o est une valeur entire) dfinit une valeur secondaire (par
exemple celle d'un buffer comme on le voit sur des vidos en streaming)

Animation si on a choisi le mode indtermin

android:indeterminateBehavior="i" (o i peut tre : repeat ou cycle) dfinit le


comportement de l'animation pour le type indtermin (repeat=recommence l'animation,
cycle=changer le sens de l'animation)
android:indeterminateDuration="x" (o est une valeur entire) dfinit la dure de
l'animation (en ms)
android:animationResolution="x" (o est une valeur entire) dfinit le rythme de l'animation
(en ms)

Aspect

style="?android:attr/s" o s peut tre :


o progressBarStyleHorizontal une barre horizontale (cas dtermin)
o progressBarStyleSmall un cercle de petite taille (cas indtermin)
o progressBarStyleLarge un cercle de grande taille (cas indtermin)

Exemple de fichier XML :


<ProgressBar android:id="@+id/progres"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="300px"
android:minHeight="30px"
android:max="100"
android:progress="30"
android:secondaryProgress="40"
android:indeterminate="false"
style="?android:attr/progressBarStyleHorizontal"
/>

Mthodes de la classe ProgessBar


android.widget.ProgressBar

Construction

ProgressBar(Context) le paramtre est gnralement l'activit elle-mme

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

39

Valeurs

getMax() renvoie la valeur maximale


setMax(int) dfinit valeur maximale
getProgress() renvoie la valeur actuelle
setProgress(int) dfinit la valeur actuelle
getSecondaryProgress() renvoie la valeur secondaire actuelle
setSecondaryProgress(int) dfinit la valeur secondaire actuelle
incrementProgressBy(int) modifie le pas de progression par ajout du paramtre
incrementSecondaryProgressBy(int) modifie le pas de progression de la valeurs secondaire
par ajout du paramtre

Aspect

isIndeterminate() indique si le ProgressBar est en mode indtermin (true) ou pas


setIndeterminate(boolean) met le ProgressBar est en mode indtermin (true) ou pas
setVisibility(int) dfinit la visibilit. Le paramtre peut tre : VISIBLE, INVISIBLE, ou
GONE.

SeekBar
C'est un ProgressBar sous forme de barre horizontale dot
d'un curseur permettant de modifier la valeur.
Mmes paramtres XML que ProgressBar mais l'aspect ne peut pas tre modifi.

Mthodes de la classe SeekBar


android.widget.SeekBar

Construction

SeekBar(Context) le paramtre est gnralement l'activit elle-mme

On trouve les mmes mthodes que dans la classe ProgressBar puisque SeekBar en hrite mais on peut
grer les vnements de modification de la valeur :

Evnements

setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener)
permet
d'associer un couteur d'vnements aux modifications de la valeur. Les mthodes que l'on surcharge
dans l'interface SeekBar.OnSeekBarChangeListener sont :
o onProgressChanged(SeekBar, int, boolean) le curseur a t dplac. Le 2me paramtre
est la nouvelle valeur, le dernier paramtre vaut true si la valeur a t modifie par l'utilisateur.
o onStartTrackingTouch(SeekBar) dbut du dplacement
o onStopTrackingTouch(SeekBar) fin du dplacement
Remarque : pour toutes ces mthodes le 1er paramtre est le SeekBar lui-mme

RatingBar
Mmes paramtres XML que ProgressBar plus :

android:isIndicator="b" (o b vaut true ou false) indique si l'utilisateur peut modifier la valeur


ou pas (true= non modifiable)
android:numStars="x" (o est une valeur entire) dfinit le nombre d'toiles affiches
android:rating="x" (o est une valeur relle) dfinit la position initiale
android:stepSize="x" (o est une valeur relle) dfinit le pas de progression (on peut cocher des
toiles par exemple)

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

40

Mthodes de la classe RatingBar


android.widget.RatingBar

Construction

RatingBar(Context) le paramtre est gnralement l'activit elle-mme

Valeurs

getNumStars() renvoie le nombre d'toiles


setNumStars(int) dfinit le nombre d'toiles
getRating() renvoie la valeur actuelle (rel)
setRating(float) dfinit la valeur actuelle
getStepSize() renvoie le pas de progression (rel)
setStepSize(float) dfinit le pas de progression
isIndicator() indique si l'utilisateur peut modifier la valeur ou pas (true= non modifiable)
setIsIndicator(boolean) dfinit si l'utilisateur peut modifier la valeur ou pas (true= non
modifiable)

Evnements

setOnRatingBarChangeListener(RatingBar.OnRatingBarChangeListener)
associe un couteur d'vnements aux modifications. L'interface
RatingBar.OnRatingBarChangeListener possde une mthode
onRatingChanged(RatingBar, float, boolean) qui doit tre surcharge pour traiter les
vnements. Le 1er paramtre est la barre, le 2me est la valeur actuelle et le 3me vaut true si la valeur a
t modifie par l'utilisateur (false si c'est par programme).

Exemple de fichier XML :


<RatingBar android:id="@+id/vote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isIndicator="false"
android:numStars="5"
android:stepSize="0.1"
android:rating="3.5"
/>

AnalogClock
Exemple de fichier XML :
<AnalogClock android:id="@+id/horloge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

Mthodes de la classe AnalogClock


android.widget.AnalogClock

Construction

AnalogClock(Context) le paramtre est gnralement l'activit elle-mme

DigitalClock
Mmes paramtres XML que TextView
Exemple de fichier XML :
<DigitalClock android:id="@+id/digitalclock"
android:layout_width="wrap_content"

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

41

android:layout_height="wrap_content"
/>

Mthodes de la classe DigitalClock


android.widget.DigitalClock

Construction

DigitalClock(Context) le paramtre est gnralement l'activit elle-mme

Chronometer
C'est un compteur qui dmarre la valeur donne par setBase et compte en incrmentant. Son apparence est
celle d'un texte dans lequel apparat le temps (voir format ci-dessous).
Mmes paramtres XML que TextView plus :

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)

Mthodes de la classe Chronometer


android.widget.Chronometer

Construction

Chronometer(Context) le paramtre est gnralement l'activit elle-mme

Utilisation

getBase() renvoie le point de dpart du chronomtre (long)


setBase(long) dfinit le point de dpart du chronomtre
start() lance le chronomtre
stop() arrte le chronomtre

Aspect

setFormat(String) le paramtre 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
getFormat() renvoie le format utilis (chane)

Evnements

setOnChronometerTickListener(Chronometer.OnChronometerTickListener)
dfinit un couteur d'vnements pour chaque incrmentation du chronomtre. L'interface
Chronometer.OnChronometerTickListener
possde
une
mthode
onChronometerTick(Chronometer) qui doit tre surcharge pour traiter l'vnement. Cette
mthode reoit le chronomtre lui-mme en paramtre.

Notifications
Android propose un mcanisme simple pour envoyer des informations visuelles l'utilisateur : la classe Toast.
Il s'agit d'une fentre qui apparat en premier plan puis disparat seule au bout d'un temps donn (2 ou 5
secondes).

La classe Toast
Mthodes de la classe Toast
android.widget.Toast

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

42

Cration d'un Toast

Toast.makeText(Context, String, int) cette mthode renvoie l'objet de classe Toast


cr. Le premier paramtre est gnralement l'activit elle-mme, 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) cette mthode doit tre 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 horizontal et
vertical (en pixels).

Affichage d'un Toast

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

Textes Formats
Les widgets qui affichent du texte (TextView, Button, CheckBox ) acceptent, pour dfinir ce texte, des objets
de classe CharSequence. On peut utiliser la classe String qui hrite de CharSequence mais elle ne
permet pas de formatter le texte. Le formet (taille, police, ..) dfini dans le fichier XML s'applique donc tout le
texte. La classe SpannableStringBuilder qui hrite aussi de CharSequence (et peut donc tre utilise
au lieu de String) permet d'apposer des formats des parties de texte.

Cration d'un texte format :


SpannableStringBuilder texte = new SpannableStringBuilder("chaine formater");

Application de formats :
Cela se fait par la mthode setSpan de SpannableStringBuilder :
texte.setSpan(CharacterStyle, int, int,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Le premier paramtre permet de dfinir :
La couleur du texte en y mettant : new ForegroundColorSpan(int) qui reoit en paramtre
un code de couleur
La couleur du fond en y mettant : new BackgroundColorSpan(int) qui reoit en paramtre
un code de couleur
La police en y mettant : new TypeSpaceSpan(String) qui reoit en paramtre le nom de police
qui peut tre : normal, sans, serif ou monospace
La taille en y mettant l'un des objets suivants :
 new AbsoluteSizeSpan(int, boolean) qui reoit en paramtre la taille en pixels
(px) si le 2me paramtre est false ou est omis et en pixels densit indpendante (dp)
sinon
 new RelativeSizeSpan(float) qui reoit en paramtre l'chelle de taille (1.5F
signifie 1 fois et demi plus gros)
L'tirement horizontal en y mettant : new ScaleXSpan(float) qui reoit en paramtre l'chelle
de taille (1.5F signifie tir 1 fois et demi en largeur)
Le style du texte en y mettant : new StyleSpan(Typeface) qui reoit en paramtre le style
qui est l'une des constantes :
 android.graphics.Typeface.BOLD
 android.graphics.Typeface.BOLD_ITALIC
 android.graphics.Typeface.ITALIC
 android.graphics.Typeface.NORMAL
Le mode soulign en y mettant : new UnderlineSpan()

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

43

Le deuxime paramtre permet de dfinir le point (rang du caractre) partir duquel commence
s'appliquer ce format
Le troisime paramtre permet de dfinir le point (rang du caractre) partir duquel cesse de s'appliquer
ce format
Bien entendu plusieurs formats peuvent s'appliquer sur la mme partie de texte (par exemple : gras + soulign+
rouge sur fond vert)

Couleurs et Images
Les couleurs sont reprsentes par un entier sur 32 bits (8 bits de transparence (FF=opaque, 0=totalement
transparent), 8 bits rouge, 8 bits vert et 8 bits bleu). On peut manipuler ces codes l'aide de la classe Color

La classe Color d'Android


import android.graphics.Color

Mthodes de la classe Color

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
Un certain nombre de couleurs sont prdfinies en contantes dans la classe Color : Color.BLACK,
Color.WHITE, Color.LTGRAY, Color.GRAY, Color.DKGRAY, Color.RED, Color.GREEN,
Color.BLUE, Color.CYAN, Color.MAGENTA, Color.YELLOW et Color.TRANSPARENT

La classe Drawable
import android.graphics.drawable.Drawable
Les images, quand elles sont rcupres dans les ressources, apparaissent sous la forme d'objets de la classe
Drawable. C'est sous cette forme qu'elles peuvent tre utilises dans les divers lments d'interface (images de
fond, images affiches dans des boutons ou des ImageView sparateurs de liste, ). Elles peuvent galement
tre affiches dans un objet de classe Canvas par leur mthode draw(Canvas).

Les menus
import android.view.Menu
import android.view.MenuItem
import android.view.MenuInflater
import android.view.ContextMenu
import android.view.ContextMenuInfo
Android propose 2 types de menus:
Menu gnral associ l'interface d'une activit et qui apparat lorsque l'on utilise la touche "menu" du
tlphone
Menu contextuel li un lment d'interface qui apparat lorsque l'on touche longuement cet lment

Description en XML d'un menu


Le fichier de description de menu doit tre plac dans res/menu (ce rpertoire n'est pas cr par Eclipse il faudra
donc le faire).
Structure du fichier XML :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

44

<item android:id="@+id/nom_du_choix_1"
android:icon="@drawable/image_du_choix_1"
android:title="@string/texte_du_choix_1" />

<item />
</menu>
A chaque lment de menu peut tre associe une icne et un texte. On peut, bien entendu ne mettre que l'un des
deux.
La cration de sous menus dans un item se fait comme suit :
<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
Cration du menu
Elle se fait dans la mthode onCreateOptionMenu(Menu) de l'activit partir du fichier xml de description
sous la forme :
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.nom_du_fichier_xml_du_menu, menu);
return true;
}

Ractions aux choix


Elle se fait dans la mthode onOptionsItemSelected(MenuItem) de l'activit qui est appele lorsque
l'utilisateur fait un choix dans un menu ou un sous menu. Cette mthode doit renvoyer un boolen true si
l'vnement a t trait. Sa forme est celle d'un switch o l'on traite chaque item de menu n'ayant pas de sous
menu et chaque item des sous menu :
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);
}
}

Menus contextuels
Association
Le menu contextuel doit tre associ un lment d'interface. Ceci se fait lors de la cration de l'interface (dans
onCreate) de la faon suivante :
registerForContexMenu(element_associe_au_menu_contextuel);

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

45

Cration du menu contextuel


La cration se fait dans la mthode onCreateContextMenu 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);
}

Ractions aux choix


Elle se fait dans la mthode onContextItemSelected(MenuItem) de l'activit qui est appele lorsque
l'utilisateur fait un choix dans un menu contextuel. Cette mthode doit renvoyer un boolen true si l'vnement
a t trait. Sa forme est celle d'un switch o l'on traite chaque item de menu n'ayant pas de sous menu et chaque
item des sous menu :
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);


}
}

Communication entre activits


import android.os.Bundle
import android.content.Intent
import android.net.Uri
Une activit peut en lancer d'autres, leur passer des paramtres et en rcuprer des valeurs de retour.

Filtres d'intensions
Ils permettent Android de savoir si une activit correspond un type d'appel. On peut associer de tels filtres
toutes les activits d'une application.

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>

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

46


</intent-filter>
</activity>

Lancer une activit


Sans attente de rponse
Dans le cas o l'activit lance est connue par le nom de sa classe :
Intent demarre = new Intent(this, NomDeLaClasseDeLActiviteALancer.class);
startActivity(demarre);
Dans le cas o on laisse Android choisir l'activit lancer grce aux filtres d'intensions :
Uri chemin = Uri.parse("http://www.google.fr");
Intent naviguer = new Intent(Intent.ACTION_VIEW, chemin);
startActivity(naviguer);
Remarque : on peut aussi crer un Intent sans prciser d'URI en omettant le second paramtre dans le
constructeur de l'Intent.
Pour ajouter des informations un Intent il existe les mthodes :
addCategory(String) ajoute une catgorie
setData(URI) dfinit une URI pour les donnes
setDataAndType(URI, String) dfinit une URI et un type mime pour les donnes

Avec attente de rponse


Le processus de lancement est le mme que prcdemment la seule diffrence porte sur la mthode utilise pour
le lancement : startActivity est remplac par startActivityForResult.
Lancement de l'activit B dans l'activit A :
private 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 (voir plus loin)
startActivityForResult(demarre, MON_CODE); // lancement de lactivit B
Renvoi de rponse et terminaison de l'activit B :
Intent intent_retour = new Intent(); // Prparer un Intent pour les valeurs de retour
// Ajouter les valeurs de retour lIntent intent_retour (voir plus loin)
setResult(code, intent_retour); // renvoyer un code de retour (entier : on peut utiliser les constantes
RESULT_CANCELED et RESULT_OK) et lIntent de retour
finish(); // terminer lactivit B
Rcupration de la rponse de l'activit B dans l'activit A :
protected void onActivityResult(int ident, int code_retour, Intent retour) {
switch(ident) {
case MON_CODE : // cest lactivit B qui a rpondu
// rcupration des valeurs de retour contenues dans lIntent retour (voir ci-dessous)
// traitement selon le code de retour contenu dans lentier code_retour
return;

}
}
Les valeurs de retour sont rcupres dans le dernier paramtre, selon leur type, par :
boolean x = retour.getBooleanExtra("nom_de_la_valeur_de_retour_x")
int y = retour.getIntExtra("nom_de_la_valeur_de_retour_y")

boolean[] tab = retour.getBooleanArrayExtra("nom_de_la_valeur_de_retour_tab")

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

47


ATTENTION : tester le cas o retour serait null pour viter le plantage si on quite l'activit par le bouton de
retour en arrire du tlphone plutt que normalement.

Passage de paramtres et de valeurs de retour


Le passage des paramtres de A B ainsi que des valeurs de retour de B A se font par un Intent en utilisant
sa mthode :
putExtra(String, val)
Le 1er paramtre est un nom (cl) qui permet d'identifier la valeur associe
Le second paramtre est la valeur :
o De type simple (boolean, byte, int, short, long, float, double, char)
o Tableau de types simples
o String
o Tableau de Strings
La rcupration des paramtres dans B se fait en rcuprant le Bundle qui les contient dans l'Intent :
Bundle params = getIntent().getExtras()
puis en utilisant les mthodes getBoolean , getInt, , getBooleanArray, getIntArray de cet
objet selon le type du paramtre rcuprer :
boolean x = params.getBoolean("nom_du_paramtre_x")
int taille = params.getInt("nom_du_paramtre_taille")

boolean[] tab = params.getBooleanArray("nom_du_paramtre_tab")

Le matriel et les capteurs


Envoi d'un SMS
import android.telephony.SmsManager
<uses-permission android:name="android.permission.SEND_SMS" />
On utilise la classe SmsManager dont une instance est obtenue par :
SmsManager gestionnaireSms = SmsManager.getDefault();
Pour envoyer un message on fait :
gestionnaireSms.sendTextMessage("numero", null, "message", null, null);

Utilisation du GPS
import android.location.LocationManager
<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" />
On utilise la classe LocationManager dont une instance est obtenue par :
LocationManager geoloc =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
On lui associe un couteur d'vnements qui recevra les informations de golocalisation par la mthode :
geoloc.requestLocationUpdates(String, long, float, LocationListener)
Le premier paramtre indique le moyen utilis pour la golocalisation, il peut en particulier
prendre les valeurs :
o LocationManager.GPS_PROVIDER pour utiliser le GPS
o LocationManager.NETWORK_PROVIDER pour utiliser la triangulation des
antennes rseau

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

48

Le deuxime paramtre est un entier qui indique l'intervalle minimal de temps (en ms) entre les
notifications. On peut le mettre 0 pour obtenir l'intervalle minimal possible
Le troisime paramtre est un rel qui indique la distance minimale (en mtres) de dplacement
pour provoquer une nouvelle notification. On peut le mettre 0 pour obtenir l'intervalle
minimal possible.
Le dernier paramtre est l'couteur d'vnements qui est un objet d'une classe dfinir par
hritage de LocationListener et par surcharge des mthodes :
o public void onLocationChanged(Location) qui est excute chaque notification
o public void onProviderDisabled(String) qui est excute si le fournisseur de
localisation est dsactiv par l'utilisateur. Le paramtre est le nom de ce fournisseur.
o public void onProviderEnabled(String) qui est excute si le fournisseur de
localisation est activ par l'utilisateur. Le paramtre est le nom de ce fournisseur.
o public void onStatusChanged(String, int, Bundle) qui est excute si l'tat du
fournisseur de localisation change (redevient actif aprs une interruption ). Le
premier paramtre est le nom de ce fournisseur, le deuxime indique son nouvel tat
(OUT_OF_SERVICE, AVAILABLE ou TEMPORARILY_UNAVAILABLE), le dernier
paramtre contient des information supplmentaires sur ce fournisseur.
C'est surtout la premire mthode qui est utile (les autres peuvent tre crites vides). Le
paramtre de cette mthode est un objet de classe Localisation qui contient la position.
Ses principales mthodes sont :
o getLatitude() qui renvoie un rel correspondant la latitude
o getLongitude() qui renvoie un rel correspondant la longitude
o getAltitude() qui renvoie un rel correspondant l'altitude (en mtres)
o getAccuracy() qui renvoie un rel correspondant la prcision de la localisation
(en mtres)
o distanceTo(Location) qui renvoie un rel reprsentant en mtres la distance entre
la position actuelle et celle passe en paramtre.

Appareil photo
import android.hardware.Camera
import android.view.SurfaceView
import android.view.SurfaceHolder
import android.view.SurfaceHolder.Callback
<uses-permission android:name="android.permission.CAMERA" />

Accs l'appareil photo


On dclare l'appareil photo comme une proprit de l'activit par :
private Camera photo;

Prvisualisation
L'appareil photo ne peut fonctionner que s'il dispose d'une zone d'cran pour prvisualiser la photo qu'il va
prendre. On va donc lui associer un lment d'interface de classe SurfaceView qui sera dclar dans le fichier
xml de description de l'interface par :
<SurfaceView
android:name="@id/visualisation"

/>
Auquel on associera un couteur d'vnements pour grer la prvisualisation par :
SurfaceView ecran = (SurfaceView)findViewById(R.id.visualisation);
SurfaceHolder surface = ecran.getHolder();
surface.addCallback(new GestionPrevisualisation());
surface.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Et on crera cet couteur d'vnements par :
private class GestionPrevisualisation implements

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

49

SurfaceHolder.Callback {
public void surfaceCreated(SurfaceHolder surf) {
photo = Camera.open();
try {
photo.setPreviewDisplay(surf);
}
catch (IOException ioe) {
// erreur lors de l'association de la prvisualisation
photo.stopPreview();
photo.release();
}
}
public void surfaceChanged(SurfaceHolder surf, int format,
int largeur, int hauteur) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
if (photo != null) {
photo.stopPreview();
photo.release();
}
}
}

Prise de photo
A chaque prise de photo on doit lancer la prvisualisation et faire la photo en associant un couteur d'vnement
qui rcuprera l'image par :
photo.startPreview();
photo.takePicture(Camera.ShutterCallback, Camera.PictureCallback,
Camera.PictureCallback);
Les paramtres de la mthode takePicture sont les suivants :
Les deux premiers permettent d'associer des couteurs d'vnements pour l'instatnt de prise de
vue et pour la capture d'image non compresse (raw). Si l'on souhaite seulement rcuprer la
photo en jpeg on met null dans ces paramtres.
Le dernier est un objet d'une classe qui implmente l'interface PictureCallback et dont on
surcharge la mthode onPictureTaken qui sera excute lorsque la photo est disponible en
jpeg. Cette mthode reoit deux paramtres :
o un tableau d'octets (byte[]) contenant l'image au format jpeg
o l'appareil photo lui-mme (objet de classe Camera)

Affichage de photo
import android.graphics.drawable.BitmapDrawable
import android.graphics.BitmapFactory
import android.graphics.BitmapFactory.Options
On peut transformer le tableau d'octets reu en paramtre de onPictureTaken en objet de classe
BitmapDrawable qui hrite de Drawable par le code suivant :
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true; // pour librer la mmoire prise par l'image
options.inSampleSize = x; // pour rduire l'image dans un rapport 1/x
BitmapDrawable image = new BitmapDrawable(
BitmapFactory.decodeByteArray(photo, 0, photo.length, options));

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

50

Vibreur
import android.os.Vibrator
<uses-permission android:name="android.permission.VIBRATE" />
Pour accder au vibreur on utilise la classe Vibrator dont une instance est obtenue par :
Vibrator vibreur = (Vibrator)getSystemService(Context.Vibrator_SERVICE);
Puis on peut faire vibrer le tlphone pour une dure donne par la mthode :
vibreur.vibrate(int) o le paramtre est la dure de vibration en ms.

Capteurs
import android.hardware.Sensor
import android.hardware.SensorManager
import android.hardware.SensorEvent
Les types de capteurs disponibles sont les suivants (selon le modle certains capteurs peuvent ne pas tre
disponibles) :
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

Pour accder un capteur on utilise la classe SensorManager dont une instance est obtenue par :
SensorManager gestionnaireCapteurs =
(SensorManager)getSystemService(Context.SENSOR_SERVICE);
Puis on rcupre un capteur particulier par :
Sensor monCapteur = gestionnaireCapteurs.getDefaultSensor(type_de_capteur);
Le paramtre type_de_capteur est l'un des types indiqus ci-dessus.
On lui associe un couteur d'vnements par la mthode :
gestionnaireCapteurs.registerListener(SensorEventListener, Sensor, int)
Le premier paramtre est l'couteur d'vnements qui est un objet d'une classe dfinir par
implmentation de l'interface SensorEventListener et par surcharge des mthodes :
o void onSensorChanged(SensorEvent) qui est excute chaque fois que le
capteur effectue une nouvelle mesure. Le paramtre permet de rcuprer les valeurs
par values.clone() qui renvoie un tableau de rels contenant les mesures (voir
ci-dessous).
o void onAccuracyChanged(Sensor, int) qui est excute si la prcision
du capteur change. Le premier paramtre est le capteur dont la prcision a chang, le
second indique la nouvelle prcision.
Le deuxime paramtre est le capteur auquel on associe l'couteur d'vnements.
Le dernier paramtre est le rythme de mesure (en microsecondes) ou l'une des valeurs
prdfinies
suivantes
:
SENSOR_DELAY_NORMAL,
SENSOR_DELAY_UI,
SENSOR_DELAY_GAME,
ou
SENSOR_DELAY_FASTEST.
SENSOR_DELAY_UI
correspond la valeur la plus adquate pour de l'interface tandis que SENSOR_DELAY_GAME
correspond la valeur la plus adquate pour des jeux.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

51

On peut supprimer un couteur associ un capteur par :


gestionnaireCapteurs.unregisterListener(SensorEventListener, Sensor) le premier
paramtre est l'couteur d'vnements, le deuxime paramtre est le capteur auquel tait associ cet
couteur d'vnements.
Le tableau de valeurs rcupr par la mthode values.clone() contient 1 ou 3 valeurs qui doivent tre
interprtes selon le type de capteur (sa taille est toujours de 3 mais certaines valeurs ne sont pas significatives) :

Type de capteurs
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(1)
SENSOR.TYPE_TEMPERATURE

valeurs
3 valeurs : acclration en X, en Y et en Z
3 valeurs : gravitation en X, en Y et en Z
3 valeurs : vitesse angulaire en X, en Y et en Z
1 valeur : luminosit
3 valeurs : champ magntique en X, en Y et en Z
3 valeurs :
angle par rapport au nord
rotation par rapport l'axe X
rotation par rapport l'axe X
1 valeur : pression atmosphrique
1 valeur : distance capteur/objet (mesur par IR)
1 valeur : temprature

unit
m/s
m/s
radians/s
lux
microtesla
degr

psi 6894,76 Pa
cm
C

(1) : sur certains modles le capteur de proximit se contente de dtecter une prsence. La valeur mesure n'st
que 0 ou la valeur maximale (gnralement 10 cm).

Le multimdia
Android peut utiliser de nombreux formats audio et vido.
Pour le son : 3gp , mp3 , mp4 , ogg , mid et wav
Pour la vido : 3gp et mp4

Jouer un son
import android.media.MediaPlayer
Le fichier contenant le son doit tre plac dans le rpertoire res/raw. Il suffit alors de crer un lecteur audio par :
MediaPlayer lecteur = MediaPlayer.create(Context, int)
1. Le premier paramtre est l'activit elle-mme
2. Le second paramtre est l'identificateur du fichier son obtenu par :
R.raw.nom_du_fichier_son
Les oprations possibles sont alors :
lecteur.start() pour jouer le son
lecteur.pause() pour suspendre le son, il sera repris par start()
lecteur.stop() pour arrter le son
Pour rejouer un son arrt ou termin il faut faire les 3 oprations suivantes :
lecteur.reset();
lecteur.prepare();
lecteur.start();

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

52

La classe MediaPlayer
Les principales mthodes de MediaPlayer sont :

Configuration

prepare() initialisation du player


release() libre les ressources du player ( faire dans la mthode onDestroy de l'activit)
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, le premier paramtre est
l'activit, le second l'Uri dsignant le mdia.
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

Evnements

setOnCompletionListener(MediaPlayer.OnCompletionListener) associe un
couteur d'vnements dont la mthode onCompletion(MediaPlayer) sera appele lorsque le
mdia se termine
setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener)
associe un couteur d'vnements dont la mthode onBufferingUpdate(MediaPlayer, int)
est 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 dont la mthode onPrepared(MediaPlayer) est appele lorsque le
MediaPlayer est prt.
setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener) associe un
couteur d'vnements dont la mthode onSeekComplete(MediaPlayer) est appele lorsque
dplacement dans le mdia est termin.

Afficher une video


import android.widget.VideoView
import android.net.Uri
Remarque : en gnral l'affichage de vidos ne fonctionne pas correctement sur l'mulateur (on a le son mais
l'image est fige ou saccade) pour des raisons d'mulation d'acclration graphique.
Le fichier contenant la vido doit tre plac dans le rpertoire res/raw ou accessible sur une URI. Ce dernier cas
sera dcrit plus loin.
L'interface doit comporter une zone d'affichage pour la vido qui sera dclare dans le fichier xml de dfinition
d'interface par :

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

53

<VideoView android:id="@+id/ecran_video"
android:layout_width="fill-parent"
android:layout_height="fill-parent" />
Le chemin d'accs la vido est dcrit par une Uri :
Uri chemin =
Uri.parse("android.resource://paquetage_de_l_application/"
+R.raw.nom_du_fichier_video);
On va ensuite associer ce mdia la zone d'affichage par :
VideoView lecteur = (VideoView)findViewById(R.id.ecranVideo);
lecteur.setVideoURI(chemin);
lecteur.requestFocus();

La classe VideoView
Les principales mthodes de VideoView sont :

Configuration

setMediaController(MediaController) associe un contrtleur de mdia qui apparatra par


un clic long sur la vido et affiche les boutons de contrle.
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 dont la mthode onCompletion(MediaPlayer) sera appele lorsque le
mdia se termine.

Synthse de parole
import android.speech.tts.TextToSpeech
import android.speech.tts.TextToSpeech.OnInitListener
Android permet de lire haute voix un texte par synthse de parole. Il faut, bien entendu, que le synthtiseur
connaisse la langue du texte. On peut installer des applications permettant d'ajouter des langues.
Pour crer et prparer le synthtiseur :
parle = new TextToSpeech(this, new SynthPret());
Pour attendre que le synthtiseur soit prt on utilise l'couteur d'vnements qui lui a t associ la cration.
Cet couteur peut se contenter de positionner la langue quand le synthtiseur est prt. Son code est le suivant :

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

54

private class SynthPret implements TextToSpeech.OnInitListener {


public void onInit(int status) {
if (status == TextToSpeech.SUCCESS){
parle.setLanguage(Locale.FRANCE); // langue
}
}
}
Autres 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)
Pour synthtiser un texte :
String message = new String("texte a dire");
parle.speak(message, TextToSpeech.QUEUE_FLUSH, null);
Pour ajouter du texte synthtiser pendant la synthse :
String ajout = new String("texte a ajouter");
parle.speak(ajout, TextToSpeech.QUEUE_ADD, null);
Pour arrter la synthse de son :
parle.stop(); // arrt de la synthse
Pour arrter le synthtiseur de son :
parle.shutdown(); // arrt du synthtiseur
On met gnralement ceci dans la mthode onDestroy de l'activit :
public void onDestroy() {
if (parle != null) {
parle.stop();
parle.shutdown();
}
super.onDestroy();
}

Internet
import java.net.URL
import java.io.InputStreamReader
import java.io.BufferedReader
import java.io.BufferedInputStream
import java.net.HttpURLConnection
<uses-permisson android:name="android.permission.INTERNET" />

Rcuprer un fichier texte depuis une URL


Ce type d'accs se fait de faon classique par un flux ouvert sur l'URL :
try {
URL url = new URL("mettre ici l'URL du fichier texte");
BufferedReader in = new BufferedReader(new
InputStreamReader(url.openStream()));
String str;
while ((str = in.readLine()) != null) {
// traiter la ligne lue (qui est dans str)
}
in.close();
}
catch (MalformedURLException e) {}
catch (IOException e) {

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

55

Rcuprer une image depuis une URL


On peut fabriquer un Drawable qui pourra tre mis dans un ImageView ou un ImageButton partir d'une
image prise sur une URL par :
BitmapDrawable img;
HttpURLConnection connexion = (HttpURLConnection)new URL("mettre ici
l'url de l'image").openConnection();
connexion.connect();
BufferedInputStream lecture = new BufferedInputStream
(connexion.getInputStream());
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = x; // pour rduire la taille en 1/x
img = BitmapFactory.decodeStream(lecture, null, opts);

Jouer un son depuis une URL


Le procd est exactement le mme que pour un son plac dans le rpertoire res/raw la seule diffrence porte sur
la construction du MediaPlayer. Au lieu de :
MediaPlayer lecteur = MediaPlayer.create(Context, int)
Il suffit de faire :
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
}

Jouer une vido depuis une URL


Le procd est exactement le mme que pour une vido place dans le rpertoire res/raw la seule diffrence
porte sur l'Uri utilise. Au lieu de :
Uri chemin =
Uri.parse("android.resource://paquetage_de_l_application/"
+R.raw.nom_du_fichier_video);
Il suffit de faire :
Uri chemin = Uri.parse("http://domaine.sous_domaine
/rep1/nom_video.3gp");

Utiliser des services WEB


Pour accder aux service WEB ,l'accs internet doit tre autoris par l'ajout dans le fichier AndroidManifest
d'une balise :
<uses-permission android:name="android.permission.INTERNET" />

Trouver les coordonnes gographiques de lieux


Android offre une classe permettant de trouver les coordonnes d'un lieu dcrit par une adresse ou une adresse
partir de ses coordonnes gographiques.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

56

La classe Geocoder
import android.location.Geocoder
import java.util.Locale
import java.util.List
import android.location.Address

Construction

Geocoder(Context, Locale) le premier paramtre est gnralement l'activit elle-mme. Le


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

Recherches
Toutes ces mthodes renvoient une liste (classe List de java) contenant des objets de classe Address
(ATTENTION : cette liste peut tre vide si la recherche ne donne aucun rsultat) :
getFromLocation(double, double, int) renvoie les adresses connues proches du point dfini par ses
coordonnes gographiques passes par les 2 premier paramtres (latitude et longitude exprimes en
degrs). Le dernier paramtre permet de limiter la taille de cette liste.
getFromLocationName(String, int) renvoie les adresses connues proches du point dfini par le
nom pass en premier paramtre (c'est une chane du type "3 Alle du parc Montaury, 64600, Anglet").
Le second paramtre permet de limiter la taille de cette liste.
getFromLocationName(String, int, double, double, double, double) cette mthode fonctionne
comme la prcdente mais permet de limiter la zone de recherche un rectangle. Les 3me et 4me
paramtres indiquent la longitude et la latitude du coin infrieur gauche de ce rectangle tandis que les
5me et 6me paramtres en indiquent la longitude et la latitude du coin suprieur droit.

La classe Address
import android.location.Address
Un objet de classe Address correspond une localisation gographique et contient des chanes de caractres
correspondant aux lignes d'adresse de cette localisation (voir exemple ci-dessous).

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 type double)


getLongitude() renvoie la longitude en degrs (rel type double)
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()

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

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

57

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

GoogleMaps
Prparation du projet
Pour pouvoir utiliser GoogleMaps il faut que le projet ait t cre avec comme SDK cible le SDK "Google APIs"
et non le SDK "Android x.x".
Si l'on utilise un mulateur de terminal il faudra galement le configurer pour qu'il fonctionne avec ce SDK.
La bibliothque GoogleMaps doit tre intgre l'application par l'ajout dans le fichier AndroidManifest d'une
balise : <uses-library android:name="com.google.android.maps" />
L'activit doit hriter de MapActivity et non de Activity. Elle doit implmenter la mthode
isRouteDisplayed propre MapActivity qui sert au serveur pour des statistiques concernant l'affichage
d'itinraires. On peut se contenter du code suivant :
protected boolean isRouteDisplayed() {
return false;
}

Cl d'utilisation
L'accs Google maps ncessite une cl que l'on obtient comme suit :
Avoir un compte Google ou en crer un en allant sur https://www.google.com/accounts/
Obtenir l'empreinte md5 du certificat de l'application. Pour ce faire :
Ouvrir une fentre DOS et se mettre dans le rpertoire du compilateur java (par exemple :
C:\Program Files\Java\jdk1.6.0_07\bin)
Taper la commande :
keytool list alias androiddebugkey keystore chemin storepass android keypass android
dans laquelle chemin dsigne le fichier debug.keystore qui se trouve dans le rpertoire de l'utilisateur
(pour trouver ce rpertoire depuis Eclipse utiliser le menu Windows Preferences : Android : Build
rubrique Android debug keystore).
Cette commande affiche un certificat MD5 de la forme :
androiddebugkey, 2 oct. 2010, PrivateKeyEntry, Empreinte du certificat (MD5) :
CA:78:06:9E:1A:27:20:4D:28:78:6B:F3:A5:D2:BF:78
Obtenir la cl en allant sur la page :
http://code.google.com/intl/fr/android/maps-api-signup.html
Le code prcdent est saisi dans "My certificate's Fingerprint" et on clique sur le bouton "Generate
API Key". Aprs s'tre authentifi on rcupre une cl qui est une chane de caractres (faites un
copier/coller dans un fichier texte pour ne pas la perdre).
Cette cl fonctionnera pour toutes vos applications.

Afficher des cartes dans une application


Les cartes sont affiches dans un widget MapView

La classe MapView
Cette classe hrite de ViewGroup. Elle a donc les mmes proprits que ViewGroup
Exemple de fichier XML :
<com.google.android.maps.MapView android:id="@+id/carte"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

58

android:apiKey="mettre ici la cl obtenue"


/>

Mthodes de la classe MapView


import com.google.android.maps.MapView

Construction

mapView(Context, String) le premier paramtre est gnralement l'activit elle-mme, le


second paramtre est la cl.

Apparence

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

Contenu

getLatitudeSpan() renvoie l'angle de latitude visible (entre le haut et le bas de la carte affiche)
en millionimes de degrs
getLongitudeSpan()renvoie l'angle de longitude visible (entre la gauche et la droite de la carte
affiche) en millionimes de degrs
getMapCenter() renvoie un objet de classe GeoPoint indiquant le centre de la carte. Cet objet
possde les mthodes getLatitudeE6() et getLongitudeE6() qui renvoient ses coordonnes
gographiques en millionimes de degrs.
getMaxZoomLevel() renvoie un entier indiquant la valeur maximale de zoom possible
getZoomLevel()renvoie un entier indiquant la valeur actuelle de zoom
isSatellite()renvoie un boolen indiquant si la carte est en mode satellite (true)
isStreetView()renvoie un boolen indiquant si la carte est en mode rues (true)
isTraffic()renvoie un boolen indiquant si la carte est en mode trafic (true)

Projection
Lorsqu'une carte est affiche il est possible de rcuprer les coordonnes gographiques d'un point par
rapport sa position l'cran (par exemple lorsque l'utilisateur touche la carte). Ceci peut se faire par la
mthode fromPixels(int, int) de l'objet de classe Projection renvoy par la mthode
getProjection() de l'objet de classe MapView affich. Cette mthode prend en paramtres les
coordonnes (x et y) d'un pixel l'cran et renvoie un objet de classe GeoPoint correspondant la
position. . Cet objet possde les mthodes getLatitudeE6() et getLongitudeE6() qui renvoient
ses coordonnes gographiques en millionimes de degrs.

La classe MapController
Cette classe hrite sert piloter la carte affiche. On l'obtient par la mthode getController() de l'objet
MapView.

Mthodes de la classe MapController


import com.google.android.maps.MapController

Dplacements

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; le 1er paramtre est la latitude, le second la longitude.

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

59

setCenter(GeoPoint) positionne la carte sur le point pass en paramtre sans faire d'animation.
La classe GeoPoint possde un constructeur acceptant en paramtres ses coordonnes gographiques
en millionimes de degrs
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

Dveloppement d'applications pour Android - M. Dalmau, IUT de Bayonne-Pays Basque

60

Vous aimerez peut-être aussi