Chapitre 2 + TP2
Chapitre 2 + TP2
Chapitre 2 + TP2
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
Contenu du chapitre
1. Interfaces et ressources
2. Dispositions
3. Composants d’interface
4. Styles
5. Exercice TP2
android:id = @+id/nom_identifiant
La syntaxe suivante permet d’accéder à l’identifiant d’un élément depuis un fichier JAVA :
R.id.nom_identifiant, ou depuis un fichier XML : @id/nom_identifiant.
Les activités de l’application constituées des traitements et interactions à effectuer sur les
éléments graphiques. Pour créer une nouvelle activité en JAVA, il fallait respecter les points
suivants :
- L’activité doit être déclarée dans le manifeste de l’application.
- L’activité doit être une classe fille de la classe mère Activity.
- Au minimum, la méthode onCreate de la classe Activity doit être surchargée dans la
nouvelle classe à créer.
- Faire un appel à la méthode setContentView pour faire la liaison entre l’activité et
l’interface graphique.
Prenons l’exemple d’une interface créée dans le fichier module.xml. Pour pouvoir la lier à une
activité, la méthode onCreate doit contenir au minimum le code ci-dessous :
1
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
@ Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState) ;
setContentView (R.layout.module) ;
}
2.2.2. Ressources
Les ressources représentent les éléments constituant l’application, comme les images, vidéo,
texte…etc. Les ressources consistent aussi des descriptions en fichiers XML des éléments de
l’applications. Le répertoire res d’une application mobile développée sous Android contient
toutes les ressources de l’application. La figure 2.1 présente le répertoire res d’une application
Android.
2
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
Le tableau 2.1 présente une description des différents types de ressources du répertoire res.
Ressource Description
Le répertoire res/values contient des fichiers XML (ex. colors.xml, strings.xml, styles.xml).
Les ressources de type value sont déclarées dans ces fichiers de la manière ci-dessous (voir la
figure 2.2). La figure 2.3 présente des exemples des fichiers colors.xml, strings.xml, styles.xml
<resources>
…
<type_ressource name="identificateur_ressource"> valeur_ressource </type_ressource>
…
</resources>
3
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
Fichier colors.xml
Fichier strings.xml
<resources>
<string name="app_name">My Application</string>
</resources>
Fichier styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
L’accès aux ressources de l’application depuis le code JAVA s’effectué grâce à deux classes :
la classe R, et la classe resources.
La classe R permet de référencier les ressources, elle est définie en code JAVA (le fichier
R.java) et contienne des classes internes. Chaque classe interne permettre de faire des références
à un type de ressource. Souvent le nom de la classe interne porte le même nom du type de la
ressource référenciée grâce à cette classe (ex. id, drawable, layout…etc.). La figure 2.4 présente
un exemple du code source de la classe R. Par exemple la classe interne layout permettre de
faire l’accès au fichier XML de l’interface graphique de l’application. Une ressource peut être
référencée dans un fichier XML grâce à l’instruction : "@type/identificateur". Par exemple :
@string/app_name. Une ressource peut être référencée aussi dans un code JAVA grâce à
l’instruction : R.type.identificateur. Par exemple : R.string.app_name.
4
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
public final class R {
public static final class drawable {
public static final int ic_action_search=0x7f020000;
public static final int ic_launcher=0x7f020001;
}
public static final class id {
public static final int menu_settings=0x7f080000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class menu {
public static final int activity_main=0x7f070000;
}
public static final class string {
public static final int app_name=0x7f050000;
public static final int hello_world=0x7f050001;
public static final int menu_settings=0x7f050002;
public static final int title_activity_main=0x7f050003;
}
public static final class style {
public static final int AppTheme=0x7f060000;
}
}
Les méthodes de la classe resources permettent de faire l’accès aux les ressources référencées
par la classe R. Il fallait créer une instance de la classe resources par la méthode getResources()
afin d’utiliser les différents méthodes de la classe resources comme :
- boolean getBoolean(int)
- int getInteger(int)
- int[] getArray(int)
- String getString(int)
- String[] getStringArray(int)
- int getColor(int)
- float getDimension(int)
- Drawable getDrawable(int)
Sachant que le paramètre de ces méthodes est une référence d’une ressource. L’exemple ci-
dessous représente l’accès à une ressource de type string (définie dans un fichier XML) dans
un code JAVA.
String titre = getResources().getString(R.string.app_name);
L’accès à l’interface graphique principale de l’application (Layout) depuis un code JAVA est
effectué à base de la fonction setContentView(R.layout.nom_du_fichier_xml).
Figure 2.5 : Exemple d’un code XML d’une disposition de type LinearLayout
2.2.2. RelativeLayout
Les vues contenues dans une disposition de type RelativeLayout peuvent déclarer leur position
relativement par rapport à leur RelativeLayout parent ou par rapport aux autres vues. Par
exemple, une vue peut être positionnée dans le RelativeLayout grâce aux propriétés suivantes :
- android:layout_centerInParent="true"
- android:layout_centerHorizontal="true"
- android:layout_centerVertical="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
6
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
- android:layout_alignParentTop="true"
- android:layout_alignParentBottom="true"
Il est possible aussi de positionner une vue grâce aux autres vues dans le même
RelativeLayout à l’aide des propriétés suivantes :
- android:layout_alignLeft
- android:layout_alignRight
- android:layout_alignBottom
- android:layout_alignTop
La figure 2.7 présente un exemple d’un code XML qui définit une disposition de type
RelativeLayout. Cette dernière consiste de 4 vues (EditText, 2 Buttons, et ProgressBar). La
figure présente aussi l’interface graphique de ce code XML.
2.2.3. TableLayout
Cette disposition positionne les vues sous forme d’un tableau. La figure 2.8 présente un exemple
d’un code XML d’une disposition de type TableLayout. La figure 2.9 présente l’interface
graphique de ce code XML.
7
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
<TableRow>
<TextView
android:text="@string/table_layout_4_save"
android:padding="3dip" />
<TextView
android:text="@string/table_layout_4_save_shortcut"
android:gravity="right"
android:padding="3dip" />
</TableRow>
</TableLayout>
Figure 2.8 : Exemple d’un code XML d’une disposition de type TableLayout
8
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
On peut changer le contenu d’un TextView dans le code JAVA comme suivant :
TextView tx = (TextView) findViewById(R.id.text1);
tx.setText("bbbbbb");
2.3.2. EditText : permet de saisir un texte. La figure 2.11 présente un exemple de 3 EditText.
On peut utiliser l’attribut android:inputType pour spécifier le type de texte : adresse,
téléphone, etc.
9
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
<EditText
android:id= "@+id/password" android:text= "monPassword" android:layout_width= "wrap_content" android:layo
ut_height= "wrap_content" android:password= "true" /> </LinearLayout>
2.3.3. Button : La classe Button permet de créer un bouton qui pourra être actionné par
l’utilisateur pour déclencher un traitement donné. La figure 2.12 présente un exemple de 2
Button.
<Button
android:id= "@+id/okButton" android:text= "OK" android:layout_width= "wrap_content" android:layout_height=
"wrap_content" />
<Button
android:id= "@+id/CancelButton" android:text= "Annuler" android:layout_width= "wrap_content" android:layout
_height= "wrap_content" /> </LinearLayout>
10
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
2.3.4. CheckBox : Est une case à cocher. La figure 2.13 présente un exemple de 4 CheckBox.
Le tableau 2.2 présente autres types des composants graphiques, avec une portion de code
XML pour la création de ces composants.
Composant L’interface graphique Portion du code XML
graphique
ToggleButton <ToggleButton
android:id= "@+id/toggle1"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:textOn= "Allumé"
android:textOff= "Eteint" />
RadioGroup <RadioGroup
<RadioButton
android:id= "@id/option1"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "Noir"
android:checked= "false"
android:layout_gravity= "left" >
</RadioButton>
….
</RadioGroup>
ImageView <ImageView
android:id= "@+id/image"
android:src= "@drawable/logo"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_gravity= "center" />
11
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
ImageButton <ImageButton
android:id= "@+id/image"
android:src= "@drawable/logo"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_gravity= "center" />
ProgressBar <ProgressBar
android:id= "@+id/progress"
style= "?android:attr/progressBarStyleHorizontal"
android:layout_width= "fill_parent"
android:layout_height= "wrap_content" />
RatingBar <RatingBar
android:id= "@+id/gallery"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content" />
Spinner <Spinner
android:id= "@+id/saisons"
android:layout_width= "wrap_content"
android:prompt= "@string/prompt"
android:layout_height= "wrap_content"
android:entries= "@array/saisons" />
TimePicker <TimePicker
android:id= "@+id/time"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content" />
2.4. Styles
Un style permet de modifier les propriétés d’apparence d’une vue, comme : la police et la taille
de caractères pour un texte, couleur et image, géométrie par défaut des vue (taille, espacement,
remplissage…etc.).
12
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
Pour définir un nouveau style, il fallait ajouter une ressource de type style dans le fichier
styles.xml du répertoire res/values. Par exemple le code XML suivant permet de créer deux
ressources de type style nommées "MyTheme" et "MySubTheme".
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme">
<item name="android:textSize">12sp</item>
<item name="android:textColor">#111</item>
</style>
<style name="MySubTheme" parent="MyTheme"; >
<item name="android:textSize">8sp</item>
</style>
</resources>
L’attribut parent permet au style "MySubTheme" d’hériter les propriétés du style "MyTheme".
L’utilisation du style "MySubTheme" pour une vue de type TextView dans le fichier XML de
l’interface graphique (layout.xml) est faite comme suivant :
<TextView
style="@style/MySubTheme"
android:text="@string/hello" />
Un thème est un style appliqué partout dans l’application. Le thème doit être spécifié dans le
manifest de l’application (AndroidManifest.xml), comme il montre l’exemple suivant :
<application
android:theme="@style/MyTheme"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
…
/application>
2.5. Exercice TP2 : Partie I d’une application mobile de gestion des notes.
2.5.1. Enoncé
Le but principal de cet exercice est de construire une interface humain-machine (IHM)
présentant plusieurs composants graphiques Android (View). Cette IHM permet de calculer les
moyennes de quelques modules (d’une unité d’enseignement fondamentale) d’un étudiant en
2-éme année Master (Master 2/Informatique/Génie Logiciel) en demandant les notes des
travaux dirigés (TD), travaux pratiques (TP), et contrôle pour chaque module. L’application
doit calculer aussi la moyenne de l’unité d’enseignement fondamentale, ainsi le nombre de
crédits obtenus pour cette unité.
Pour l’instant, on va se contenter de faire l’interface graphique qui ressemblera à la figure
2.14.
13
Université Mohamed Cherif Messaàdia de Souk Ahras
Module : Développement des applications mobiles avancées 2-ème année Master Génie Logiciel
Support de cours préparé par Mr. ZAIDI Sofiane Année : 2018/2019
s.zaidi@univ-soukahras.dz
1) Indiquez les composants graphiques Android qui interviennent dans cette IHM.
2) Construire cette IHM avec l'environnement Eclipse et le plug-in Android (ou bien
Android studio). On demande d'écrire le moins de code JAVA possible. Les chaînes de
caractères seront plutôt définies dans le fichier strings.xml.
14