Vous êtes sur la page 1sur 172

Dveloppement d'applications

pour Android

M. Dalmau IUT de Bayonne Pays Basque

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

Architecture dAndroid

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

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

Architecture dAndroid

Une machine virtuelle java


Dalvik (une JVM par application)
Code spcifique Android

Architecture dAndroid

Des gestionnaires pour les applications + une API en java


Gestion des fentres, des activits, des ressources

API pour dveloppement des programmes

Architecture dAndroid
Les applications
(Activits)

Dveloppement dapplications
pour Android

Production de logiciel
AndroidManifest

Chane de compilation
Code source
java
.java

Bytecode
.class

Binaire Dalvik
.dex

Ressources

IDE
Eclipse
ou
Netbeans
+
plugins

SDK
Android
+
outils

Machine
virtuelle
Dalvik

Constitution de
l'application
Application
.apk

Tlchargement

Terminal

API
Android
Environnement d'excution

Environnement de dveloppement

Dvelopper pour Android


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

Les ressources sont tlcharges avec lapplication


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

LAPI nest pas totalement celle de java (classes redfinies (par


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

Le SDK Android
Tlchargeable sur :
developper.android.com/sdk
sous la forme dun zip ou dun fichier
dinstallation
Propose le SDKManager qui
permet de tlcharger les
plateformes et outils :

Android versions xx
Google API versions xx
Outils (tools et platform-tools)

Quelques outils du SDK Android


Accessibles partir dune ligne de commande (fentre DOS)
adb permet la connexion au terminal (smartphone ou simulateur)
pour :

Transfrer des fichiers (push / pull)


Travailler en ligne de commande unix (shell)
Installer une application (install)
Paramtrer le rseau (forward)
Dboguer une application (logcat)

dx transforme le bytecode java en code Dalvik


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

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

Dvelopper avec Eclipse


Espace de travail

Remarque : les paramtrages dEclipse sont lis lespace de travail


nouvel espace nouveaux paramtres

Dvelopper avec Eclipse


Projet
Android
(Menu File New
Android Project)

Nom
SDK
Paquetage
(au moins 2 niveaux)

Dvelopper avec Eclipse

Zone ddition

Explorateur

Vues
Hirarchie
Dclarations

Etats (erreurs, excution )

Crer un terminal virtuel (simulateur)


(Menu Windows Android SDK and AVD Manager)

Crer un terminal virtuel (simulateur)

Paramtrage:
Nom
SDK
Taille carte SD
Format dcran
Matriel

Terminal virtuel ou smartphone

Terminaux connects

Terminaux disponibles

Le terminal virtuel

Contrle du terminal (DDMS)

Etats (mmoire, fichiers )


Processus

Traces et erreurs dexcution

Structure dun projet


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

res contient les ressources (images,


descriptions dinterfaces, valeurs)
Organis en sous dossiers par types

AndroidManifest dcrit les


proprits de lapplication

...

Le fichier AndroidManifest

Gnr par Eclipse, contient la description de lapplication


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

On modifiera ce fichier pour dclarer les lments de lapplication, les


permissions, etc.

Le Fichier AndroidManifest
Modifiable directement ou par des formulaires

Rubriques du fichier
AndroidManifest

Manifest

Nom du paquetage
Versions
SDK

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

Permissions

Accs aux capteurs


Accs au rseau
Accs la tlphonie

Instrumentation (pour les tests)

Les ressources

Les ressources
Application embarque tout doit tre dans le fichier
.apk tlcharg
Le rpertoire res contient toutes les ressources qui
seront mises dans le apk :

drawable-hdpi (images en haute dfinition)


drawable-ldpi (images en basse dfinition)
drawable-mdpi (images en moyenne dfinition)
layout (description en XML des interfaces)
values (dfinitions en XML de constantes : chanes, tableaux,
valeurs numriques )
anim (description en XML danimations)
menus (description en XML de menus pour lapplication)
xml (fichiers XML utiliss directement par lapplication)
raw (tous les autres types de ressources : sons, vidos, )

On peut ajouter dautres sous rpertoires

Crer des ressources valeurs

Les ressources de type valeur sont dcrites dans


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

Type
Nom
Valeur

Les noms (identificateurs)


servent a les dsigner :
Dans dautres fichiers XML
Dans le code

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

Utilisation des ressources


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

<string name="machaine">Contenu de cette chaine</string>

</resources>

Rfrencement dune ressource dans le code. La forme


gnrale est : R.type.identificateur
Par exemple : R.string.machaine
Fait rfrence la mme chaine

La classe Resources
Permet laccs aux ressources rpertories dans R
On obtient une instance de cette classe par getResources() de lactivit
Principales mthodes de la classe Resources (le paramtre est un
identifiant dfini dans R de la forme R.type.nom) :

boolean getBoolean(int)
int getInteger(int)
int[] getArray(int)
String getString(int)
String[] getStringArray(int)
int getColor(int)
float getDimension(int)
Drawable getDrawable(int)

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

Utilisation des ressources


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

Mise en place dinterfaces supplmentaires


Par les classes LayoutInflater ou MenuInflater

Accs direct une valeur ou une ressource :


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

Uri (Uniform Resource Identifiers)


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

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

Codage en chane de caractres


toString()

Les applications

Structure dune application


Activit (android.app.Activity)

Programme qui gre une interface graphique

Service (android.app.Service)

Programme qui fonctionne en tche de fond sans interface

Fournisseur de contenu (android.content.ContentProvider)


Partage dinformations entre applications

Ecouteur dintention diffuses (android.content.BroadcastReceiver) :


Permet une application de rcuprer des informations gnrales (rception
dun SMS, batterie faible, )

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

Dclaration des lments dans


AndroidManifest.xml
Activit
<activity>
<intent-filter>
les savoir-faire
</intent-filter>
</activity>

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

Ecouteur dintention
diffuse
<receiver>
<intent-filter>
les savoir-faire
</intent-filter>
</receiver>

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

Application Android
Une activit = un programme + une interface
Un service = un programme sans interface
Une application =

Une activit principale


Eventuellement une ou plusieurs activits secondaires
Eventuellement un ou plusieurs services
Eventuellement un ou plusieurs couteurs dintentions diffuses
Eventuellement un ou plusieurs fournisseurs de contenu

Contenu du fichier AndroidManifest


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

Activit Android
Classe qui hrite de Activity ou dune classe drive de
Activity (par exemple de MapActivity pour utiliser Google
maps, ListActivity ou TabActivity pour des interfaces
particulires)
On surcharge certaines mthodes qui sont appeles par
Android pour dfinir le comportement (mme principe que
les applets) :

onCreate
onDestroy
onStart
onPause
onResume
onStop
onRestart

lors de la cration
lorsque lactivit se termine
lorsque lactivit dmarre ou redmarre
lorsque lactivit nest plus en premier plan
lorsque lactivit revient en premier plan
lorsque lactivit nest plus visible
lorsque lactivit redevient visible

Cycle de vie dune activit


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

Lorsquune activit a t tue, si on revient dessus elle


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

Cycle de vie dune


activit

L'activit
dmarre

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

Le processus
est tu

on Restart()

Active

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

onPause()

Aprs lexcution de
onResume

Suspendue

Une autre
activit passe
en premier plan

une autre
application a besoin
de la mmoire

Etats principaux :

L'activit passe
en premier plan

Aprs lexcution de
onPause

Arrte
L'activit n'est
plus visible

onStop()

onDestroy()

L'activit est
termine

Aprs lexcution de
onStop

Termine
Aprs lexcution de
onDestroy

Les interfaces

Pensez vos interface pour un


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

Le dfilement se fait par touch/gliss


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

Lcran peut tre tourn


Tous les smartphones nont pas la mme dfinition dcran

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

Par description dans des fichiers xml (forme dclarative


statique)
Une interface est un arbre dont la racine est lcran et
les feuilles les lments de linterface (boutons, textes,
cases cocher, )

View
ViewGroup

Hirarchie partielle
de classes pour les
interfaces

FrameLayout
DatePicker
TimePicker
ScrollView
HorizontalScrollView
LinearLayout
TableLayout
RadioGroup
RelativeLayout
AdapterView
AbsListView
ListView
GridView
AbsSpinner
Spinner
Gallery
TextView

View
ViewGroup
TextView

EditText
AutoCompleteTextView
Button
CompoundButton
CheckBox
ToggleButton

Lgende

RadioButton

Trait double = conteneurs ou groupes

DigitalClock
Chronometer

Gris = lments dinteraction (wigets)

ImageView
ImageButton
Progressbar
AbsSeekBar
RattingBar
SeekBar
AnalogClock

Dfinir une interface en XML


Dfinition de linterface

Espace de
nommage
dAndroid
(impos)

<?xml version="1.0" encoding="utf-8"?>


<!-- Commentaire
-->
<Classe_du_conteneur_principal
xmlns:android="http://schemas.android.com/apk/res/android"
proprits du conteneur principal
>
Lorsquil sagit
<Classe de conteneur ou d'lment d'interface
proprits du conteneur ou de l'lment d'interface
dun conteneur il
/>
doit tre dcrit

avec son contenu


<Classe de conteneur ou d'lment d'interface
proprits du conteneur ou de l'lment d'interface
/>
</Classe_du_conteneur_principal>

Dfinir une interface en XML


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

<Classe de conteneur ou d'lment d'interface


proprits du conteneur ou de l'lment d'interface
/>
</Classe_du_conteneur>

Crer une interface partir dun


fichier XML
Dans lactivit principale
setContentView(R.layout.nom_du_fichier_xml)

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

Units de mesure dans les fichiers


XML
Dans les fichiers XML, les dimensions des lments
dinterface (taille, marges, ) peuvent tre exprimes en
diverses units :

Pixels (px)
Pouces (in)
Millimtres (mm)
Points (pt) = 1/72 pouce
Pixel densit indpendante (dp) 1 dp = 1 pixel pour un cran
de 160 dpi
Pixel taille indpendante (sp) relatif la taille des polices de
caractres

Dans les fichiers XML les units sont exprimes sous la


forme : 24.5mm ou 65px

Couleurs dans les fichiers XML


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

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

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

Proprit communes aux lments


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

Proprit communes aux lments


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

Fond
android:background couleur ou une image de fond

Taille
android:minHeight et android:minWidth dimensions minimales

Placement des lments contenus (dfini pour chaque lment)


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

Proprit communes aux lments


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

Marges internes (dfini pour chaque lment)


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

Marges externes (dfini pour chaque lment)


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

Proprit communes aux lments


dinterface (conteneurs et widgets)
Prise en compte des vnements
Prise en compte des clics sur llment
android:clickable Autorise ou interdit la prise en compte des clics

Mthode correspondante : setClickable(boolean)

Prise en compte des clics longs sur llment


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

Mthode correspondante : setLongClickable(boolean)

On ajoutera ensuite un couteur dvnements


pour les traiter

Exemple dinterface simple


Un LinearLayout contenant 2 lments placs lun sous lautre
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Spinner andoid:id="@+id/planetes"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<ProgressBar andoid:id="@+id/attente"
android:layout_width=" wrap_content "
android:layout_height="wrap_content"
/>
</LinearLayout>

Exemple dinterface simple


Un LinearLayout contenant 3 lments placs lun
cot de lautre
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ToggleButton
/>
<CheckBox
/>
<RadioButton
/>

</LinearLayout>

Exemple dinterface complexe


Un LinearLayout vertical contenant 2 lments + 2 LinearLayout horizontaux
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Spinner />
<ProgressBar />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button />
<ImageButton />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ToggleButton />
<CheckBox />
<RadioButton />
</LinearLayout>
</LinearLayout>

Les Contenants

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

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

Exemple avec LinearLayout


LinearLayout
vertical
LinearLayout
horizontal
LinearLayout
horizontal

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

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

Chaque lment ajout dans un TableLayout indiquera le nombre de


colonnes quil occupe en mettant dans ses proprits :
android:layout_span (par dfaut 1)

Exemple avec TableLayout


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent" >
<TableRow>
<TextView

/>
<EditText android:id="@+id/nom"

/>
<Button android:id="@+id/envoyer"

/>
</TableRow>
<TableRow>
<ProgressBar android:id="@+id/attente"
android:layout_span="2"

/>
<Button android:id="@+id/annuler"

android:text="Abandonner"
/>
</TableRow>
</TableLayout>

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

Placement par rapport aux autres lments


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

Exemple avec RelativeLayout


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

/>
<ProgressBar android:id="@+id/attente"
android:layout_below="@+id/nom"

/>
<Button android:id="@+id/annuler"
android:layout_toRightOf="@+id/attente"
android:layout_below="@+id/nom"

/>
</RelativeLayout>

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

ATTENTION : En raison de lcran tactile le dfilement


porte sur llment le plus externe (le plus haut dans
larbre de linterface)

Les Groupes

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

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

ListView (contenu)
En XML (texte seulement)
android:entries="@array/maliste" dfinit le
contenu de la liste partir du contenu d'un
fichier xml plac dans res/values/ et qui a la
forme :

Dans le code (lments quelconques)

<?xml version="1.0" encoding="utf-8"?>


<resources>
<string-array name="maliste">
<item>premier lment</item>
<item>deuxime lment</item>

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

On utilise un gestionnaire de contenu (Adapter)


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

Exemple de ListView

En XML

Dans le XML dinterface

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

Dans le XML de valeurs

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

<item>Neptune</item>
</string-array>

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

GridView

Fonctionne comme ListView mais permet une prsentation en plusieurs colonnes


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

Dans le code (mme principe)


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

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

/>
<RadioButton

/>
</RadioGroup>

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

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

Les Composants dinterface


(Widgets)

Placement des composants d'interface

Placement dans le conteneur


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

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

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

Placement des composants d'interface


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

Dans le cas dun LinearLayout ce paramtre ne permet pas de


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

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

Position et dimensions de limage


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

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

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

TextView et EditText

TextView est normalement utilis pour afficher un texte


tandis que EditText lest pour saisir du texte

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

TextView et EditText

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

Taille et aspect du texte


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

TextView et EditText

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

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

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

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

Les boutons
Button
Mmes paramtres que TextView

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

Les lments deux tats


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

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

Liste de choix (Spinner)


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

<item>Neptune</item>
</string-array>
</resources>

Choix de date et dheure


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

TimePicker

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

Animation (si indtermin)


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

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

Valeurs (si dtermin)


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

Formes des ProgressBar


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

On ne peut pas changer la couleur

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

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

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

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

Les vnements (interaction)

Traitement des vnements


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

qui permettent de leur associer des couteurs dvnements


Certains lments ont des couteurs spcifiques

Traitement des vnements


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

Evnements gnraux
Evnement

Association
Classe

Mthode
Paramtres

Clic

setOnClickListener
View.OnClickListener

Clic long

setOnLongClickListener
onLongClick(View)
View.OnLongClickListener lment concern

Clavier
setOnKeyListener
View.OnKeyListener

Touch

setOnTouchListener
View.OnTouchListener

onClick(View)
lment concern

onKey(View, int, KeyEvent)


lment concern
Code clavier
Evnement clavier
onTouch(View, MotionEvent)
lment concern
Evnement de touch

Evnements spcifiques
ListView , GridView et Gallery
Evnement
sur un
lment
Clic

Association
Classe

setOnItemClickListener
AdapterView.OnItemClickListener

Clic long

setOnItemLongClickListener
AdapterView.OnItemLongClickListener

Slection

setOnItemSelectedListener
AdapterView.OnItemSelectedListener

Mthode
Paramtres
onItemClick(AdapterView, View,
int, long)
Gestionnaire de contenu
lment concern
Rang de llment
Identifiant de llment
onItemLongClick(AdapterView,
View, int, long)
Idem
onItemSelected (AdapterView,
View, int, long)
Idem
onNothingSelected(AdapterView)

Evnements spcifiques
Spinner et AutoCompleteTextView
Evnement
sur un
lment
Slection

Association
Classe

setOnItemSelectedListener
AdapterView.OnItemSelectedListener

Mthode
Paramtres
onItemSelected (AdapterView,
View, int, long)
Elment permettant le choix
lment concern
Rang de llment
Identifiant de llment
onNothingSelected(AdapterView)

Evnements spcifiques
TextView et EditText
Evnement

Association
Classe

Fin de saisie setOnEditorActionListener


TextWatcher

Modification

Saisie

addTextChangedListener
TextChangedListener

setKeyListener
KeyListener

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

beforeTextChanged(CharSequence, int, int, int)


afterTextChanged(CharSequence, int, int, int)
Texte
Point de dpart de la modification
Nombre de cars remplacs
Nombre de cars de remplacement

onKeyDown(View, Editable, int, KeyEvent)


onKeyUp(View, Editable, int, KeyEvent)
Elment concern
Texte
Code de la touche
Evnement clavier

Evnements spcifiques
DatePicker
Evnement
de choix

Choix

Association
Classe
init
DatePicker.OnDateChangedListener

Mthode
Paramtres
onDateChanged(DatePicker,
int, int, int)
Elment concern
Anne
Mois
Jour

TimePicker
Evnement
de choix

Choix

Association
Classe
setOnTimeChangedListener
TimePicker.OnTimeChangedListener

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

Evnements spcifiques
SeekBar
Evnement

Association
Classe

Curseur
dplac
setOnSeekBarChangeListener
SeekBar.OnSeekBarChangeListener

Mthode
Paramtres
onProgressChanged(
SeekBar, int, boolean)
Elment concern
Position du curseur
Action de lutilisateur

Dbut de
dplacement

onStartTrackingTouch(
SeekBar)

Fin de
dplacement

onStopTrackingTouch(
SeekBar)

Elment concern

Elment concern

Evnements spcifiques
RatingBar
Evnement

Valeur
modifie

Mthode
Paramtres
onRatingChanged(RatingBar,
setOnRatingBarChangeListener
RatingBar.OnRatingBarChangeListener float, boolean)
Elment concern
Association
Classe

Valeur choisie
Action de lutilisateur

Chronometer
Evnement

Incrmentation

Association
Classe

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

Notifications

La classe Toast
Texte qui apparat en premier plan puis disparat au bout
d'un temps donn

Cration d'un Toast


Toast.makeText(Context, String, int) renvoie l'objet de classe Toast cr.
Le premier paramtre est l'activit
Le deuxime paramtre est le message afficher
Le dernier paramtre indique la dure d'affichage les seules valeurs possibles
sont : Toast.LENGTH_SHORT (2 secondes) ou Toast.LENGTH_LONG (5
secondes).

Positionnement d'un Toast


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

Affichage d'un Toast


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

Menus

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

Contiennent des rubriques sous la forme texte et/ou image


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

</menu>

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

</menu>
</item>

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

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

case R.id.nom_du_sous_choix_1:
// traitement du sous choix 1
return true;

default:
return super.onOptionsItemSelected(item);
}
}

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

Cration dans la mthode onCreateContextMenu


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

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

case R.id.nom_du_sous_choix_1:
// traitement du sous choix 1
return true;

default: return super.onContextItemSelected(item);


}
}

Couleurs et images

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

Couleurs prdfinies

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

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

La classe BitmapDrawable
Spcialisation de Drawable pour les images

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

Ces crations utilisent des options (BitmapFactory.Options)

inSampleSize pour rduire limage


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

Navigation entre activits

Navigation entre activits


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

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

On peut ventuellement passer des paramtres et rcuprer


des valeurs de retour de lactivit lance

Invocation implicite
Activit

Intent

Intent

Android

Appelante

Filtre

Filtre

Activit

Activit

Filtre
Activit
choisie

Android choisit lactivit lancer en fonction de lIntent mis par lactivit


appelante et des filtres associs aux activits prsentes
Lactivit choisie reoit cet Intent
Lactivit choisie renvoie un Intent lappelante lorsquelle se termine

Intention diffuse
Intent

Filtre

Filtre

Ecouteur
dintentions
diffuses

Ecouteur
dintentions
diffuses

Android

Filtre
Ecouteur
dintentions
diffuses

Android envoie lIntent toutes les applications ayant un


couteur dintentions diffuses associ des filtres
correspondants cet Intent

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

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

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

Peut contenir les paramtres passs lactivit lance


Peut contenir les valeurs renvoyes par lactivit lance

Mthodes de la classe Intent

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

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

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

Contenu

getAction() renvoie laction (String)


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

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

Filtres dintentions

Dans le AndroidManifest.xml chaque activit ou service est associ un


ou plusieurs filtres dintentions qui permettent Android de choisir une
activit (en mode implicite)

Forme gnrale :
<activity android:name=".Nom_De_La_Classe_De_L_Activit"

>
<intent-filter>
<action android:name=nom_d_action_1 />
.
<action android:name=nom_d_action_N />
<category android:name=nom_de_categorie_1 />

<category android:name=nom_de_categorie_N />


<data android:mimeType=nom_de_type_mime
android:scheme=protocole://hote:port/chemin />
/>
</intent-filter>

<intent-filter>

</intent-filter>
</activity>

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

En mode implicite Android utilise les informations


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

Quelques valeurs prdfinies

Actions

android.intent.action.CALL appel tlphonique


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

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

En gras le cas dune activit principale dapplication


La plupart des valeurs prdfinies correspondent des activits disponibles
sur Android (appel tlphonique, navigateur )

Exemple

On a crit une application contenant une activit de traduction


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

Un dveloppeur ayant cette application installe pourra lancer une


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

Lancer une activit


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

Lancer implicitement une activit


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

Exemple : appeler un nde tlphone :


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

Lancer une activit et obtenir un retour

Lancement (dans lactivit A)


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

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


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

Traitement du code de retour (dans lactivit A)


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

}
}

Passer des paramtres lactivit


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

Lactivit appele pourra rcuprer ces paramtres par


leur nom :

Rcuprer les paramtres dans


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

Les paramtres sont rcuprs dans ce Bundle par ses


mthodes :

getBoolean(String)
getInt(String)

getBooleanArray(String)

auxquelles on passe la cl en paramtre

Placer des valeurs de retour dans


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

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

getBooleanExtra(String)
getIntExtra(String)

getBooleanArrayExtra(String)

Permissions dune activit

Permissions

Une activit ne peut accder certaines ressources matrielles quavec


une permission

Les permissions apparaissent dans le AndroidManifest

Elles sont visibles par lutilisateur (scurit)

Elles concernent :

La golocalisation (GPS)
Les accs aux contacts et l'agenda du tlphone
Les modifications de paramtres (orientation, fond dcran )
Les appels tlphoniques
Lenvoi et rception de SMS/MMS
Laudio
Le rseau (dont laccs Internet)
Le matriel (bluetooth, appareil photo, )

Surveiller vos applications


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

Permissions dans AndroidManifest


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

Le matriel et les capteurs

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

Il faut avoir positionn la permission :


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

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

Il faut avoir positionn la permission :


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

Tlphonie (envoi de SMS)


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

Tlphonie (Rception de SMS)


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

</intent-filter>
</receiver>

2. Ecriture de lcouteur dintention diffuses par hritage de BroadcastReceiver


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

Golocalisation par GPS


1.

Acces au GPS par :


getSystemService(Context.LOCATION_SERVICE)

2.

Associer un couteur dvnements par :


requestLocationUpdate en prcisant :

Le mode (GPS ou rseau)

Le rythme

La distance minimale

3.

Rcuprer les informations dans lcouteur

4.

Latitude, longitude, altitude


Prcision

Possibilit de calculer une distance

Il faut avoir positionn les permissions :


<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

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

On peut enregistrer le tableau doctets reu par onPictureTaken


dans un fichier ou utiliser BitmapFactory pour le convertir en image
Il faut avoir positionn la permission :
<uses-permission android:name="android.permission.CAMERA" />

Vibreur (classe Vibrator)


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

Faire vibrer par :


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

Il faut avoir positionn la permission :


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

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

Utilisation des capteurs


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

Rcupration dun capteur par :


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

Mesures par capteurs


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

Capteur auquel est associ lcouteur


Rythme des mesures :

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

Rcupration des mesures


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

Multimdia

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

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

MediaPlayer (utilisation)

Configuration

Controle

prepare() initialisation du player


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

pause() met en pause


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

Etat

getCurrentPosition() renvoie la position actuelle dans le mdia (en ms)


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

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

setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener)
associe un couteur d'vnements
onBufferingUpdate(MediaPlayer, int) appele lors de la mise jour du buffer.
Le second paramtre est le pourcentage de remplissage du buffer.

setOnPreparedListener(MediaPlayer.OnPreparedListener) associe un
couteur d'vnements
onPrepared(MediaPlayer) appele lorsque le MediaPlayer est prt.

setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener)
associe un couteur d'vnements
onSeekComplete(MediaPlayer) appele lorsque dplacement dans le mdia
est termin.

Vido

Mettre un VideoView dans linterface


<VideoView android:id="@+id/ecran_video"
android:layout_width="fill-parent"
android:layout_height="fill-parent" />

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


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

Associer un lecteur vido la vue:


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

Si on a mis setMediaController, lors dun clic long sur la vue une fentre de
contrle apparat avec :

Un bouton Play/pause
Un bouton Avance rapide
Un bouton Recul rapide
Un curseur indiquant la position courante et permettant de se dplacer

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

VideoView
Configuration

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

setMediaController(MediaController) associe un contrtleur de mdia


setVideoPath(String) dfinit le mdia par un chemin de fichier
setVideoURI(Uri) dfinit le mdia par une Uri

canPause() renvoie true si le media peut tre mis en pause


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

Evnements

setOnCompletionListener(MediaPlayer.OnCompletionListener) associe un couteur


d'vnements
mthode onCompletion(MediaPlayer) appele lorsque le mdia se termine.

Synthse de parole

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

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


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

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

Ajouter du texte synthtiser pendant la synthse :


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

Arrter la synthse de son :


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

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

Arrt du synthtiseur de son :


parle.shutdown(); // arrt du synthtiseur

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


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

Internet

Ressources sur Internet


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

Crer un flux de lecture sur la ressource :


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

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


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

Ressources sur Internet


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

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

Services WEB

Golocalisation par service WEB


La classe Geocoder permet de retrouver des adresses (type adresse
postale) partir :

De coordonnes GPS
Dun nom (par exemple : "parc Montaury, Anglet

La recherche peut tre limite un pays ou une zone gographique


Utilise la classe Address qui contient :

Coordonnes GPS
Nom de pays
Nom de ville
Code postal
Adresse complte (n, rue, )

Il faut avoir positionn la permission :


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

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

Exemple dutilisation du service de


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

Renvoie une liste ne contenant qu'un seul objet de classe Address


dont le contenu est le suivant :
latitude : 43,4800424
longitude : -1,5093202
nom de lieu : Alle du Parc Montaury
nom de ville : Anglet
code postal : 64600
nom de pays : France
Deux lignes d'adresse qui sont :
Alle du Parc Montaury
64600 Anglet

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

Contenu

getLatitude() renvoie la latitude en degrs (rel)


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

Google Maps (prrequis)

Le SDK utilis doit tre "Google API "

Le fichier AndroidManifest doit intgrer la bibliothque Google Maps :


<uses-library android:name="com.google.android.maps" />

L'activit doit hriter de MapActivity

Une seule carte est possible par activit

L'activit doit surcharger la mthode :


protected boolean isRouteDisplayed() {
return false;
}
Utilise pour les statistiques de Google

Il faut obtenir une cl dutilisation auprs de Google :


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

Google Maps (affichage)


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

MapView permet de dfinir lapparence de la carte :


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

Google Maps (dplacements)


Les dplacements dans la cartes sont grs par un MapController

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

Utilisation :

animateTo(GeoPoint) positionne la carte sur le point pass en


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

Google Maps (projection)


la classe Projection permet de rcuprer les coordonnes gographiques dun
point de la carte affiche :

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

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

ATTENTION : GeoPoint utilise des coordonnes gographiques entires en


millionimes de degr alors que le GPS travaille en coordonnes relles en
degrs

Formatage du texte

SpannableStringBuilder
Les widgets contenant du texte hritent de TextView
Les mthodes dajout de texte (setText et append) prennent en
paramtre un CharSequence
String hrite de CharSequence mais le format est alors celui associ
au widget (dans le XML par exemple)
Pour formater le texte on utilise SpannableStringBuilder qui hrite
de CharSequence mais permet de dfinir zone par zone :

La police
La taille
Ltirement horizontal
La couleur du fond et du texte
Le style (gras, italique )
Le soulignement

Texte format

Cration dun texte formatable :


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

Association dun format une zone du texte :


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

Les 2me et 3me paramtres de setSpan indiquent le point de dpart et de fin


de la zone la chane de caractres laquelle le format est appliqu

Format possibles (classes pour le premier paramtre) :

ForegroundColorSpan (int couleur)


BackgroundColorSpan (int couleur)
AbsoluteSizeSpan (int taille, boolean pixel_a_densit_dpendante)
RelativeSizeSpan (double echelle)
ScaleXSpan (float echelle)
UnderlineSpan ()
TypeSpaceSpan (" {normal, sans, serif, monospace } " )
StyleSpan (android.graphics.Typeface.{BOLD, BOLD_ITALIC, ITALIC, NORMAL })

Et le reste ?
Beaucoup de choses ont t vues mais beaucoup ne lont pas t :

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