37
Interface fournissant des informations globales sur
l’environnement de l’application:
C’est une classe abstraite implémentée par le système
Android
Il permet d’accéder aux principales ressources de
l’application
Obtenir le contexte courant d’une application
Context c = getApplicationContext(): Contexte global de
l’application .
Context c = [Link] / getContext(): Contexte d’une
activité ou un service
Description abstraite d’une action à exécuter:
Action : Action à exécuter
Data : Données sur lesquelles l’action va opérer
Exemple : Action_DIAL [Link]
Autres attributs :
41
Category : Précise la catégorie de l’activité demandée
Type: Préciser le type de contenus des données de
l’intention
Extras : Informations additionnelles envoyées à l’action
(contenu d’un email, par exemple)
Il existe deux principaux types d’intentions :
42
Explicite: Spécifie les composants qui précisent la
classe exacte qui doit être exécutée
(setComponant (nom) ou setClass(context, class))
Implicite : Ne spécifie pas le composant mais
fournit assez d’informations permettant au
système de déterminer les composants
nécessaires correspondant à cette action.
Intent i = new Intent();
43
Intent i = new Intent(action:String)
Intent i = new Intent(action:String, uri:Uri)
Intent i = new Intent (context:Context,
class:Class<?>)
44
Les intentions peuvent être utilisées pour
transiter des données entre deux activités
putExtra(nom:String, valeur:Object)
getxxxExtra(nom:String)
xxx dépend du type de données: Int, String,
StringArray
45
addCategory(category: String)
setDataAndType(uri:Uri, mime:String)
46
Actions
– [Link] appel téléphonique
– [Link] affichage de données pour édition par
l’utilisateur
– [Link] activité principale d’une application
– [Link] affichage de données
– [Link].WEB_SEARCH recherche sur le WEB
Catégories
– [Link] activité pouvant être lancée
explicitement
– [Link] peut afficher une
information désignée par un lien
– [Link] activité proposée au
lancement par Android
47
– [Link] activité associée dans un onglet
d’interface (TabHost)
Lancer explicitement une activité
Intent demarre = new Intent(context, [Link]);
startActivity(demarre);
Lancer implicitement une activité
– Exemple : lancer un navigateur sur une page :
Uri chemin = [Link]("[Link]
Intent naviguer = new Intent(Intent.ACTION_VIEW, chemin);
startActivity(naviguer);
48
– Exemple : appeler un n° de téléphone :
Uri numero = [Link]("[Link]
Intent appeler = new Intent(Intent.ACTION_CALL, numero);
startActivity(appeler);
La classe Intent permet de passer des paramètres à
l’activité appelée et d’en récupérer les valeurs en retour
Ajouter des paramètres (types simples ou tableaux)
[Link](String, val)
Le 1er paramètre est un nom (clé)
Le second paramètre est la valeur :
Rédiger par M. MILONGO SURYA HANISCH
069628907
• De type simple (boolean, int, short, long, float, double,
char)
• Tableau de types simples
L’activité appelée pourra récupérer ces paramètres par
leur nom
L’activité lancée récupère l’objet de classe Bundle
contenant les paramètres par :
Bundle params = getIntent().getExtras()
• Les paramètres sont récupérés dans ce Bundle par ses
méthodes : – getBoolean(String)
50
– getInt(String)
– getBooleanArray(String)
–…
Exemple :
String myId = getIntent().getStringExtra(« id»);
Une application Android n’est pas seulement fait de codes
mais aussi de ressources statiques (images, sons, text
statique,….)
Tout projet Android a un dossier de ressources (res/)
contenant les ressources du projet (bitmap, xml,…) ◦
Rédiger par M. MILONGO SURYA HANISCH
069628907
/res/drawable images ([Link].nom_de_la_ressources)
◦ /res/layout Design des vues ([Link].nom_de_la_vue)
◦ /res/values/strings Chaînes de caractères, tableaux, valeurs
numériques … ([Link].nom_chaine, [Link])
◦ /res/anim description d’animations([Link].nom_animation_)
◦ /res/menus Menus pour l’application ([Link].nom_menu)
◦ /res/values/color Code de couleurs ([Link].nom_couleur)
◦ …
52
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mon application</string>
<string name="server_url">[Link]
string>
<integer-array name=“codes_postaux“>
<item>64100</item>
<item>33000</item>
</integer-array>
<string-array name= “planetes“>
<item>Mercure</item>
<item>Venus</item>
</string-array>
<dimen name= “taille“>55px</dimen> </resources>
Rédiger par M. MILONGO SURYA HANISCH
069628907
L’ensemble ressources sont modélisés par la
classe « [Link] » et les sous dossiers par des
classes internes à R
Chaque ressource est un attribut de la classe
représentant le sous dossier dans lequel il est
déclaré
54
Dans le code (java), on obtient une instance de cette classe
par getResources()
Principales méthodes de la classe Resources (le paramètre est
un identifiant défini dans R de la forme [Link]) :
◦ boolean getBoolean(int)
◦ int getInteger(int) ◦
int[] getArray(int)
◦ String getString(int)
◦ String[] getStringArray(int)
◦ int getColor(int)
◦ float getDimension(int)
55
◦ Drawable getDrawable(int)
Exemple : String titre = [Link]().getString([Link].ma_chaine);
Mais dans une activité on peut faire plus simplement :
String titre = getString([Link].ma_chaine);
Accéder aux vues :
getResources().getLayout([Link].nom_layout);
Accéder aux valeurs :
String chaine = getResources().getString ([Link].nom_string); String[]
tableau= getResources(). getStringArray([Link].nom_array);
Accéder aux images :
56
Drawable monImage = getResources().getDrawable([Link].nom_image)
Référencement d’une ressource dans une
autre ressource. La forme générale est :
"@type/identificateur"
Exemple :
@string/string_name
@drawable/icon , @color/ma_couleur
57
Les interfaces (Layout) permettent de dessiner
la vue tel qu’elle doit s’afficher à l’utilisateur.
Il existe deux possibilités de développer des
interfaces :
Code java
Fichier XML
Android recommande l’utilisation des fichiers
XML pour définir les interfaces.
Une interface XML peut être associée à
une activité (vue) grâce à la méthode
setContentView (identifiant)
Exemple : setContentView([Link]);
58
Activity = Ecran Android (GUI). Il représente les
fenêtres ou les écrans affichés. Une Activity
contient des views.
View = composant graphique (Widget). C’est la
classe de base, tous les contrôles d’interface sont
dérivés de View.
View Group : c’est une extension de la classe
View. Il contient plusieurs Views enfants. Son
extension permet de :
[Link]éer des contrôles composites interconnectées;
[Link] les gestionnaires de layouts pour
disposer les contrôles dans une Activities;
59
Identifiant : android:id="@+id/mon_ident"
android:layout_height, android:layout_width :
fill_parent / match_parent / wrap_content
fill_parent : Remplit toute la place du parent
wrap_content : remplit la place que nécessite
le contenu
match_parent : remplit la place qui reste dans
60
le parent
android:background: "@color/blue/#000FFFF"
android:visibility : visible / invisible/gone
61
Marges internes
android:layout_paddingBottom ,
android:layout_paddingLeft ,
android:layout_paddingRight ,
android:layout_paddingTop
62
Marges externes
android:layout_marginBottom ,
android:layout_marginLeft ,
android:layout_marginRight ,
android:layout_marginTop
63
Ce sont des vues permettant de définir une
prédisposition pour d’autres vues qu’ils
contiennent:
- FrameLayout
- AbsoluteLayout
- LinearLayout
- TableLayout
64
- RelativeLayout
- LinearLayout: dispose les éléments de
façon linéaire (vertical ou horizontal) -
RelativeLayout: Dispose les vues enfants
les uns par rapport aux autres -
TableLayout: disposition matricielle
(ref:table HTML)
65
Les interfaces sont définies généralement
dans des fichiers XML (cela nous évite d’avoir
à créer des instances explicitement)
66
Android studio génère
automatiquement une ressource
correspondant à l’interface dans le fichier
[Link] ([Link] [Link])
Une interface peut être associée comme
vue graphique à une activité.
67
public class MainActivity extends
Activity {
@Override
Protected void onCreate(Bundle
savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_accueil);
68
}
}
Les interfaces peuvent
être récupérées et modifiées
dynamiquement.
LinearLayout l = (LinearLayout)findViewById([Link].id_accueil);
[Link]([Link]);
69
Réutilisation d’interfaces : Une interface peut
inclure une autre interface
<?xml version="1.0" encoding="utf---8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<include
android:id="@+id/include01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
layout="@layout/acceuil" >
</include>
70
</LinearLayout>
Définit le positionnement linéaire (horizontall ou vertical) des vues filles
<?xml version="1.0" encoding="utf---8"?>
<LinearLayout xmlns:android="[Link]
android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_nom"
</LinearLayout>
71
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
<?xml version="1.0" encoding
="utf---8"?>
<LinearLayout xmlns:android="[Link]
android"
android:layout_width="match_parent"
android:layout_height="match_parent"
72
android:orientation=« horizontal" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_nom"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
73
android:ems="10"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
</LinearLayout>
Positionner les éléments de l’interface les uns par rapport aux autres
<?xml version="1.0" encoding="utf---8"?>
<RelativeLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
74
android:orientation=« horizontal" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_nom"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10«
android:layout_toRightOf="@+id/textView1"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
</RelativeLayout>
75
Tableau de positionnement des vues en ligne
de TableRow (similaire au <table> <tr>
<td> de HTML)
TableRow hérite de LinearLayout avec
alignement automatique des colonnes sur
chaque ligne
Propriétés de [Link]
76
◦ layout_column: indice de départ de la colonne
(à partir de 0)
◦ layout_span: nombre de colonnes occupées
TextView : pour les labels texte;
EditText : Champ de saisie;
ListView : Liste de vues horizontales;
Button : bouton standard;
CheckBox : case à cocher;
Spinner : Liste déroulante
ImageView : image
RadioButton : radio (choix exclusif)
…….
77
TimePicker : Choix de date
ProgressBar : Bar de progression
Une vue peut être déclarée dans un fichier
XML
<TextView Identifiant de la
vue
android:id="@+id/le_texte"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello"
78
Texte à afficher référencé
dans les ressources
android:layout_gravity="center"
/>
Alignement de la vue dans le gabarit
79
Une vue peut être aussi créée dynamiquement
public class Activity2 extends Activity {
public void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
LinearLayout gabarit = new LinearLayout(this);
[Link]([Link]); //centrer les éléments
graphiques
[Link]([Link]); //disposition
horizontal !
TextView texte = new TextView(this);
[Link]("Programming creation ofinterface !");
[Link](texte);
80
setContentView(gabarit);
}
}
Les instances de vues déclarées dans les
fichiers XML sont créées automatiquement
par le système et peuvent être récupérées
dans le code Java.
81
View v= findViewById([Link]);
Sachant le type de la vue
Button b =
(Button)findViewById([Link]);
Il est possible d’accéder aux propriétés des
widgets en lecture et/ou en écriture
EditText edit = (EditText)findViewById([Link]);
[Link]("Voici ta nouvellevaleur");
[Link]([Link].hello_world);
82
[Link]();
Les évènements permettent de gérer les actions utilisateurs sur les
vues:
Pour gérer les évènements sur les vues, il suffit d’ajouter un écouteur
[Link](new [Link]()
@Override
public void onClick(DialogInterface dialog, int
which) {
// Du code ici
}
});
83
[Link](new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int
start, int before, int count) {
// do something here
}
);
Il est possible de valider le contenu
Des champs d’un formulaire
[Link]([Link]());
84
[Link]([Link]());
85
75