Menu: i ContextMenu
Nei capitoli precedenti abbiamo analizzato approfonditamente il menu del tipo IconMenu che sono, generalmente, i più utilizzati. Altra risorsa che Android ci offre è il ContextMenu che può essere accomunato, come struttura e funzionamento, al menù che appare cliccando con il tasto destro del mouse su una qualsiasi icona di Windows.
Il ContextMenu infatti non viene mostrato all'utente in seguito ad una pressione di un tasto sul dispositivo (come invece lo era per gli IconMenu), ma viene associato ad un determinato widget e viene visualizzato all'utente in seguito ad un click prolungato proprio su quel widget.
Ovviamente, all'interno di un'activity, è possibile creare dei ContextMenu diversi per poi associarli a widget diversi, oppure creare un'unico ContextMenu e associarlo a più widget diverse.
Andiamo adesso a mostrare il codice necessario per creare due diversi ContextMenu per poi associarne uno ad un bottone ed un'altro ad una TextView (prima di inserire il codice è necessario importare il pacchetto android.view.ContextMenu.*):
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout mioLayout = new LinearLayout(this);
Button bottone = new Button(this);
bottone.setId(1);
button1.setText("Bottone associato ad un menù");
TextView tv = new TextView(this);
tv.setText("Fai un click prolungato per il contextmenu");
tv.setId(2);
mioLayout.addView(bottone);
mioLayout.addView(tv);
setContentView(layout);
registerForContextMenu(bottone);
registerForContextMenu(tv);
}
public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenuInfo menuInfo) {
if(view.getId() == 1) {
menu.setHeaderTitle("ContextMenu del bottone");
menu.add(Menu.NONE, 1, 1, "Voce bottone 1");
menu.add(Menu.NONE, 2, 2, "Voce bottone 2");
}
else if(view.getId() == 2) {
menu.setHeaderTitle("ContextMenu della TextView");
menu.add(Menu.NONE, 3, 1, "Voce TextView 1");
menu.add(Menu.NONE, 4, 2, "Voce TextView 2");
}
}
Facciamo l'analisi del codice proposto. Per quanto riguarda il contenuto del metodo onCreate le uniche linee di codice mai viste sono quelle relative all'invocazione del metodo registerForContextMenu che associa, al widget passato come parametro, un eventuale ContextMenu.
Di maggiore interesse risulta invece il metodo onCreateContextMenu che, di fato, contiene il codice relativo ai ContextMenu che vogliamo creare. Anche in questo caso, per creare un diverso menù per i due widget, abbiamo utilizzato il metodo getId() della view che ha richiamato il metodo onCreateContextMenu (il settaggio dell'id dei due widget viene eseguito nel metodo onCreate utilizzando setId()).
All'interno degli if andiamo ad aggiungere al menu le voci che desideriamo con il solito metodo add ed utlizziamo il metodo setHeaderTitle per impostare un titolo al ContextMenu.
Per poter associare un comportamento specifico alla pressione di uno dei tasti del menù si opera nella stessa maniera vista nel capitolo precedente per gli OptionMenu inserendo però il codice desiderato all'interno del metodo onContextItemSelected(MenuItem item).







