Вы находитесь на странице: 1из 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 Constitution de
l'application
Chane de compilation
Code source Binaire Dalvik
java Bytecode Application
.dex
.java .class .apk

Ressources
Tlchargement

Machine
IDE virtuelle
Eclipse SDK Dalvik
ou Android Terminal
Netbeans + API
+ outils Android
plugins
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 Vues


Hirarchie
Dclarations

Explorateur

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 : Type
Nom
<?xml version="1.0 encoding= utf-8 ?>
Valeur
<resources>
<color name= "coulfond>#AA7B03</color>
<integer name= limite>567</integer>
<integer-array name= codes_postaux>
<item>64100</item>
Les noms (identificateurs)
<item>33000</item>
</integer-array> servent a les dsigner :
<string name= mon_titre>Un titre</string> Dans dautres fichiers XML
<string-array name= planetes> Dans le code
<item>Mercure</item>
<item>Venus</item>
</string-array>
<bool name=actif>true</bool>
<dimen name taille>55px</dimen>
</resources>
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 Ecouteur dintention
<activity> diffuse
<intent-filter> <receiver>
les savoir-faire <intent-filter>
</intent-filter> les savoir-faire
</activity> </intent-filter>
Service </receiver>
<service> Fournisseur de contenu
<intent-filter> <provider>
les savoir-faire <grant-uri-permission />
</intent-filter> <path-permission />
</service> </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>
<manifest> <intent-filter>
Pour chaque service . . .
<uses-sdk />
</intent-filter>
<uses-permission /> Gnral
</service>
<application> <receiver>
<activity> Pour chaque <intent-filter>
<intent-filter> couteur ...
<action /> dintentions </intent-filter>
diffuses </receiver>
<category />
<provider>
<data /> Pour chaque
fournisseur de <grant-uri-
</intent-filter> permission />
contenu
</activity> </provider>
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 lors de la cration
onDestroy lorsque lactivit se termine
onStart lorsque lactivit dmarre ou redmarre
onPause lorsque lactivit nest plus en premier plan
onResume lorsque lactivit revient en premier plan
onStop lorsque lactivit nest plus visible
onRestart lorsque lactivit redevient visible
Cycle de vie dune activit
Android se rserve le droit de tuer le processus unix
dune activit sil ny a plus assez de ressources
(mmoire). Les rgles sont les suivantes :
Une activit en premier plan nest tue que si cest elle qui
consomme trop de ressources.
Une activit en arrire plan ou non visible peut tre tue.

Lorsquune activit a t tue, si on revient dessus elle


est relance (onCreate)
On peut sauvegarder ltat (cest--dire les proprits) dune
activit (dans onPause) pour le retrouver lorsquelle elle est
recre par le paramtre transmis onCreate
L'activit
dmarre
Cycle de vie dune
L'utilisateur
revient sur
l'activit
onCreate()
activit
Etats principaux :
onStart() on Restart()

Le processus
est tu
onResume Active
L'activit passe
en premier plan Aprs lexcution de
L'activit est
en cours onResume
Une autre
activit passe
Suspendue
Aprs lexcution de
en premier plan

une autre
application a besoin
de la mmoire
onPause()
L'activit passe
en premier plan onPause
Arrte
L'activit n'est
plus visible
Aprs lexcution de
onStop()
onStop
Termine
onDestroy() Aprs lexcution de
onDestroy
L'activit est
termine
Les interfaces
Pensez vos interface pour un
smartphone
Ecran tactile de petite taille
Eviter les interfaces trop touffues (on ne peut pas agrandir lcran
comme on agrandit une fentre)
Eviter les lments cliquables trop petits (il faut pouvoir cliquer avec le
doigt mme si on a des gros doigts)
Eviter les lment cliquables trop tasss (il faut pouvoir cliquer sur le
bon lment mme si on vise mal)

Le dfilement se fait par touch/gliss


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

Lcran peut tre tourn


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

Par description dans des fichiers xml (forme dclarative


statique)

Une interface est un arbre dont la racine est lcran et


les feuilles les lments de linterface (boutons, textes,
cases cocher, )
View
ViewGroup
FrameLayout
DatePicker
TimePicker
Hirarchie partielle
de classes pour les
ScrollView
HorizontalScrollView
LinearLayout

interfaces
TableLayout
RadioGroup
RelativeLayout
AdapterView
AbsListView
ListView
GridView View
ViewGroup
AbsSpinner
Spinner

TextView
Gallery
TextView
EditText
AutoCompleteTextView
Button
CompoundButton
CheckBox
ToggleButton Lgende
RadioButton
DigitalClock
Chronometer
Trait double = conteneurs ou groupes
Gris = lments dinteraction (wigets)
ImageView
ImageButton
Progressbar
AbsSeekBar
RattingBar
SeekBar
AnalogClock
Dfinir une interface en XML
Dfinition de linterface Espace de
nommage
<?xml version="1.0" encoding="utf-8"?> dAndroid
<!-- Commentaire
(impos)
-->
<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 Lorsquil sagit
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
proprits du conteneur Pour chaque
> 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)
<?xml version="1.0" encoding="utf-8"?>
En XML (texte seulement) <resources>
<string-array name="maliste">
android:entries="@array/maliste" dfinit le
<item>premier lment</item>
contenu de la liste partir du contenu d'un <item>deuxime lment</item>
fichier xml plac dans res/values/ et qui a la
forme : <item>dernier lment</item>
</string-array>
</resources>
Dans le code (lments quelconques)
On utilise un gestionnaire de contenu (Adapter)
setAdater(Adapter) pour associer la ListView

Soit de classe prdfinie (ArrayAdapter , SimpleAdapter, CursorAdapter)


ArrayAdapter(Context, type) le second paramtre est une type prdfini :
android.R.layout.simple_list_item_1 pour une liste choix unique ou
android.R.layout.simple_list_item_multiple_choice pour une liste choix multiple
(une case cocher apparat cot de chaque lment de la liste)
ArrayAdapter.add(Object) pour remplir la liste
Soit de classe personnalise (hritage de BaseAdapter)
Exemple de ListView
En XML
Dans le XML dinterface
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/liste_de_planetes
android:entries ="@array/planetes"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@drawable/separateur"
android:dividerHeight="25px"
android:choiceMode="multipleChoice"
/>

Dans le XML de valeurs


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

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

Dans le code
ListView liste = (ListView) findViewById(R.id.liste_de_planetes);
String[] elements = getResources().getStringArray(R.array.planetes);
ArrayAdapter<String> adaptateur = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice);
for (int i=0; i<elements.length; i++) adaptateur.add(elements[i]);
liste.setAdapter(adaptateur);
GridView
Fonctionne comme ListView mais permet une prsentation en plusieurs colonnes
Exemple
Dans le XML dinterface
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/liste_de_planetes"
android:entries ="@array/planetes"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="2"
android:stretchMode="columnWidth"
android:columnWidth="60dp"
android:gravity="fill_horizontal"
android:choiceMode="multipleChoice"
/>

Dans le code (mme principe)


GridView table = (GridView) findViewById(R.id.liste_de_planetes);
String[] elements = getResources().getStringArray(R.array.planetes);
ArrayAdapter<String> adaptateur = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice);
for (int i=0; i<elements.length; i++) adaptateur.add(elements[i]);
table.setAdapter(adaptateur);
RadioGroup
Pour grouper des boutons radio (ajoute un ascenseur si ncessaire)
Un seul bouton peut tre coch la fois (attention ltat initial qui
nest pris en compte par le RadioGroup que sil est fait par la
mthode check du RadioGroup)
Exemple de fichier XML :
<RadioGroup
android:id="@+id/groupe_de_boutons"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<RadioButton

/>
<RadioButton

/>
</RadioGroup>
Gallery
Normalement utilis pour faire des galeries dimages avec
dfilement horizontal
Proprits supplmentaires
android:animationDuration Pour dfinir la dure de la transition (en ms)
lorsque l'on passe d'un lment l'autre
android:unselectedAlpha Pour dfinir la transparence des lments non
slectionns
Pour remplir une galerie il faut un Adapter (comme pour ListView) mais
que lon doit crire par hritage de la classe BaseAdapter puis
lassocier la galerie par la mthode setAdapter

Exemple de fichier XML :


<Gallery android:id="@+id/magalerie"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:unselectedAlpha="0.5"
/>
Les Composants dinterface
(Widgets)
Placement des composants d'interface
Placement dans le conteneur
Lorsqu'ils sont placs dans un AbsoluteLayout leur position est dfinie par :
android:layout_x="unit"
android:layout_y="unit"
Lorsqu'ils sont placs dans un RelativeLayout leur position est dfinie par rapport
ce contenant et/ou aux autres composants
Lorsqu'ils sont placs dans un autre contenant leur position est dfinie par ce
contenant

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

Marges externes
android:layout_marginBottom="unit" marge externe en bas
android:layout_marginLeft="unit" marge externe gauche
android:layout_marginRight="unit" marge externe droite
android:layout_marginTop="unit" marge externe en haut
Placement des composants d'interface

Occupation du conteneur (sauf Relative et Absolute Layout)


android:layout_gravity="g" (o g peut prendre les valeurs : top, bottom,
left, right, center_vertical, fill_vertical, center_horizontal,
fill_horizontal, center, fill)

On peut combiner (si a a une sens) plusieurs valeurs par |


Par exemple : android:layout_gravity="top|right"

Dans le cas dun LinearLayout ce paramtre ne permet pas de


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

Proprits :
Contenu
android:src Pour dfinir une couleur ou une image.
android:tint Pour dfinir une couleur qui teinte l'image

Position et dimensions de limage


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

Taille
android:maxHeight Pour dfinir la hauteur maximale
android:maxWidth Pour dfinir la largeur maximale
ImageView Exemples
<ImageView android:id="@+id/image"
android:src="@drawable/keithwembley"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxHeight="200px"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
/>

<ImageView android:id="@+id/image"
android:src="@drawable/keithwembley"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxHeight="200px"
android:adjustViewBounds="true"
android:scaleType="fitXY"
/>
TextView et EditText
TextView est normalement utilis pour afficher un texte
tandis que EditText lest pour saisir du texte

Proprits :
Dimensions de texte
android:ems Pour dfinir la taille du texte en caractres
android:maxems Pour dfinir le nombre de caractres des lignes du texte
android:height="unit"
android:maxheight="unit"
android:minheight="unit"
android:width="unit"
android:maxwidth="unit"
android:minwidth="unit"
TextView et EditText
Contenu
android:text="texte a afficher"
android:hint="initial" dfinit le texte afficher quand la zone est vide

Taille et aspect du texte


android:textSize="unit" utiliser de prfrence l'unit sp qui est lie aux polices
android:textScaleX Pour dfinir l'chelle horizontale du texte
android:texteStyle="g" (o s peut tre normal, bold, italic) ces styles peuvent tre
combins par |
android:typeface="s" (o s peut tre normal, sans, serif, monospace)
android:singleLine="b" (o b vaut true ou false) limite le texte une seule ligne
android:lines Pour dfinir le nombre de lignes du texte
android:maxlines Pour dfinir le nombre maximal de lignes du texte
android:minlines Pour dfinir le nombre minimal de lignes du texte
android:lineSpacingExtra Pour dfinir lespace supplmentaire entre les lignes
android:scrollHorizontally Pour aurtoriser ou interdire le dfilement horizontal du
texte
TextView et EditText
Comportement du texte
android:autoLink="a" (o a peut tre : none, web, email, phone, map ou all) indique
si les liens de ce type apparaissant dans le texte sont automatiquement rendus
cliquables.
android:autoText Pour valider ou pas le mode correction du texte
android:capitalize="c" (o c peut tre : none, sentences, words, characters) indique
le type de saisies que le texte mmorise et peut re-proposer.
android:digits Pour indiquer si la saisie n'accepte que du numrique ou pas
android:numerics="x" (o x peut tre integer, signed, decimal) dfinit le mode de
saisie numrique
android:password pour cacher ou pas le texte lors d la saisie
android:phonenumber Pour indiquer si la saisie n'accepte que des n0s de tlphone
android:inputType Pour dfinir le mode de saisie (none, text, textCapCharacters,
textCapWords, textCapSentences, textAutoCorrect, textAutoComplete,
textMultiLine, textUri, textEmailAddress, textEmailSubject, textShortMessage,
textLongMessage, textPersonName, textPostalAddress, textPassword,
textVisiblePassword, textWebEditText, textFilter, textPhonetic,
textWebEmailAddress, textWebPassword, number, numberDecimal,
numberPassword, phone, datetime, date ou time)
TextView et EditText
Affichage
android:cursorVisible Pour rendre visible ou non le curseur
android:editable Pour autoriser ou pas la modification du texte
android:ellipsize="e" (o e peut tre : none, start, middle, end, marquee)
dfinit le mode de csure du texte
android:linksClickable Pour rendre ou pas les liens cliquables
android:textIsSelectable pour autoriser/interdire la slection de texte

Couleurs et images
android:textColor Pour dfinir une couleur au texte
android:textColorHighlight Pour dfinir une couleur de surlignage du texte
android:textColorHint Pour dfinir une couleur au texte par dfaut
android:textColorLink Pour dfinir une couleur aux liens du texte
android:drawableBottom Pour dfinir une couleur ou une image de fond au
texte
AutoCompleteTextView
Cest une spcialisation de EditText pour apporter lauto
compltion

Proprits supplmentaires:
android:completionHint="texte" texte affich en titre du menu droulant
android:completionThreshold Pour dfinir le nombre de caractres taper avant
que la compltion n'entre en action.
android:dropDownHeight="unit" on peut aussi utiliser les constantes fill_parent et
wrap_content, dfinit la hauteur du menu droulant
android:dropDownWidth="unit" on peut aussi utiliser les constantes fill_parent et
wrap_content, dfinit la hauteur du menu droulant
android:dropDownHorizontalOffset Pour dfinir le dcalage horizontal du menu
droulant
android:dropDownVerticalOffset Pour dfinir le dcalage vertical du menu droulant
Les boutons
Button
Mmes paramtres que TextView

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

CheckBox

RadioButton

ToggleButton
android:disabledAlpha pour dfinir la transparence applique lorsque le bouton est inactif
android:textOff Pour dfinir le texte quand le bouton n'est pas allum
android:textOn Pour dfinir le texte quand le bouton n'est pas allum
Liste de choix (Spinner)
Affiche le choix actuel et affiche un RadioGroup
quand on clique dessus pour le changer

Proprits :
android:prompt Pour dfinir le titre de la fentre qui s'ouvre lorsque l'on fait un choix
android:entries="@array/maliste" dfinit le contenu de la liste partir du contenu d'un
fichier xml plac dans res/values/ qui a la forme suivante :

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


<resources>
<string-array name="maliste">
<item>Mercure</item>

<item>Neptune</item>
</string-array>
</resources>
Choix de date et dheure
DatePicker

android:startYear Pour dfinir l'anne de dpart du calendrier affich


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

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

Animation (si indtermin)


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

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

Valeurs (si dtermin)


android:max Pour dfinir la valeur maximale
android:progress Pour dfinir la valeur initiale
android:secondaryProgress Pour dfinir une valeur secondaire (par exemple
celle d'un buffer comme on le voit sur des vidos en streaming)
Formes des ProgressBar
En labsence de paramtre style la forme est circulaire
Pour obtenir dautres forme on utilise le paramtre style :
style="?android:attr/s" o s peut tre :
progressBarStyleHorizontal
progressBarStyleSmall
progressBarStyleLarge

On ne peut pas changer la couleur

SeekBar
C'est un ProgressBar sous forme de barre horizontale dote d'un
curseur permettant de modifier la valeur si on a choisi
android:indeterminate="false"
sinon le curseur ne marche pas et la barre bouge sans arrt.
RatingBar

Paramtres :

android:isIndicator Pour indiquer si l'utilisateur peut modifier la


valeur ou pas (true= non modifiable)
android:numStars Pour dfinir le nombre d'toiles affiches
android:rating Pour dfinir la position initiale
android:stepSize Pour dfinir le pas de progression (on peut
colorier des dtoiles par exemple)
Horloges et Chronomtres
AnalogClock

DigitalClock

Chronometer
android:format="f" (o f est une chane dans laquelle la premire
occurrence de %s sera remplace par la valeur du chronomtre
sous la forme MM:SS ou H:MM:SS)
Les vnements (interaction)
Traitement des vnements
Tous les lments dinterface (conteneurs et widgets)
possdent les mthodes suivantes :
setOnClickListener(View.OnClickListener) associe un couteur
d'vnements aux clics sur la vue
setOnLongClickListener(View.OnLongClickListener) associe un couteur
d'vnements aux clics longs sur la vue
setOnKeyListener(View.OnKeyListener) associe un couteur
d'vnements aux actions clavier sur la vue
setOnTouchListener(View.OnTouchListener) associe un couteur
d'vnements aux touchs sur la vue

qui permettent de leur associer des couteurs dvnements

Certains lments ont des couteurs spcifiques


Traitement des vnements
(les bonnes habitudes)

Quand un widget est modifi la mthode correspondante


de lcouteur dvnements associ est excute

Ceci est vrai que le widget soit modifi par lutilisateur ou


par programme.

Il est donc prfrable de ne mettre en place les couteurs


dvnements quaprs avoir totalement initialis les
widgets pour viter quils ne sexcutent au cours de ces
initialisations
Evnements gnraux
Evnement Association Mthode
Classe Paramtres
Clic setOnClickListener onClick(View)
View.OnClickListener lment concern
Clic long setOnLongClickListener onLongClick(View)
View.OnLongClickListener lment concern
Clavier onKey(View, int, KeyEvent)
setOnKeyListener lment concern
View.OnKeyListener Code clavier
Evnement clavier
Touch setOnTouchListener onTouch(View, MotionEvent)
View.OnTouchListener lment concern
Evnement de touch
Evnements spcifiques
ListView , GridView et Gallery
Evnement Association Mthode
sur un Classe Paramtres
lment
onItemClick(AdapterView, View,
int, long)
Clic setOnItemClickListener Gestionnaire de contenu
AdapterView.OnItemClickListener lment concern
Rang de llment
Identifiant de llment
Clic long setOnItemLongClickListener onItemLongClick(AdapterView,
AdapterView.OnItemLongClickListener View, int, long)
Idem
Slection setOnItemSelectedListener onItemSelected (AdapterView,
AdapterView.OnItemSelectedListener View, int, long)
Idem
onNothingSelected(AdapterView)
Evnements spcifiques
Spinner et AutoCompleteTextView
Evnement Association Mthode
sur un Classe Paramtres
lment
onItemSelected (AdapterView,
setOnItemSelectedListener View, int, long)
Slection Elment permettant le choix
AdapterView.OnItemSelectedListener
lment concern
Rang de llment
Identifiant de llment
onNothingSelected(AdapterView)
Evnements spcifiques
TextView et EditText
Evnement Association Mthode
Classe Paramtres
onEditorAction(TextView, int, KeyEvent)
Fin de saisie setOnEditorActionListener Elment concern
EditorInfo.IME_NULL (si touche Entre)
TextWatcher
Evnement clavier (si touche Entre)
beforeTextChanged(CharSequence, int, int, int)
addTextChangedListener afterTextChanged(CharSequence, int, int, int)
Modification Texte
TextChangedListener Point de dpart de la modification
Nombre de cars remplacs
Nombre de cars de remplacement
onKeyDown(View, Editable, int, KeyEvent)
setKeyListener onKeyUp(View, Editable, int, KeyEvent)
Saisie Elment concern
KeyListener Texte
Code de la touche
Evnement clavier
Evnements spcifiques
DatePicker
Evnement Association Mthode
de choix
Classe Paramtres
init onDateChanged(DatePicker,
DatePicker.OnDateChangedListener int, int, int)
Choix
Elment concern
Anne
Mois
Jour

TimePicker
Evnement Association Mthode
de choix
Classe Paramtres
setOnTimeChangedListener onTimeChanged(TimePicker
TimePicker.OnTimeChangedListener , int, int)
Choix
Elment concern
Heure
Minutes
Evnements spcifiques
SeekBar
Evnement Association Mthode
Classe Paramtres
Curseur onProgressChanged(
dplac SeekBar, int, boolean)
Elment concern
setOnSeekBarChangeListener Position du curseur
SeekBar.OnSeekBarChangeListener Action de lutilisateur
Dbut de onStartTrackingTouch(
dplacement SeekBar)
Elment concern
Fin de onStopTrackingTouch(
dplacement SeekBar)
Elment concern
Evnements spcifiques
RatingBar
Evnement Association Mthode
Classe Paramtres
Valeur setOnRatingBarChangeListener onRatingChanged(RatingBar,
modifie RatingBar.OnRatingBarChangeListener float, boolean)
Elment concern
Valeur choisie
Action de lutilisateur

Chronometer
Evnement Association Mthode
Classe Paramtres
Incrmentation 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
Filtre

Activit Activit
Activit
choisie

Android choisit lactivit lancer en fonction de lIntent mis par lactivit


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

Filtre Filtre
Filtre

Ecouteur Ecouteur
Ecouteur
dintentions dintentions dintentions
diffuses diffuses 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


Latitude, longitude, altitude
Prcision

4. Possibilit de calculer une distance

Il faut avoir positionn les permissions :


<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Appareil photo
La classe Camera permet la prise de photo par takePicture en
associant un couteur dvnement pour rcuprer la photo en raw
ou JPEG. La mthode onPictureTaken de cet couteur est appel
quand la photo est faite, limage est reue en tableau doctets.

Ncessite une prvisualisation par un objet de classe SurfaceView


dans linterface auquel on associe un couteur dvnements pour :
Dmarrer/arrter lappareil photo (mthodes open et release de la
classe Camera)
Lancer/arrter la prvisualisation (mthodes startPreview et
stopPreview de la classe Camera)

On peut enregistrer le tableau doctets reu par onPictureTaken


dans un fichier ou utiliser BitmapFactory pour le convertir en image

Il faut avoir positionn la permission :


<uses-permission android:name="android.permission.CAMERA" />
Vibreur (classe Vibrator)
Peut tre utilis pour alerter lutilisateur (par exemple
dans un service ou un couteur dintentions diffuses qui
na pas dinterface)
Accs au vibreur par :
getSystemService(Context.Vibrator_SERVICE)
Faire vibrer par :
La mthode vibrate(int) de la classe Vibrator
En donnant la dure en ms

Il faut avoir positionn la permission :


<uses-permission android:name="android.permission.VIBRATE" />
Capteurs
Les types de capteurs disponibles sont les
suivants (selon le modle certains capteurs
peuvent ne pas tre disponibles) :

Acclromtre (acclration du priph sur 3 axes)


Gravit (composante de la gravit selon les 3 axes)
Gyroscope (vitesse angulaire de rotation du priph
sur 3 axes)
Lumire (luminosit ambiante)
Champ magntique (champ magntique ambiant
sur 3 axes)
Orientation (angles du priph par rapport aux 3
axes)
Pression (pression exerce sur lcran tactile)
Proximit (dtection de proximit souvent binaire)
Temprature (temprature ambiante)
Utilisation des capteurs
Classe SensorManager dont une instance est obtenue par :
SensorManager gestionnaireCapteurs =
(SensorManager)getSystemService(Context.SENSOR_SERVICE);

Rcupration dun capteur par :


Sensor monCapteur =
gestionnaireCapteurs.getDefaultSensor(type_de_capteur);

Avec type_de_capteur :
Sensor.TYPE_ACCELEROMETER
Sensor.TYPE_GRAVITY
Sensor.TYPE_GYROSCOPE
Sensor.TYPE_LIGHT
Sensor.TYPE_MAGNETIC_FIELD
Sensor.TYPE_ORIENTATION
Sensor.TYPE_PRESSURE
Sensor.TYPE_PROXIMITY
Sensor.TYPE_TEMPERATURE
Mesures par capteurs
Association dun couteur dvnements par :
gestionnaireCapteurs.registerListener(SensorEventListener,
Sensor, int)
Interface SensorEventListener surcharge des mthodes :
void onSensorChanged(SensorEvent) excute chaque fois que le
capteur effectue une nouvelle mesure.
void onAccuracyChanged(Sensor, int) excute si la prcision du
capteur change.
Capteur auquel est associ lcouteur
Rythme des mesures :
SENSOR_DELAY_NORMAL
SENSOR_DELAY_UI (adapt pour interfaces)
SENSOR_DELAY_GAME (adapt pour jeux)
SENSOR_DELAY_FASTEST.
Rcupration des mesures
Par le paramtre de classe SensorEvent de onSensorChanged

SensorEvent a une proprit values dont on fait une copie par


values.clone() le rsultat est un tableau de 3 lments (float)
Selon le cas une seule ou les 3 valeurs sont significatives
Remarque : la copie permet dviter que les valeurs ne soient
modifies par une nouvelle mesure

SensorEvent a galement :
une proprit timeStamp qui indique linstant de la mesure
une proprit accuracy qui indique la prcision de la mesure :
SENSOR_STATUS_ACCURACY_HIGH
SENSOR_STATUS_ACCURACY_LOW
SENSOR_STATUS_ACCURACY_MEDIUM
Multimdia
Audio
Crer un MediaPlayer :
MediaPlayer lecteur = MediaPlayer.create(Context, int)
Le premier paramtre est l'activit elle-mme
Le second paramtre est l'identificateur du fichier son obtenu par :
R.raw.nom_du_fichier_son

Utiliser le MediaPlayer :
lecteur.start() pour jouer le son
lecteur.pause() pour suspendre le son, il sera repris par start()
lecteur.stop() pour arrter le son, il sera repris par :
lecteur.reset();
lecteur.prepare();
lecteur.start();
MediaPlayer (utilisation)
Configuration
prepare() initialisation du player
release() libre les ressources du player ( faire dans la mthode onDestroy de l'aactivit)
reset() rinitialisation du player
setDataSource(String) dfinit le mdia par un chemin de fichier ou une URL
setDataSource(Context , Uri) dfinit le mdia par une Uri
setLooping(boolean) met le player en mode boucle
setVolume(float, float) dfinit le volume (le 1er paramtre est la voie gauche, le second la
voie droite)

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

Etat
getCurrentPosition() renvoie la position actuelle dans le mdia (en ms)
getDuration() renvoie la dure du mdia (en ms)
isPlaying() renvoie true si le media est en cours
isLoopPlaying() renvoie true si le media est en mode boucle
MediaPlayer (vnements)
Evnements
setOnCompletionListener(MediaPlayer.OnCompletionListener) associe un
couteur d'vnements
onCompletion(MediaPlayer) appele lorsque le mdia se termine

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

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

setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener)
associe un couteur d'vnements
onSeekComplete(MediaPlayer) appele lorsque dplacement dans le mdia
est termin.
Vido
Mettre un VideoView dans linterface
<VideoView android:id="@+id/ecran_video"
android:layout_width="fill-parent"
android:layout_height="fill-parent" />

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


Uri chemin = Uri.parse("android.resource://paquetage_de_l_application/"
+R.raw.nom_du_fichier_video);
Associer un lecteur vido la vue:
VideoView lecteur = (VideoView) findViewById (R.id.ecran_video);
lecteur.setVideoURI(chemin);
lecteur.setMediaController(new MediaController(activit)); // facultatif
lecteur.requestFocus();

Si on a mis setMediaController, lors dun clic long sur la vue une fentre de
contrle apparat avec :
Un bouton Play/pause
Un bouton Avance rapide
Un bouton Recul rapide
Un curseur indiquant la position courante et permettant de se dplacer
Sinon, et de toutes faons, on peut tout contrler par programme :
Configuration
VideoView
setMediaController(MediaController) associe un contrtleur de mdia
setVideoPath(String) dfinit le mdia par un chemin de fichier
setVideoURI(Uri) dfinit le mdia par une Uri

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

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

Evnements
setOnCompletionListener(MediaPlayer.OnCompletionListener) associe un couteur
d'vnements
mthode onCompletion(MediaPlayer) appele lorsque le mdia se termine.
Synthse de parole
Crer un synthtiseur :
parle = new TextToSpeech(activit, new SynthPret());

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


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

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

Ajouter du texte synthtiser pendant la synthse :


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

Arrter la synthse de son :


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

Arrt du synthtiseur de son :


parle.shutdown(); // arrt du synthtiseur

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


public void onDestroy() {
if (parle != null) {
parle.stop();
parle.shutdown();
}
super.onDestroy();
}
Internet
Ressources sur Internet
Images
Crer une connexion sur la ressource et se connecter :
HttpURLConnection connexion = (HttpURLConnection) new URL("url de
l'image").openConnection();
connexion.connect();

Crer un flux de lecture sur la ressource :


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

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


BitmapDrawable img;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = x; // pour rduire la taille en 1/x
img = BitmapFactory.decodeStream(lecture, null, opts);
Ressources sur Internet
Son :
On utilise toujours un MediaPlayer mais cr diffremment :
MediaPlayer mp = new MediaPlayer();
try {
mp.setDataSource("http://domaine.sous_domaine/chemin/nom_son.mp3");
mp.prepare();
}
catch (IllegalArgumentException e) {
// Le paramtre de setDataSource est incorrect
}
catch (IllegalStateException e) {
// Le MediaPlayer n'est pas dans l'tat initial
}
catch (IOException e) {
// L'acces l'URL provoque une erreur
}

Vido :
La seule chose qui change cest lUri qui dsigne le mdia
Uri chemin = Uri.parse("http://domaine. sous_domaine /rep1/nom_video.3gp");
Services WEB
Golocalisation par service WEB
La classe Geocoder permet de retrouver des adresses (type adresse
postale) partir :
De coordonnes GPS
Dun nom (par exemple : "parc Montaury, Anglet

La recherche peut tre limite un pays ou une zone gographique

Utilise la classe Address qui contient :


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

Il faut avoir positionn la permission :


<uses-permission android:name="android.permission.INTERNET" />
Localisation
Cration
Geocoder(activit, Locale) le second paramtre indique la zone gographique
concerne, il peut prendre les valeurs (Locale.FRANCE, Locale.CANADA,
Locale.UK, Locale.US ). Omis si l'on ne souhaite pas limiter la localisation.

Recherches
getFromLocation(double, double, int) renvoie les adresses connues proches du
point dfini par ses coordonnes gographiques (latitude et longitude exprimes
en degrs). Le dernier paramtre permet de limiter la taille de la liste.

getFromLocationName(String, int) renvoie les adresses connues proches dun


point dfini par un nom (chane du type "parc Montaury, 64600, Anglet"). Le
second paramtre permet de limiter la taille de cette liste.

getFromLocationName(String, int, double, double, double, double) fonctionne


comme la prcdente mais permet de limiter la zone de recherche un rectangle.
longitude et latitude du coin infrieur gauche de ce rectangle et longitude et
latitude du coin suprieur droit.

Toutes ces mthodes renvoient une liste (classe List de java) contenant des objets
de classe Address
Exemple dutilisation du service de
localisation
Le code suivant :
Geocoder localisateur = new Geocoder(this, Locale.FRANCE);
List<Address> liste = localisateur.getFromLocationName("Parc Montaury,
Anglet", 10);

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


dont le contenu est le suivant :
latitude : 43,4800424
longitude : -1,5093202
nom de lieu : Alle du Parc Montaury
nom de ville : Anglet
code postal : 64600
nom de pays : France
Deux lignes d'adresse qui sont :
Alle du Parc Montaury
64600 Anglet
La classe Address
Construction
Address(Locale) le paramtre indique la zone gographique concerne, il
peut prendre les valeurs (Locale.FRANCE, Locale.CANADA,
Locale.UK, Locale.US ). Ce dernier paramtre peut tre omis si l'on
ne souhaite pas limiter la localisation.
Contenu
getLatitude() renvoie la latitude en degrs (rel)
getLongitude() renvoie la longitude en degrs (rel)
getFeatureName() renvoie le nom du lieu
getLocality() renvoie le nom de la ville
getPostalCode() renvoie le code postal
getCountryName() renvoie le nom du pays
getAddressLine(int) renvoie la ligne d'adresse dsigne par son index
pass en paramtre (en commenant 0). Renvoie null s'il n'y a rien
correspondant l'index. On peut connatre le nombre de lignes
d'adresse disponibles par la mthode : getMaxAddressLineIndex()
Google Maps (prrequis)
Le SDK utilis doit tre "Google API "

Le fichier AndroidManifest doit intgrer la bibliothque Google Maps :


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

L'activit doit hriter de MapActivity

Une seule carte est possible par activit

L'activit doit surcharger la mthode :


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

Il faut obtenir une cl dutilisation auprs de Google :


Avoir un compte Google
Obtenir la signature de lapplication par la commande keytool de java
Rcuprer la cl avec cette signature sur :
http://code.google.com/intl/fr/android/maps-api-signup.html
Google Maps (affichage)
La carte est affich dans un widget MapView :
<com.google.android.maps.MapView android:id="@+id/carte"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:apiKey="mettre ici la
cl obtenue" />

MapView permet de dfinir lapparence de la carte :


displayZoomControls(boolean) affiche le contrle de zoom. Le
paramtre permet de donner le focus ce contrle (true)
setBuiltInZoomControls(boolean) autorise (true) ou invalide
(false) le contrle de zoom
setSatellite(boolean) affichage en mode satellite ou plan
setStreetView(boolean)affichage avec ou sans visualisation des
rues
setTraffic(boolean)affichage avec ou sans visualisation du traffic
Google Maps (dplacements)
Les dplacements dans la cartes sont grs par un MapController

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

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

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

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

ATTENTION : GeoPoint utilise des coordonnes gographiques entires en


millionimes de degr alors que le GPS travaille en coordonnes relles en
degrs
Formatage du texte
SpannableStringBuilder
Les widgets contenant du texte hritent de TextView

Les mthodes dajout de texte (setText et append) prennent en


paramtre un CharSequence

String hrite de CharSequence mais le format est alors celui associ


au widget (dans le XML par exemple)

Pour formater le texte on utilise SpannableStringBuilder qui hrite


de CharSequence mais permet de dfinir zone par zone :
La police
La taille
Ltirement horizontal
La couleur du fond et du texte
Le style (gras, italique )
Le soulignement
Texte format
Cration dun texte formatable :
SpannableStringBuilder texte = new SpannableStringBuilder("chaine formater");

Association dun format une zone du texte :


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

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


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

Format possibles (classes pour le premier paramtre) :


ForegroundColorSpan (int couleur)
BackgroundColorSpan (int couleur)
AbsoluteSizeSpan (int taille, boolean pixel_a_densit_dpendante)
RelativeSizeSpan (double echelle)
ScaleXSpan (float echelle)
UnderlineSpan ()
TypeSpaceSpan (" {normal, sans, serif, monospace } " )
StyleSpan (android.graphics.Typeface.{BOLD, BOLD_ITALIC, ITALIC, NORMAL })
Et le reste ?
Beaucoup de choses ont t vues mais beaucoup ne lont pas t :

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

Вам также может понравиться