89 votes

Android: modification des éléments du menu des options par programmation

Est-il possible de modifier les éléments du menu d'options par programmation? Quelqu'un peut-il me donner un exemple s'il vous plaît? De plus, je veux désactiver certains éléments pour qu'ils n'écoutent pas les clics, est-ce possible?

Merci.

214voto

Eng.Fouad Points 44085

Pour quiconque a besoin de changer les options du menu de manière dynamique:

 private Menu menu;

// ...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    this.menu = menu;
    getMenuInflater().inflate(R.menu.options, menu);
    return true;
}

// ...

private void hideOption(int id)
{
    MenuItem item = menu.findItem(id);
    item.setVisible(false);
}

private void showOption(int id)
{
    MenuItem item = menu.findItem(id);
    item.setVisible(true);
}

private void setOptionTitle(int id, String title)
{
    MenuItem item = menu.findItem(id);
    item.setTitle(title);
}

private void setOptionIcon(int id, int iconRes)
{
    MenuItem item = menu.findItem(id);
    item.setIcon(iconRes);
}
 

34voto

Imdad Sarkar Points 674

menu.xml

   <item 
    android:id="@+id/item1"
    android:title="your Item">
  </item>
 

mettre dans votre fichier java

   public boolean onPrepareOptionsMenu(Menu menu) {

    menu.removeItem(R.id.item1);

    return true;
}
 

21voto

Nikolay Elenkov Points 32843

Vous pouvez le faire dans onPrepareOptionsMenu () .

7voto

Pyrodante Points 2621

Si je dois modifier le contenu de mon menu d'options, je l'exécute pendant onMenuOpened (). Cela me permet de vérifier l'état de fonctionnement au moment même où l'utilisateur accède au menu.

 public boolean onMenuOpened(int featureid, Menu menu)
    {
        menu.clear();
        if (!editable)
        {
            MenuItem itemAdd = menu.add(0, REASSIGN, Menu.NONE, context.getString(R.string.reassign));
            MenuItem itemMod = menu.add(1, EDIT, Menu.NONE, context.getString(R.string.modify));
            MenuItem itemDel = menu.add(2, DELETE, Menu.NONE, context.getString(R.string.delete));
            itemAdd.setShortcut('0', 'a');
            itemMod.setShortcut('1', 'm');
            itemDel.setShortcut('2', 'd');
        }
        else
        {
            MenuItem itemSave = menu.add(3, SAVE, Menu.NONE, context.getString(R.string.savechanges));
            itemSave.setShortcut('0', 'S');
        }


        return true;
    }
 

7voto

Marcin S. Points 5141

Pour désactiver certains éléments:

 MenuItem item = menu.findItem(R.id.ID_ASSING_TO_THE_ITEM_IN_MENU_XML);
item.setEnabled(false);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X