Sök…


Syntax

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

parametrar

Parameter Beskrivning
inflate(int menuRes, Menu menu) Blås upp en menyhierarki från den angivna XML-resursen.
getMenuInflater () Returnerar en MenuInflater med detta sammanhang.
onCreateOptionsMenu (Menu menu) Initiera innehållet i Aktivitetens meny med standardalternativ. Du bör placera dina menyalternativ i menyn.
onOptionsItemSelected (MenuItem item) Den här metoden kallas varje gång ett objekt i alternativmenyn väljs

Anmärkningar

Läs detta om du vill veta mer om menyer . Hoppas det hjälper!

Alternativmeny med avdelare

I Android finns en standardalternativmeny, som kan ta ett antal alternativ. Om ett större antal alternativ måste visas är det vettigt att gruppera dessa alternativ för att upprätthålla tydligheten. Alternativ kan grupperas genom att placera avdelare (dvs. horisontella linjer) mellan dem. För att möjliggöra delare kan följande tema användas:

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

Genom att ändra temat kan delare läggas till i en meny.

Använd anpassat teckensnitt på Meny

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

och sedan i aktiviteten:

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

Skapa en meny i en aktivitet


För att definiera din egen meny, skapa en XML-fil i projektets res/menu/ katalog och bygga menyn med följande element:

  • <menu> : Definierar en meny som innehåller alla menyalternativ.
  • <item> : Skapar ett MenuItem, som representerar ett enda objekt i en meny. Vi kan också skapa ett kapslad element för att skapa en undermeny.

Steg 1:

Skapa din egen xml-fil på följande sätt:

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

Steg 2:

För att ange alternativmenyn, åsidosätter onCreateOptionsMenu() i din aktivitet .

På den här metoden kan du blåsa upp din menyresurs (definierad i din XML-fil, dvs. res/menu/main_menu.xml )

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

När användaren väljer ett objekt från alternativmenyn, anropar systemet din aktivitets åsidosatta onOptionsItemSelected() .

  • Den här metoden passerar det valda MenuItem.
  • Du kan identifiera objektet genom att ringa getItemId() , vilket returnerar det unika ID för menyposten (definierat av android:id attribute i menyresursen - 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);
    }
}

Avslutar!

Din Activity ska se ut nedan:

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

Skärmdump av hur din egen meny ser ut:

SampleMenuApp



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow