Creare un menu

29 settembre 2016

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

  • Options menu: è il menu principale dell’applicazione e contiene voci riguardanti operazioni di interesse generale nella vita dell’app. Pensando ai programmi per desktop può essere paragonato al menu principale contenuto nella barra del titolo;
  • Context Menu: è un menu invocabile su un singolo componente dell’interfaccia utente. Le voci richiamabili serviranno ad avviare operazioni sull’elemento su cui è stato richiesto il menu. Normalmente un menu contestuale viene attivato con un click lungo su un componente del layout. Ha le stesse finalità del menu che nei programmi per desktop viene richiamato con il classico “click” sul pulsante destro del mouse.

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> che definisce il menu nel suo complesso e <item> che dichiara la singola voce del menu. Gli attributi impiegati nella configurazione sono due:

  1. id che, come vedremo, saranno molto importanti nella gestione delle voci del menu ;
  2. title che contiene una stringa che dà il titolo alla voce di menu.

Il risultato è visibile in figura:

Menu Android

 

Il menu apparirà cliccando l’immagine cerchiata in rosso apposta 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(): recupera un riferimento ad un inflater di Menu ossia un servizio del sistema in grado di modellare la struttura dell’oggetto Menu in base alle direttive impostate in XML;
  2. inflater.inflate(R.menu.main,menu): questo è il momento in cui l’azione dell’inflating viene veramente svolta. Il metodo inflate richiede due parametri: la risorsa contenente il layout del del menu e l’oggetto Menu da configurare;
  3. return true: solo se il valore booleano restituito da onCreateOptionsMenu sarà true il menu sarà attivo.

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 in cui verranno eseguite le medesime operazioni svolte nell’onCreateOptionsMenu;
  • definizione delle azioni di risposta al click sulle voci mediante onContextItemSelected;
  • effettuazione di un’operazione molto importante che non è, viceversa, usata negli OptionsMenu: la registrazione dell’elemento che vuole usare il menu contestuale.

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.

Tutte le lezioni

1 ... 16 17 18 ... 84

Se vuoi aggiornamenti su Creare un menu inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Creare un menu

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy