Cours 5
Cours 5
Cours 5
Chapitre VI :
45
Chapitre VI : Interfaces graphique avancées
1 Menu
Un menu est une liste d’éléments (items) qui permet de proposer des fonctionnalités
supplémentaires qui n’apparaissent pas par défaut à l’écran, et de mieux gérer la taille
limitée de l’écran de dispositif mobile. Chaque menu est associé à une seule activité. La
sélection d’un élément (item) dans le menu déclenche une callback15.
Il faut définir les attributs ; identifiant (id), l’icône (icon) et le titre de menu (title). L’attribut
showAsAction spécifie quand et comment cet item doit apparaître en tant qu'élément
d'action dans la barre d'application. Il prend les valeurs suivantes :
- ifRoom : Ne placer cet élément dans la barre de l'application que s'il y a de la place.
- always : Placer toujours l’élément dans la barre d'applications (Si l’appariation de
l’élément dans la barre d'actions est indispensable).
- never : Ne maitre jamais cet élément dans la barre d'applications.
15
Une fonction de rappel (callback en anglais) est une fonction passée dans une autre fonction en tant qu'argument, qui est
ensuite invoquée à l'intérieur de la fonction externe pour accomplir une action.
46
Chapitre VI : Interfaces graphique avancées
Dans l’activité, afin d’utiliser nom_du_menu.xml en tant qu’icones dans ActionBar, il suffit de
l’indiquer à MenuInflater dans la méthode onCreateOptionsMenu afin d'ajouter les items au
menu.
getMenuInflater().inflate(R.menu.nom_du_menu, menu);
return true;
Pour récupérer le click de l’utilisateur sur une action, il suffit de surcharger la méthode
d’activité onOptionsItemSelected(MenuItem item). En effectuant un switch sur l’identifiant
de l’item, on peut savoir lequel a été sélectionné.
2 Menu contextuel
Un menu contextuel propose des actions qui affectent un élément ou un cadre de contexte
spécifique dans l'interface utilisateur. On peut attribuer un menu contextuel à n'importe
quelle vue, mais il est le plus souvent utilisés pour les éléments d'une ImageView, ListView,
GridView ou d'autres collections de vues ou l'utilisateur peut réaliser des actions directes sur
chaque élément. La méthode registerForContextMenu (View v) permet d’associer un menu
contextuel à un composant graphique (vue). Quand l'utilisateur fait un click long sur cette
vue, ce menu contextuel s'ouvrira.
47
Chapitre VI : Interfaces graphique avancées
La première méthode est utilisée pour l’affichage de menu contextuel, elle permet
d’expanser (inflate) le menu contextuel qui est stocké dans : res/menu/menu_context.
monMenu : est le menu à construire, v : c’est la vue sur laquelle le menu a été appelé et
menuInfo : indique sur quel élément d'un adaptateur (par exemple liste) a été appelé le
menu.
48
Chapitre VI : Interfaces graphique avancées
3 Annonces
Afin d’annoncer à l’utilisateur des informations sans le déranger alors qu’il utilise une autre
application ou qu’il rédige un SMS par exemple. Android propose le concept de toast, un
message qui s’affiche en quelques secondes.
Toast : permet d’afficher un message de notification pendant quelques secondes de tel sort
que l’utilisateur soit informé de la réalisation d’une action. Il utilise trois paramètres :
Context de l’application, un message textuel (chaine de caractères) et une durée du temps
(courte : 2 seconds et long : 5 seconds).
public static Toast makeText (Context context, CharSequence text, int duree);
Le toast est affiché par la méthode show(), comme dans l'exemple suivant :
Toast.makeText(getApplicationContext(),"Mon message",
Toast.LENGTH_SHORT).show();
4 Dialogue
Une boîte de dialogue (Dialog) est une petite fenêtre qui ne remplit pas complètement la
taille de l'écran et qui invite l'utilisateur à prendre une décision ou à entrer des informations
supplémentaires avant de pouvoir continuer. Chaque boite de dialogue est composée de 3
parties :
49
Chapitre VI : Interfaces graphique avancées
Pour demander des informations à l’utilisateur sans avoir besoin de créer une autre activité,
on peut utiliser un dialogue personnalisé. Pour ce faire, il faut définir un layout du dialogue
contenant tous les textes, à part le titre, et au moins un bouton pour valider, mais on peut
simplement fermer le dialogue avec le bouton back (retour) du smartphone. Ce layout est
ajouté avec la méthode :
dialog.setContentView(R.layout.nom_layout);
5 ListView
Android ListView est une vue qui contient un groupe d'éléments et s'affiche dans une liste
déroulante. ListView est implémenté en important la classe android.widget.ListView.
ListView utilise des classes d'adaptateurs qui ajoutent le contenu d’une source de données
(un tableau de chaînes, un tableau, une base de données, etc.) à ListView. L'adaptateur relie
les données entre un AdapterView et d'autres vues (ListView, ScrollView, etc.).
ArrayList ListView
Cursor GridView
Spinner
• Adapter : c’est un objet qui gère uniquement les données. II joue le rôle
d’intermédiaire entre les données et la vue qui représente ces données. Android
propose trois types d’adaptateurs simples :
1. ArrayAdapter : permet d'afficher les données simples (texte).
50
Chapitre VI : Interfaces graphique avancées
listview.setAdapter(itemsAdapter);
<LinearLayout xmlns: …
android:orientation="vertical" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
51
Chapitre VI : Interfaces graphique avancées
Par défaut, cela convertira désormais chaque élément du tableau de données en une vue en
appelant toString sur l'élément, puis en attribuant le résultat comme valeur d'un TextView
(simple_list_item_1.xml) qui est affiché comme ligne pour cet élément de données.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Si l'application nécessite une traduction plus complexe entre l'élément et View, on peut
utiliser plutôt un ArrayAdapter personnalisé.
Pour un click simple sur un élément de la liste. La fonction de callback associée est :
void onItemClick (AdapterView<?> adapter, View v, int pos, long id)
• adapter l'AdapterView qui contient la vue sur laquelle le click a été effectué,
• v c’est la vue en elle-même,
• pos c’est la position de la vue dans la liste
• id représente est l'identifiant de la vue.
52
Chapitre VI : Interfaces graphique avancées
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView,View view,
int position, long id) {
// faire quelque chose
}
});
Lorsqu'on veut afficher un ensemble d'éléments dans une liste à l'aide d'une représentation
personnalisée des éléments, on peut utiliser notre propre disposition XML personnalisée
pour chaque élément au lieu de celles proposées par android (par exemple:
android.R.layout.simple_list_item_1). Pour ce faire, on doit créer notre
propre classe ArrayAdapter personnalisé.
6 Conclusion
Ce chapitre prolonge le Chapitre IV sur les interfaces utilisateur, en présentant
comment créer des interfaces beaucoup plus riches (menu, dialogue, annonce, et liste) qui
offrent des possibilités en ergonomie pour capter l’attention des utilisateurs.
Questions
- Quelle est la différence entre un Menu et un Menu Contextuel.
- Comment peut-on personnaliser une List pour pouvoir sélectionner plusieurs
éléments de cette List à la fois.
- Une boite de dialogue peut contenir uniquement du texte -Vrai -Faux
53