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

getAddressLine(int) renvoie la ligne d'adresse dsigne par son index pass en paramtre (en

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