sabato 21 gennaio 2012

Programmazione Android: I menù - Costruire una web application (terza parte)

Una piccola premessa: smartphone e tablet gestiscono i menù che vedremo in modo differente. Mentre i tablet mostrano i pulsanti del menù nella barra di titolo (TitleBar, quella eliminata dal tema FullScreen nel post precedente), gli smartphone esigono la pressione di un determinato tasto del telefono per mostrare a video il menù (per ovvie ragioni di spazio). Ovviamente se vogliamo mostrare su un tablet il menù, dovremo eliminare l'impostazione del tema "Fullscreen".
Ricordando i post precedenti, Android sfrutta perfettamente il modello MVC: la prima cosa da fare, quindi, è creare il layout del nostro menù personalizzato. Per fare ciò, per prima cosa bisogna creare una cartella "menu" sottocartella di "res". Selezionare la cartella appena creata e premere "Ctrl + N" oppure fare click con il pulsante destro e scegliere New->Other. Scegliere a questo punto Android XML File e cliccare su Next.

Nella schermata successiva dare un nome al file, ad esempio menubar.xml e fare click su "Finish". Eclipse a questo punto apre automaticamente l'editor per l'xml appena creato, riconoscendo che andrà a specificare la struttura di un menù. Basterà cliccare su "Add" e poi scegliere "Item" per aggiungere un elemento al menù. Ovviamente bisogna specificare:
  • Id: @+id/item_exit
    Tutti gli id iniziano per @+id/ e sono seguiti dal nome identificativo, in questo caso item_exit
  • Title e Title Condensed: Esci
    Sono il titolo e il titolo breve del menù, in questo caso "Esci"
  • Icon: @drawable/ic_exit
    L'icona associata al bottone. Android cercherà l'icona ic_exit.png sotto le cartelle res/drawable-*
Per il momento basta questa semplice configurazione. Ovviamente si dovrà spiegare ad Android quando e soprattutto in quale attività (Activity) questo menù dovrà essere mostrato. Per fare ciò, apriamo il file sorgente dell'attività principale (per chi non si ricordasse il primo post sull'argomento, il nome è webappActivity.java) e aggiungiamo questa funzione:
@Override
 public boolean onCreateOptionsMenu(Menu menu) {
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.menubar, menu);
     return true;
 }
Il codice crea un menù sulla base del file xml specificato (menubar, sotto la cartella menu). Adesso bisogna associare un determinato comportamento alla pressione dei vari bottoni del menù creato. Anche qui, un semplice override con un codice che discrimina l'id del pulsante premuto:
@Override
 public boolean onOptionsItemSelected(MenuItem item) {
     switch (item.getItemId()) {
         case R.id.item_exit:
          finish();
             return true;
         default:
             return super.onOptionsItemSelected(item);
     }
 }
La funzione finish() chiede ad Android di "terminare" l'attività corrente; se quest'ultima è quella principale, il sistema tornerà al menù principale (la home). In realtà, Android ha una gestione dei processi e della loro terminazione tutta sua, quindi anche se l'applicazione non viene mostrata a schermo, può essere che sia ancora in memoria.
Ed ora il risultato finale:
Questo è un esempio con un solo bottone nel menù; ovviamente basta ripetere le semplici operazioni precedenti per aggiungerne ad oltranza. Con una piccola restrizione: Android non mostra più di 6 bottoni. Tutti quelli che oltrepassano questa soglia vengono raccolti un un bottone magico "Altro".

Nessun commento: