Ricerca…


Sintassi

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

Parametri

Parametro Descrizione
inflate(int menuRes, Menu menu) Gonfiare una gerarchia di menu dalla risorsa XML specificata.
getMenuInflater () Restituisce un MenuInflater con questo contesto.
onCreateOptionsMenu (Menu menu) Inizializza i contenuti del menu delle opzioni standard di Activity. È necessario posizionare le voci di menu nel menu.
onOptionsItemSelected (MenuItem item) Questo metodo viene chiamato ogni volta che viene selezionato un elemento nel menu delle opzioni

Osservazioni

Per saperne di più su Menu , leggi questo . Spero che sia d'aiuto!

In Android c'è un menu di opzioni predefinito, che può richiedere un certo numero di opzioni. Se è necessario visualizzare un numero maggiore di opzioni, è opportuno raggruppare tali opzioni per mantenere la chiarezza. Le opzioni possono essere raggruppate inserendo divisori (cioè linee orizzontali) tra di loro. Per consentire divisori, è possibile utilizzare il seguente tema:

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

Modificando il tema, i divisori possono essere aggiunti a un menu.

Applica il carattere personalizzato al 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);
}

e poi nell'attività:

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

Creazione di un menu in un'attività


Per definire il tuo menu, crea un file XML all'interno della cartella res/menu/ directory del tuo progetto e crea il menu con i seguenti elementi:

  • <menu> : definisce un Menu, che contiene tutte le voci del menu.
  • <item> : crea un oggetto Menu, che rappresenta un singolo elemento in un menu. Possiamo anche creare un elemento annidato per creare un sottomenu.

Passo 1:

Crea il tuo file xml come segue:

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>

Passo 2:

Per specificare il menu opzioni, sovrascrivere onCreateOptionsMenu() nella tua attività .

In questo metodo, puoi gonfiare la risorsa del tuo menu (definita nel tuo file XML, ad esempio, res/menu/main_menu.xml )

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

Quando l'utente seleziona una voce dal menu delle opzioni, il sistema chiama override del vostro attività onOptionsItemSelected() metodo.

  • Questo metodo passa il MenuItem selezionato.
  • È possibile identificare l'elemento chiamando getItemId() , che restituisce l'ID univoco per la voce di menu (definita dall'account android:id attribute nel menu resource - 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);
    }
}

Avvolgendo!

Il tuo codice Activity dovrebbe essere simile a quanto segue:

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

Screenshot di come appare il tuo menu:

SampleMenuApp



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow