Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 17 di 97
  • livello avanzato
Indice lezioni

Creare un menu

Scopriamo insieme tutto quello che c'è da sapere su come creare dei menu moderni ed efficaci, all'interno di un'app per Android.
Scopriamo insieme tutto quello che c'è da sapere su come creare dei menu moderni ed efficaci, all'interno di un'app per Android.
Link copiato negli appunti

Le applicazioni per Android fanno largo uso di menu per offrire un'interazione con l'utente più vicina a quella dei tradizionali programmi per desktop.

Le tipologie di menu più comuni in Android sono tre:

  • Options menu
  • Context Menu
    l'impiego della Contexual Action Bar
  • Popup menu
    verticale di opzioni. Queste dovrebbero essere relative ad una parte specifica del contenuto senza comportarne la modifica, attività
    per la quale sono più indicate le azioni contestuali di cui al punto precedente.
  • Definire la struttura del menu

    Il primo passo per aggiungere un menu di qualsiasi tipo alla nostra Activity è crearne la struttura. In proposito, va sempre tenuto a mente che i menu sono risorse. Quindi il loro layout va definito nella sottocartella res/menu. Questo è il punto di partenza della creazione di un menu.

    Il seguente codice mostra un layout di menu:

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
    android:id="@+id/MENU_1"
    android:title="Nuova nota"/>
    <item
    android:id="@+id/MENU_2"
    android:title="Elenco note"/>
    </menu

    Assumiamo che il nome del file sia main.xml. Come si può vedere la sintassi necessaria non è molto articolata. Per poter creare un menu minimale, sono sufficienti due tag: <menu> <item>

    1. id
    2. title

    Il risultato è visibile in figura:

    Menu Android

    Il menu apparirà cliccando sull'icona composta da tre puntini, che sarà visibile sulla barra dell'activity.

    Attivare il menu nell'activity

    Affinché il menu venga collegato all'Activity è necessario fare override di un metodo denominato onCreateOptionsMenu. Quella che segue è l'implementazione utilizzata nell'esempio:

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

    Questo metodo, richiesto nell'Activity che desidera il menu, prende come argomento un riferimento ad un oggetto Menu che non dovremo mai preoccuparci di istanziare in quanto sarà già preparato dal sistema. Ciò che resta da fare è configurarlo assegnandogli il layout che abbiamo predisposto nelle risorse. Questo sarà compito delle tre righe:

    1. MenuInflater inflater=getMenuInflater()
    2. inflater.inflate(R.menu.main,menu) inflating
    3. return true

    Da ricordare che onCreateOptionsMenu verrà invocato una sola volta, al momento della creazione del menu, cosa che avverrà contestualmente alla creazione dell'activity.

    Gestire le voci del menu

    Per poter usare il menu manca solo la gestione del click. Questo viene fatto mediante il metodo onOptionsItemSelected.

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
    int id=item.getItemId();
    switch(id)
    {
    case R.id.MENU_1:
    /*
    Codice di gestione della voce MENU_1
    */
    break;
    case R.id.MENU_2:
    /*
    Codice di gestione della voce MENU_2
    */
    }
    return false;
    }

    Come si può vedere nello stralcio di codice, il parametro in input nel metodo è di classe MenuItem e rappresenta la singola voce selezionata. La prima cosa da fare è recuperare l'id della voce, così come è stato impostato nel menu ed in base al suo valore attivare la gestione corretta.

    Creare un Context Menu

    Finora la trattazione ha riguardato esclusivamente i menu Options. O almeno così sembra. In realtà i concetti finora espressi vengono applicati anche ai menu contestuali. Infatti un Context Menu viene creato in maniera del tutto simile ad un menu Options.

    Le operazioni da effettuare sono le seguenti:

    • definizione della struttura del menu contestuale in un apposito file della cartella res/menu;
    • predisposizione del metodo onCreateContextMenu onCreateOptionsMenu
    • definizione delle azioni di risposta al click sulle voci mediante onContextItemSelected
    • effettuazione di un'operazione molto importante che non è , viceversa, usata negli OptionsMenu

    Visto che il menu contestuale viene richiamato con click lungo su un elemento del layout, si deve segnalare all'activity quale elemento sarà dotato di questa caratteristica. Per fare ciò si invoca il metodo registerForContextMenu(View v), solitamente nell'onCreate dell'activity, e la View che viene passata come parametro di ingresso è proprio il riferimento all'elemento sul quale può essere attivato il menu contestuale.

    Probabilemente, la forma più comune di menu contestuale nelle app Android è la cosiddetta Contextual Action Bar, una barra temporanea che appare nella parte alta del layout per mostrare le opzioni attivabili sugli elementi selezionati.

    Creare un PopupMenu

    Anche il Popup Menu potrà essere aggiunto sulla falsa riga di quanto visto sinora. Prima di tutto, dovremo creare il metodo in
    grado di farlo apparire. Potrebbe essere qualcosa del genere:

    public void showPopup(View view) {
            PopupMenu menu = new PopupMenu(this, view);
            MenuInflater inflater = menu.getMenuInflater();
    		menu.setOnMenuItemClickListener(this);
            inflater.inflate(R.menu.popup, menu.getMenu());
            menu.show();
    }

    Anche in questo caso serve una risorsa menu, disegnata in XML, che verrà mostrata mediante inflater. Rispetto a quanto visto
    prima il menu viene creato come oggetto di classe PopupMenu e come argomento perviene un oggetto View
    che sarà il controllo cui il menu è stato associato. Per attivare il menu, va collegato questo metodo ad un'azione di un elemento del'interfaccia, ad esempio, agganciandolo al suo click:

    android:onClick="showPopup"

    Per la gestione delle singole azioni, abbiamo richiamato il metodo setOnMenuItemClickListener che imposta come listener
    l'Activity stessa a patto che questa implementi l'interfaccia PopupMenu.OnMenuItemClickListener con conseguente integrazione del
    metodo onMenuItemClick(MenuItem item) il cui funzionamento ricalca quello visto per onOptionsItemSelected.

    Ti consigliamo anche