Recherche…


Syntaxe

  • inflater.inflate (R.menu.your_xml_file, menu);

Paramètres

Paramètre La description
inflate(int menuRes, Menu menu) Gonflez une hiérarchie de menus à partir de la ressource XML spécifiée.
getMenuInflater () Retourne un MenuInflater avec ce contexte.
onCreateOptionsMenu (Menu menu) Initialiser le contenu du menu d'options standard de l'activité. Vous devez placer vos éléments de menu dans le menu.
onOptionsItemSelected (MenuItem item) Cette méthode est appelée chaque fois qu'un élément de votre menu d'options est sélectionné

Remarques

Pour en savoir plus sur les menus , lisez ceci . J'espère que cela aide!

Dans Android, il existe un menu d'options par défaut, qui peut prendre un certain nombre d'options. Si un plus grand nombre d'options doit être affiché, il est judicieux de regrouper ces options afin de conserver la clarté. Les options peuvent être regroupées en mettant des séparateurs (lignes horizontales) entre eux. Pour permettre des séparateurs, le thème suivant peut être utilisé:

<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>
    <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
    <item name="android:divider">@color/black</item>
    <item name="android:dividerHeight">1dp</item>
</style>

En modifiant le thème, des séparateurs peuvent être ajoutés à un menu.

Appliquer une police personnalisée à Menu

public static void applyFontToMenu(Menu m, Context mContext){
    for(int i=0;i<m.size();i++) {
        applyFontToMenuItem(m.getItem(i),mContext);
    }
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
    if(mi.hasSubMenu())
        for(int i=0;i<mi.getSubMenu().size();i++) {
            applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
        }
    Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
    SpannableString mNewTitle = new SpannableString(mi.getTitle());
    mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    mi.setTitle(mNewTitle);
}

et ensuite dans l'activité:

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

Créer un menu dans une activité


Pour définir votre propre menu, créez un fichier XML dans le répertoire res/menu/ votre projet et créez le menu avec les éléments suivants:

  • <menu> : définit un menu contenant tous les éléments du menu.
  • <item> : crée un MenuItem, qui représente un seul élément dans un menu. Nous pouvons également créer un élément imbriqué afin de créer un sous-menu.

Étape 1:

Créez votre propre fichier xml comme suit:

Dans res/menu/main_menu.xml :

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/aboutMenu"
        android:title="About" />
    <item
        android:id="@+id/helpMenu"
        android:title="Help" />
    <item
        android:id="@+id/signOutMenu"
        android:title="Sign Out" />
</menu>

Étape 2:

Pour spécifier le menu d'options, remplacez onCreateOptionsMenu() dans votre activité .

Dans cette méthode, vous pouvez gonfler votre ressource de menu (définie dans votre fichier XML, à savoir res/menu/main_menu.xml )

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

Lorsque l'utilisateur sélectionne un élément dans le menu d'options, le système appelle la méthode onOptionsItemSelected() votre activité .

  • Cette méthode passe le menuItem sélectionné.
  • Vous pouvez identifier l'élément en appelant getItemId() , qui renvoie l'identifiant unique de l'élément de menu (défini par l' android:id attribute dans la ressource de menu - res/menu/main_menu.xml ) * /
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.aboutMenu:
            Log.d(TAG, "Clicked on About!");
            // Code for About goes here
            return true;
        case R.id.helpMenu:
            Log.d(TAG, "Clicked on Help!");
            // Code for Help goes here
            return true;
        case R.id.signOutMenu:
            Log.d(TAG, "Clicked on Sign Out!");
            // SignOut method call goes here
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Emballer!

Votre code d' Activity devrait ressembler à ceci:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "mytag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.aboutMenu:
                Log.d(TAG, "Clicked on About!");
                // Code for About goes here
                return true;
            case R.id.helpMenu:
                Log.d(TAG, "Clicked on Help!");
                // Code for Help goes here
                return true;
            case R.id.signOutMenu:
                Log.d(TAG, "User signed out");
                // SignOut method call goes here
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

Capture d'écran de l'apparence de votre propre menu:

SampleMenuApp



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow