Académique Documents
Professionnel Documents
Culture Documents
pour Android
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
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.
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
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 />
<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" />
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" />
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.
<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.
Uri
Les Uri sont un moyen utilis pour dsigner des resources que ce soit sur Internet ou localement
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
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
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
deleteOnExit() le fichier sera supprim lorsque la machine virtuelle java se terminera si elle se termine
normalement
Etats
Noms
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
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
/>
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
/>
10
AnalogClock
11
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.
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
Fond
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
Construction
Placement
Position
Fond
Rafraichissement
13
Evenements
Focus
La classe ViewGroup
Proprits positionnables en XLM pour les lments placs l'intrieur
Taille
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)
Construction
Elments du groupe
Marges
setPadding(int, int, int, int) dfinit les marges (en pixels). Les paramtres sont, dans
l'ordre : gauche, haut, droite, bas.
14
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
15
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.
Couleurs ou images
16
Construction
Fond
La classe LinearLayout
Place les lments les uns cot des autres horizontalement ou verticalement.
Construction
Position et disposition
La classe AbsoluteLayout
Place les lments selon des coordonnes.
17
Construction
Construction
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.
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)).
Construction
Aspect
La classe RelativeLayout
Permet de placer des lments les uns relativement aux autres.
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"/
Construction
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).
/>
</RadioGroup>
20
Construction
Selection
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.
<item>dernier lment</item>
</string-array>
Sparateurs
Type de choix
Construction
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
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
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
GridView
Fonctionne comme un ListView mais place les lments en tableau avec ascenseur vertical seulement si
ncessaire.
Couleurs
Slection
23
Construction
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
Evnements
Mmes mthodes que pour ListView
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.
Construction
Contenu
25
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
Evnements
Mmes mthodes que pour ListView
Animation
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);
}
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;
}
}
}
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"
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.
Contenu
Dimensions
29
Construction
Aspect
TextView
Affichage de texte a priori non ditable (pour du texte ditable utiliser EditView).
Contenu
android:text="texte afficher"
android:hint="initial" dfinit le texte afficher quand la zone est vide
30
Dimensions
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
31
Couleurs et images
Construction
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
32
Evnements
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"
/>
Construction
Manipulation du texte
33
AutoCompleteTextView
Texte ditable proposant de la compltion. Possde les mmes
paramtres XML que EditText plus :
Construction
Aspect et contenu
Evnements
Button
Mmes paramtres XML que TextView
Exemple de fichier XML :
<Button android:id="@+id/compte"
34
android:text="Count"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
Construction
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"
/>
Construction
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
Construction
Etat
Aspect
35
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"
/>
Construction
Etat
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"
/>
Construction
Etat
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.
36
Construction
Contenu
Slection
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 :
37
Construction
Contenu
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"
/>
Construction
Contenu
Evnements
setOnTimeChangedListener(TimePicker.OnTimeChangedListener)
dfinit
un
couteur d'vnements lorsqu'une heure est choisie. La mthode onTimeChanged(TimePicker,
38
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).
Aspect
Construction
39
Valeurs
Aspect
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.
Construction
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 :
40
Construction
Valeurs
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).
AnalogClock
Exemple de fichier XML :
<AnalogClock android:id="@+id/horloge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Construction
DigitalClock
Mmes paramtres XML que TextView
Exemple de fichier XML :
<DigitalClock android:id="@+id/digitalclock"
android:layout_width="wrap_content"
41
android:layout_height="wrap_content"
/>
Construction
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 :
Construction
Utilisation
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
42
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).
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.
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()
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
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
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;
}
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);
45
case R.id.nom_du_sous_choix_1:
// traitement du sous choix 1
return true;
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 />
<intent-filter>
46
</intent-filter>
</activity>
}
}
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")
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.
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
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" />
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
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));
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.
51
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();
52
La classe MediaPlayer
Les principales mthodes de MediaPlayer sont :
Configuration
Controle
Etat
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.
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
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
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 :
54
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" />
55
56
La classe Geocoder
import android.location.Geocoder
import java.util.Locale
import java.util.List
import android.location.Address
Construction
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
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
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.
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"
58
Construction
Apparence
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.
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.
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
60