{"id":212,"date":"2014-06-19T23:31:43","date_gmt":"2014-06-19T21:31:43","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=212"},"modified":"2014-06-19T23:34:52","modified_gmt":"2014-06-19T21:34:52","slug":"android-tutorial-4-gestire-laction-bar","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/android-tutorial-4-gestire-laction-bar\/","title":{"rendered":"ANDROID TUTORIAL &#8211; 4 &#8211; GESTIRE L&#8217;ACTION BAR"},"content":{"rendered":"<p style=\"color: #0d293f; text-align: justify;\">Nell&#8217;articolo di oggi vediamo l&#8217;utilizzo dell&#8217;action bar, il componente introdotto con Android 3.0 (Api level 11) e supportato con le versioni precedenti tramite la\u00a0<a style=\"color: #2675b5;\" href=\"http:\/\/developer.android.com\/tools\/support-library\/index.html\">Support Library<\/a>. L&#8217;action bar \u00e8 un componente che svolge diverse funzioni: innanzitutto identifica l&#8217;app, permette di gestire funzioni contestuali alla navigazioni e di avere accesso immediato a funzioni trasversali come potrebbe essere il modulo search.<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Nell&#8217;action bar sono individuate 4 aree funzionali con queste caratteristichie:<\/p>\n<p style=\"color: #0d293f; text-align: justify;\"><img loading=\"lazy\" src=\"http:\/\/developer.android.com\/design\/media\/action_bar_basics.png\" alt=\"\" width=\"580\" height=\"90\" border=\"0\" \/><\/p>\n<ol style=\"color: #143c5d; text-align: justify;\">\n<li>contiene l&#8217;icona dell&#8217;app ed eventualmente il pulsante Up per tornare all&#8217;activity precedente<\/li>\n<li>permette di navigare tra i contenuti di un app<\/li>\n<li>contiene i pulsanti che si attivano in base al contesto<\/li>\n<li>\u00e8 la cosidetta area di overflow, contiene in formato lista, le azioni che non sono visualizzabili per mancanza di spazio<\/li>\n<\/ol>\n<div style=\"color: #0d293f; text-align: justify;\">Il numero di pulsanti visibili nell&#8217;action bar \u00e8 determinato dalla risoluzione dello schermo, come regola non possono occupare pi\u00f9 del 50% della larghezza e allo stato attuale le regole sono riassunte nello schema successivo:<\/div>\n<div style=\"color: #0d293f; text-align: justify;\"><img loading=\"lazy\" src=\"http:\/\/developer.android.com\/design\/media\/action_bar_pattern_table.png\" alt=\"\" width=\"580\" height=\"300\" border=\"0\" \/><\/div>\n<p style=\"color: #0d293f; text-align: justify;\">Qualora lo spazio non sia sufficiente le azioni sono disponibili nell&#8217;area di overflow, oppure \u00e8 possibile attivare una bottom area in cui tutto lo spazio a disposizione \u00e8 occupato dalle azioni rimaste.<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Passiamo alla nostra app e attiviamo la action bar. Nel nostro esempio l&#8217;app deve essere compatibile con dispositivi con Android 2.1, pertanto definiamo la nostra activity principale cos\u00ec<\/p>\n<pre class=\"lang:default decode:true \">public class MainActivity extends ActionBarActivity {}<\/pre>\n<p>dove ActionBarActivity \u00e8 una classe della Support Library disponibile nel package android.support.v7.app;<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">A questo punto l&#8217;action bar \u00e8 gi\u00e0 disponibile e mostra la nostra icona e nient&#8217;altro. Qualora volessimo rimuoverla \u00e8 sufficiente nasconderla in modo semplice:<\/p>\n<pre class=\"lang:default decode:true\">ActionBar actionBar = getSupportActionBar(); \r\nactionBar.hide();<\/pre>\n<p>Adesso abilitiamo il pulsante di Up che consente di gestire la navigazione ed accedere alle funzioni precedentemente visualizzate. Per farlo sono sufficienti due comandi:<\/p>\n<pre class=\"lang:default decode:true \">getSupportActionBar().setHomeButtonEnabled(true);<\/pre>\n<p>(abilita il comportamento sull&#8217;icona dell&#8217;app )<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">o<\/p>\n<pre class=\"lang:default decode:true \">getSupportActionBar().setDisplayHomeAsUpEnabled(true);<\/pre>\n<p>(abilita una icona dedicata )<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Per gestire il comportamento occorre implementare il metodo onOptionsItemSelected(MenuItem item) nella nostra activity e in particolare per gestire l&#8217;evento occorre implementare qualcosa di simile:<\/p>\n<pre class=\"lang:default decode:true \">@Override\r\npublic boolean onOptionsItemSelected(MenuItem item) {\r\nswitch (item.getItemId()) {\u00a0case android.R.id.home:\u00a0finish();\u00a0}\r\nreturn super.onOptionsItemSelected(item);\r\n}<\/pre>\n<p>In questo caso mi limito a chiudere l&#8217;app, quello che \u00e8 importante notare \u00e8 come il pulsante di Home sia identificato univocamente tramite la costante android.R.id.home<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Se adesso volessimo aggiungere dei pulsanti occorre definire un menu in formato xml<\/p>\n<pre class=\"lang:default decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;menu xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\" \u00a0 \r\nxmlns:yourapp=\"http:\/\/schemas.android.com\/apk\/res-auto\" &gt;\r\n&lt;item android:id=\"@+id\/edit\" \r\nandroid:title=\"@string\/edit\" \r\nandroid:icon=\"@drawable\/ic_action_edit\" \r\nyourapp:showAsAction=\"ifRoom\" \/&gt;\r\n&lt;item android:id=\"@+id\/delete\" \r\nandroid:title=\"@string\/delete\" \r\nandroid:icon=\"@drawable\/ic_action_cancel\" \r\nyourapp:showAsAction=\"ifRoom\" \/&gt;\r\n&lt;\/menu&gt;<\/pre>\n<p>Per gestire l&#8217;action bar Big G ci mette a disposizione un set di icone per gli usi pi\u00f9 comuni disponibili\u00a0<a style=\"color: #2675b5;\" href=\"http:\/\/developer.android.com\/design\/downloads\/index.html\">qui<\/a>. E&#8217; interessante notare l&#8217;attributo showAsAction, che stabilisce il comportamento del pulsante. Big G consiglia di usare il valore ifRoom con cui consentiamo al sistema di spostare il pulsante nell&#8217;area di overflow qualora lo spazio non sia sufficiente.<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">A questo per abilitare il pulsante implementiamo il metodo onCreateOptionsMenu, in questo caso mi trovo all&#8217;interno di un fragment<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">@Override\u00a0public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {\u00a0inflater.inflate(R.menu.action_list_market, menu);\u00a0super.onCreateOptionsMenu(menu, inflater);\u00a0}<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">e posso pilotare la sua comparsa tramite il comando setHasOptionsMenu, che mi permette di attivarlo in base alle mie esigenze.<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Nel mio caso ho collegato il men\u00f9 ad una lista in modo che si attivi alla selezione di un elemento.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nell&#8217;articolo di oggi vediamo l&#8217;utilizzo dell&#8217;action bar, il componente introdotto con Android 3.0 (Api level 11) e supportato con le versioni precedenti tramite la\u00a0Support Library. L&#8217;action bar \u00e8 un componente che svolge diverse funzioni: innanzitutto identifica l&#8217;app, permette di gestire funzioni contestuali alla navigazioni e di avere accesso immediato a funzioni trasversali come potrebbe essere &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/android-tutorial-4-gestire-laction-bar\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">ANDROID TUTORIAL &#8211; 4 &#8211; GESTIRE L&#8217;ACTION BAR<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[35],"tags":[39,36],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/212"}],"collection":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/comments?post=212"}],"version-history":[{"count":3,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/212\/revisions"}],"predecessor-version":[{"id":215,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/212\/revisions\/215"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=212"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}