1. TP : Les Menus Android
Créer un projet en choisissant une “empty activity” comme point de
départ. Vous allez vous retrouver avec le dossier menu manquant.
Pour créer votre ActionBar il est nécessaire de créer se menu. Pour
l’ajouter, il suffit de faire un clic droit sur le dossier “res” puis aller
sur l’onglet “New” et enfin cliquez sur “Android Ressource
Directory”.
2. Une nouvelle fenêtre va s’ouvrir qu’il faut ensuite configurer.
Sélectionner “menu” pour le “Ressource type”, puis appuyer sur
“OK”.
Voilà, le menu a été crée, il vous reste plus qu’à ajouter votre
fichier xml correspondant à votre menu dans le dossier “menu”
qui vient d’être créé (“Android Ressource File” ).
La création du menu
3. La création d’un menu reste simple, une balise <Menu> comme
point départ. Ensuite vous avez le choix entre la balise “item” et la
balise “group”
mon_menu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/
res/android" xmlns:app="http://schemas.android.com/
apk/res-auto">
<item
android:id="@+id/item_favoris"
android:title="Favoris"
android:icon="@android:drawable/
btn_star_big_off"
app:showAsAction="always"/>
<item
android:id="@+id/Effacer"
android:title="Effacer"
android:icon="@android:drawable/
ic_menu_delete"
app:showAsAction="always"/>
<item
android:id="@+id/configuration"
android:title="paramètres"
app:showAsAction="never"/>
</menu>
La balise <item> correspond à votre élément dans le menu ou à
votre bouton sur votre ActionBar, si vous préférez. Il doit
obligatoirement posséder un identifiant (android:id) si vous
souhaitez interagir avec lui. Vous pouvez lui ajouter un titre, une
icône et différentes autres options. Le paramètre par exemple
4. “app:showAsAction” définit la position de votre élément selon
différents critères :
La balise <group> permet de regrouper un ensemble “item”
ensemble. Les paramètres du groupe agissent sur l’ensemble des
éléments. La balise <group> n’est pas souvent utilisée dans une
ActionBar.
Valeur Description
ifRoom Place les éléments dans la barre d’action
s’il y a de la place.
withText Ajoute le texte du titre (défini par
android:title) avec votre élément . Vous
pouvez l’ajouter avec une autre valeur en
les séparant avec un tuyau |.
Exemple : app:showAsAction = ” ifRoom|
withText”
never Place l’élément dans le menu de
débordement de la barre d’action. C’est la
valeur par défaut, si le paramètre «
app:showAsAction » n’est pas défini.
always Place l’élément dans la barre d’action. Si
le nombre d’éléments définit avec cette
valeur, il se peut que les éléments se
chevaucher avec d’autres interfaces
utilisateur dans la barre des applications.
5. La mise en place dans l’activité
Pour associer notre ActionBar à notre activité, il faut redéfinir
la méthode onCreateOptionsMenu. Une méthode à redéfinir est
facilement repérable par le mot-clé “override”.
onCreateOptionsMenu
override fun onCreateOptionsMenu(menu: Menu?):
Boolean {
super.onCreateOptionsMenu(menu)
menuInflater.inflate(R.menu.mon_menu,menu)
return true
}
L’instruction “super.onCreateOptionsMenu(menu)” fait appel à la
méthode portant le même nom dans la classe mère, pour initialiser
notre méthode. Dans cette classe mère, les méthodes initialisent et
gèrent les différents accès au système. Notre “MainActivity” est
une couche supplémentaire à cette classe mère.
6. Redéfinir une méthode permet donc de faire abstraction de la
couche dite “parente”, d’éviter de réécrire du code qui a déjà été
écrit et de nous permettre de nous concentrer sur l’essentielle.
L’instruction “menuInflater.inflate(R.menu.mon_menu,menu)”
va venir lier notre ActionBar (fichier XML) à notre MainActivity
(code Kotlin).
Le menu est associé mais il n’est présent que visuellement. Pour
pouvoir interagir avec lui, il faut redéfinir la méthode
“onOptionsItemSelected”.
onOptionsItemSelected
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
super.onOptionsItemSelected(item)
when (item?.itemId)
{
R.id.item_favoris ->
{
if (isFavori == false)
{
item.setIcon(R.drawable.btn_rating_star_off_pressed)
Toast.makeText(this,"Favoris",Toast.LENGTH_LONG).show()
isFavori = true
}
else
{
item.setIcon(R.drawable.btn_rating_star_off_normal)
isFavori = false
}
}
R.id.configuration ->
{ Toast.makeText(this,"Paramètres",Toast.LENGTH_LONG).show() }
R.id.Effacer ->
{
mon_editText.text.clear()
Toast.makeText(this,"le contenu a été
effacé",Toast.LENGTH_LONG).show()
}
else -> { Toast.makeText(this,"action
inconnu",Toast.LENGTH_LONG).show() }
}
return true
}
À chaque clic sur un item du menu, son identifiant est envoyé en
paramètre de cette méthode. Ce qui permet associée une suite
7. d’instructions à un identifiant et donc à un élément de notre
ActionBar. Dans la boucle “when”, on vient créer les différents cas
en fonction des identifiants. Le cas “else”, correspond le cas par
défaut si l’identifiant récupéré ne correspond à aucun des cas qu’on
a inscrit. Chaque cas est défini par un identifiant suivi d’une flèche
et des instructions encadrées par des accolades.
Pour aller plus loin
Il existe plusieurs paramètres pour définir une balise <item> :
Si vous êtes curieux je vous invite à aller voir la documentation en
anglais ici !
Exercice 2
Réécrire en langage kotlin les programmes Menus que vous
trouverez dan le document : cours-11