Zoeken…


Syntaxis

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

parameters

Parameter Beschrijving
inflate(int menuRes, Menu menu) Blaas een menuhiërarchie op uit de opgegeven XML-bron.
getMenuInflater () Retourneert een MenuInflater met deze context.
onCreateOptionsMenu (Menu menu) Initialiseer de inhoud van het standaardoptiemenu van de activiteit. U moet uw menu-items in het menu plaatsen.
onOptionsItemSelected (MenuItem item) Deze methode wordt aangeroepen wanneer een item in uw optiemenu wordt geselecteerd

Opmerkingen

Lees dit voor meer informatie over menu's . Hoop dat het helpt!

Optiemenu met scheidingslijnen

In Android is er een standaardoptiemenu, dat een aantal opties kan bevatten. Als een groter aantal opties moet worden weergegeven, is het logisch om die opties te groeperen om de duidelijkheid te behouden. Opties kunnen worden gegroepeerd door scheidingslijnen (dwz horizontale lijnen) ertussen te plaatsen. Om scheidingslijnen mogelijk te maken, kan het volgende thema worden gebruikt:

<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>

Door het thema te wijzigen, kunnen scheidingslijnen aan een menu worden toegevoegd.

Pas een aangepast lettertype toe op 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);
}

en vervolgens in de activiteit:

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

Een menu maken in een activiteit


Om uw eigen menu te definiëren, maakt u een XML-bestand in de res/menu/ map van uw project en bouwt u het menu met de volgende elementen:

  • <menu> : definieert een menu dat alle menu-items bevat.
  • <item> : Creëert een MenuItem, dat een enkel item in een menu vertegenwoordigt. We kunnen ook een genest element maken om een submenu te maken.

Stap 1:

Maak uw eigen XML-bestand als volgt:

In 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>

Stap 2:

Om het optiemenu op te geven, vervangt u onCreateOptionsMenu() in uw activiteit .

Met deze methode kunt u uw res/menu/main_menu.xml opblazen (gedefinieerd in uw XML-bestand, namelijk res/menu/main_menu.xml )

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

Wanneer de gebruiker een item uit het optiemenu selecteert, roept het systeem de overschreven methode van uw activiteit onOptionsItemSelected() .

  • Deze methode geeft het geselecteerde menu-item door.
  • U kunt het item identificeren door getItemId() aan te roepen, die de unieke ID voor het menu-item retourneert (gedefinieerd door het android:id attribute in de res/menu/main_menu.xml - 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);
    }
}

Afsluiten!

Uw Activity moet er hieronder uitzien:

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);
        }
    }
}

Schermafbeelding van hoe uw eigen menu eruitziet:

SampleMenuApp



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow