<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Men%C3%BAs</id>
	<title>Menús - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Men%C3%BAs"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Men%C3%BAs&amp;action=history"/>
	<updated>2026-10-22T15:48:01Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Men%C3%BAs&amp;diff=57677&amp;oldid=prev</id>
		<title>Carrion: /* Recursos XML */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Men%C3%BAs&amp;diff=57677&amp;oldid=prev"/>
		<updated>2015-12-03T09:51:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Recursos XML&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Introducción==&lt;br /&gt;
*Nesta unidade imos ver como xestionar menús, submenús e menú contextuais.&lt;br /&gt;
&lt;br /&gt;
*A seguinte imaxe amosa os menús na &amp;#039;&amp;#039;&amp;#039;Action Bar&amp;#039;&amp;#039;&amp;#039; da aplicación&lt;br /&gt;
[[Image:Actionbar.png|300px]]&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;: Icona da App e nome&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;: Dúas iconas de menús da aplicación&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039;: Menú &amp;#039;&amp;#039;&amp;#039;OverFlow&amp;#039;&amp;#039;&amp;#039; que equivale ao botón Menú da Botonera.&lt;br /&gt;
*Os menús poden poñerse na &amp;#039;&amp;#039;&amp;#039;Action Bar&amp;#039;&amp;#039;&amp;#039; dende a versión 3.0 de Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Para versións anteriores á 3.0 os menús víanse como na parte inferior da seguinte imaxe:&lt;br /&gt;
[[Image:Options_menu.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*A seguinte imaxe amosa 3 botóns de menú na Barra de Acción e o menú Overflow&lt;br /&gt;
[[Image:Actionbar-item-withtext.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Nesta imaxe vese como un dos menús da action bar ten &amp;#039;&amp;#039;&amp;#039;submenús&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
[[Image:Actionbar-shareaction2x.png||300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Finalmente as seguintes imaxes amosan &amp;#039;&amp;#039;&amp;#039;Menús Contextuais&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;Flotantes&amp;#039;&amp;#039;&amp;#039; (esquerda)&lt;br /&gt;
**ou na &amp;#039;&amp;#039;&amp;#039;barra de accións&amp;#039;&amp;#039;&amp;#039; (dereita)&lt;br /&gt;
[[Image:Menu-context.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Referencias&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
**http://developer.android.com/guide/topics/ui/menus.html&lt;br /&gt;
**http://developer.android.com/guide/topics/resources/menu-resource.html&lt;br /&gt;
**http://developer.android.com/guide/topics/ui/actionbar.html&lt;br /&gt;
**http://developer.android.com/design/patterns/actionbar.html&lt;br /&gt;
&lt;br /&gt;
==Menus e submenús básicos==&lt;br /&gt;
*Imos realizar unha aplicación con 3 menús (un deles con submenús e outro cunha icona na Barra de Acción).&lt;br /&gt;
*Antes imos ver distintas casuísticas:&lt;br /&gt;
&lt;br /&gt;
===Recursos Implicados===&lt;br /&gt;
*Os menús defínense nun recurso xml en &amp;#039;&amp;#039;&amp;#039;res/menu/nome_ficheiro.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Image:Android_2014_U5_01_Menus_08.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
*Dito recurso terá coma elementos:&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;&amp;lt;menu&amp;gt;&amp;#039;&amp;#039;&amp;#039;: elemento raíz. Contén &amp;lt;item&amp;gt; e &amp;lt;group&amp;gt;&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;&amp;lt;item&amp;gt;&amp;#039;&amp;#039;&amp;#039;: representa un elemento de menú. &lt;br /&gt;
***Tería que ter un elemento &amp;#039;&amp;#039;&amp;#039;&amp;lt;menu&amp;gt;&amp;#039;&amp;#039;&amp;#039; dentro de &amp;lt;item&amp;gt; para crear un submenú.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*O xml seguinte é o que se crea por defecto cando se crea un novo proxecto:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;7,8,9&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;menu xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    tools:context=&amp;quot;com.example.u5_01_menus.U5_01_Menus&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/action_settings&amp;quot;&lt;br /&gt;
        android:orderInCategory=&amp;quot;100&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;never&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;@string/action_settings&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/menu&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 7&amp;#039;&amp;#039;&amp;#039;: o atributo &amp;#039;&amp;#039;&amp;#039;android:orderInCategory=&amp;quot;Nº Enteiro&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Se hai varios ítems indica cal aparecerá primeiro, segundo, etc. Se todos teñen o mesmo valor entón aparecen na orde na que son creados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 8&amp;#039;&amp;#039;&amp;#039;: o atributo &amp;#039;&amp;#039;&amp;#039;android:showAsAction&amp;#039;&amp;#039;&amp;#039; pode ter os seguintes valores:&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;never&amp;#039;&amp;#039;&amp;#039;: nunca amosa o item de menú na barra de acción.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ifRoom&amp;#039;&amp;#039;&amp;#039;: se hai espazo na barra de acción o amosa.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;always&amp;#039;&amp;#039;&amp;#039;: amosa sempre na barra de acción.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;withText&amp;#039;&amp;#039;&amp;#039;: se temos unha icona, por defecto non amosa o texto. Se queremos que amose os dúos poñeremos este valor.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;collapseActionView&amp;#039;&amp;#039;&amp;#039;: cando a acción dun elemento de menú (declarada coma &amp;#039;&amp;#039;&amp;#039;android:actionLayout&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;android:actionViewClass&amp;#039;&amp;#039;&amp;#039;) é plegable. Dispoñible a&amp;#039;partires da versión API 14.&lt;br /&gt;
**Os elementos de menú que aparecen na barra, xa non aparecen no menú o premer o botón Menú ou &amp;quot;OverFlow&amp;quot;, aínda que estean nun group, como se pode apreciar nas imaxes de abaixo.&lt;br /&gt;
**Os valores pódense combinar có caracter ‘|’.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 9&amp;#039;&amp;#039;&amp;#039;: o atributo &amp;#039;&amp;#039;&amp;#039;android:title&amp;#039;&amp;#039;&amp;#039; indica o nome do menú/submenú. Neste caso o seu valor defínese nun recurso xml de strings:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;6&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string name=&amp;quot;app_name&amp;quot;&amp;gt;U5_01_Menus&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;string name=&amp;quot;hello_world&amp;quot;&amp;gt;Hello world!&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;string name=&amp;quot;action_settings&amp;quot;&amp;gt;Settings&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*O atributo &amp;#039;&amp;#039;&amp;#039;android:onClick&amp;#039;&amp;#039;&amp;#039; funciona igual que nas vistas do recurso xml do Layout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;EXEMPLO DE MENÚ NA BARRA DE ACCIÓN CON SUBMENUS&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
*A seguinte imaxe, obténse co seguinte recurso xml.&lt;br /&gt;
[[Image:Android_2014_U5_01_Menus_09.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;6,7,9,10-23,27,28,30,34,35,37&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menu xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/itemAbrir&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/open32&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;ifRoom&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;Abrir&amp;quot;&lt;br /&gt;
        android:titleCondensed=&amp;quot;Abrir&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;menu&amp;gt;&lt;br /&gt;
            &amp;lt;item&lt;br /&gt;
                android:id=&amp;quot;@+id/itemDoc&amp;quot;&lt;br /&gt;
                android:title=&amp;quot;Documento&amp;quot;&lt;br /&gt;
                android:titleCondensed=&amp;quot;Doc.&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;item&lt;br /&gt;
                android:id=&amp;quot;@+id/itemIma&amp;quot;&lt;br /&gt;
                android:title=&amp;quot;Imaxes&amp;quot;&lt;br /&gt;
                android:titleCondensed=&amp;quot;Imax.&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;item&lt;br /&gt;
                android:id=&amp;quot;@+id/itemAudio&amp;quot;&lt;br /&gt;
                android:title=&amp;quot;Audio&amp;quot;&lt;br /&gt;
                android:titleCondensed=&amp;quot;Audio&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/itemNovo&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/close32&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;ifRoom&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;Novo documento&amp;quot;&lt;br /&gt;
        android:titleCondensed=&amp;quot;N.Doc.&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/itemSair&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/exit32&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;ifRoom&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;Saír&amp;quot;&lt;br /&gt;
        android:titleCondensed=&amp;quot;Saír&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/menu&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 6,27,34&amp;#039;&amp;#039;&amp;#039;: Indican o recurso &amp;#039;&amp;#039;drawable&amp;#039;&amp;#039; que deben amosar. Estas imaxes deben estar na carpeta &amp;#039;&amp;#039;&amp;#039;/res/drawableXXXXX&amp;#039;&amp;#039;&amp;#039; correspondentes.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 7,28,35&amp;#039;&amp;#039;&amp;#039;: Indican que se hai espazo na barra de acción que amosen eses ítems que teñen ese atributo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 9,30,37&amp;#039;&amp;#039;&amp;#039;: O atributo &amp;#039;&amp;#039;&amp;#039;android:titleCondensed&amp;#039;&amp;#039;&amp;#039; usarase cando o valor de &amp;#039;&amp;#039;&amp;#039;android:title&amp;#039;&amp;#039;&amp;#039; sexa demasiado longo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 10-23&amp;#039;&amp;#039;&amp;#039;: Para crear submenús dentro dun menú, volvemos a crear a entrada &amp;lt;menu&amp;gt; dentro de &amp;lt;item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Agrupamentos====&lt;br /&gt;
*Outro elemento que pode ir dentro do elemento &amp;#039;&amp;#039;&amp;#039;&amp;lt;menu&amp;gt;&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;&amp;lt;group&amp;gt;&amp;#039;&amp;#039;&amp;#039;: un grupo é un conxunto de elementos que teñen certas características.&lt;br /&gt;
***Amosar ou ocultar todos os elementos: &amp;#039;&amp;#039;&amp;#039;setGroupVisible()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
***Habilitar ou deshabilitar todos os elementos: &amp;#039;&amp;#039;&amp;#039;setGroupEnabled()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
***Facer que todos os ítems do group poidan ser presentados en forma de checkbox: &amp;#039;&amp;#039;&amp;#039;setGroupCheckable()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
****Podemos facer que un elemento sexa chequeable usando o atributo &amp;#039;&amp;#039;&amp;#039;android:checkable&amp;#039;&amp;#039;&amp;#039; no elemento &amp;lt;item&amp;gt; ou o&lt;br /&gt;
****group enteiro con &amp;#039;&amp;#039;&amp;#039;&amp;#039;android:checkableBehavior&amp;#039;&amp;#039;&amp;#039; no elemento &amp;lt;group&amp;gt;.&lt;br /&gt;
****O atributo &amp;#039;&amp;#039;&amp;#039;android:checkableBehavior&amp;#039;&amp;#039;&amp;#039; pode ter as seguintes opcións:&lt;br /&gt;
*****&amp;#039;&amp;#039;&amp;#039;single&amp;#039;&amp;#039;&amp;#039;: só un elemento do grupo pode ser checkeado (radiobuttons).&lt;br /&gt;
*****&amp;#039;&amp;#039;&amp;#039;all&amp;#039;&amp;#039;&amp;#039;: todos os elementos poden ser checkeados (checkboxs).&lt;br /&gt;
*****&amp;#039;&amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;#039;: ningún elemento é seleccionable.&lt;br /&gt;
****Se non poñemos nada, os elementos do &amp;lt;group&amp;gt; aparecen como os demais.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*A seguinte imaxe, ten asociado o seguinte XML.&lt;br /&gt;
*Observar que na barra de acción non collen todos os menús.&lt;br /&gt;
*Observar que hai dous menús (Modo Lectura e Modo Gravación) que poden ser marcados os dous.&lt;br /&gt;
[[Image:Android_2014_U5_01_Menus_10.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;35,40-55&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menu xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/itemAbrir&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/open32&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;always&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;Abrir&amp;quot;&lt;br /&gt;
        android:titleCondensed=&amp;quot;Abrir&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;menu&amp;gt;&lt;br /&gt;
            &amp;lt;item&lt;br /&gt;
                android:id=&amp;quot;@+id/itemDoc&amp;quot;&lt;br /&gt;
                android:title=&amp;quot;Documento&amp;quot;&lt;br /&gt;
                android:titleCondensed=&amp;quot;Doc.&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;item&lt;br /&gt;
                android:id=&amp;quot;@+id/itemIma&amp;quot;&lt;br /&gt;
                android:title=&amp;quot;Imaxes&amp;quot;&lt;br /&gt;
                android:titleCondensed=&amp;quot;Imax.&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;item&lt;br /&gt;
                android:id=&amp;quot;@+id/itemAudio&amp;quot;&lt;br /&gt;
                android:title=&amp;quot;Audio&amp;quot;&lt;br /&gt;
                android:titleCondensed=&amp;quot;Audio&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/itemNovo&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/close32&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;ifRoom&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;Novo documento&amp;quot;&lt;br /&gt;
        android:titleCondensed=&amp;quot;N.Doc.&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/itemSair&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/exit32&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;ifRoom&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;Saír&amp;quot;&lt;br /&gt;
        android:titleCondensed=&amp;quot;Saír&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;group&lt;br /&gt;
        android:id=&amp;quot;@+id/mgrpModos&amp;quot;&lt;br /&gt;
        android:checkableBehavior=&amp;quot;all&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;item&lt;br /&gt;
            android:id=&amp;quot;@+id/ModoLect&amp;quot;&lt;br /&gt;
            android:showAsAction=&amp;quot;ifRoom&amp;quot;&lt;br /&gt;
            android:title=&amp;quot;Modo Lectura&amp;quot;&lt;br /&gt;
            android:titleCondensed=&amp;quot;M.Lect.&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;item&lt;br /&gt;
            android:id=&amp;quot;@+id/ModoRecord&amp;quot;&lt;br /&gt;
            android:showAsAction=&amp;quot;ifRoom&amp;quot;&lt;br /&gt;
            android:title=&amp;quot;Modo Grabación&amp;quot;&lt;br /&gt;
            android:titleCondensed=&amp;quot;M.Grab&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/menu&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 35,45,51&amp;#039;&amp;#039;&amp;#039;: Observar como estes ítems non se amosan na barra de acción porque non teñen espazo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas  40-55&amp;#039;&amp;#039;&amp;#039;: Observar como hai un agrupamento de ítems e na &amp;#039;&amp;#039;&amp;#039;liña 42&amp;#039;&amp;#039;&amp;#039; indícase que todos eles son &amp;quot;chequeables&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lanzar e procesar o menú===&lt;br /&gt;
*Para lanzar o menú debemos cambiar o menú que ten asinada unha determinada Activity e para iso temos que sobrescribir o método &amp;#039;&amp;#039;&amp;#039;onCreateOptionsMenu()&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Este método xa aparece na Activity cando a creamos con Eclipse.&lt;br /&gt;
*O que facemos en &amp;quot;inflar&amp;quot; o xml asociado ao menú (Liña 4) do mesmo xeito que se fai cando se &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;4&amp;quot; &amp;gt;&lt;br /&gt;
   @Override&lt;br /&gt;
        public boolean onCreateOptionsMenu(Menu menu) {&lt;br /&gt;
                // Inflate the menu; this adds items to the action bar if it is present.&lt;br /&gt;
                getMenuInflater().inflate(R.menu.u5_01__menus, menu);&lt;br /&gt;
                return true;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Cando se preme un ítem dun menú lánzase o evento onOptionsItemSelected e para procesar ese ítem  sobrescribir o método  &amp;#039;&amp;#039;&amp;#039;onOptionsItemSelected(MenuItem item)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Este método tamén se crea por defecto ao crear o proxecto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;9,11&amp;quot; &amp;gt;&lt;br /&gt;
        @Override&lt;br /&gt;
        public boolean onOptionsItemSelected(MenuItem item) {&lt;br /&gt;
                // Handle action bar item clicks here. The action bar will&lt;br /&gt;
                // automatically handle clicks on the Home/Up button, so long&lt;br /&gt;
                // as you specify a parent activity in AndroidManifest.xml.&lt;br /&gt;
 &lt;br /&gt;
               	int id = item.getItemId();&lt;br /&gt;
		if (id == R.id.action_settings) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
		return super.onOptionsItemSelected(item);&lt;br /&gt;
          }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Este método devolve un boolean:&lt;br /&gt;
**true: se procesamos un elemento do menú (return true).&lt;br /&gt;
**false: se non o procesamos (chamar ao método pai).&lt;br /&gt;
&lt;br /&gt;
===Caso pŕactico===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Crear o proxecto: &amp;#039;&amp;#039;&amp;#039;U5_01_Menus&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Menús básicos&amp;quot; widths=&amp;quot;350&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Image:Android_2014_U5_01_Menus_01.jpg| Observar como temos unha icona na barra de acción (a cara) e o menú &amp;quot;overflow&amp;quot;&lt;br /&gt;
Image:Android_2014_U5_01_Menus_02.jpg| Se prememos na cara realízase unha acción, neste caso cambiouse o texto do TextView e lanzaouse un Toast.&lt;br /&gt;
Image:Android_2014_U5_01_Menus_03.jpg| Se prememos no menú &amp;quot;overflow&amp;quot; obtemos outros 2 menús ...&lt;br /&gt;
Image:Android_2014_U5_01_Menus_04.jpg| Os mesmos que se premmos no botón menú da Botonera dos dispositivos que a teñan.&lt;br /&gt;
Image:Android_2014_U5_01_Menus_05.jpg| Se prememos en calquera dos dous casos anteriores no menú &amp;quot;Opción2&amp;quot; lánzase un Toast e cambiouse o texto do TextView.&lt;br /&gt;
Image:Android_2014_U5_01_Menus_06.jpg| Se prememos na &amp;quot;Opcion 3 - Submenús&amp;quot; obtemos os submenús asociados a ese ítem.&amp;lt;br&amp;gt; Podemos:&amp;lt;br&amp;gt; Lanzar a calculadora ou &amp;lt;br&amp;gt; saír da aplicación.&lt;br /&gt;
Image:Android_2014_U5_01_Menus_07.jpg| Neste caso lanzouse a calculadora e un Toast.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====As imaxes dos menús====&lt;br /&gt;
*Neste caso colocouse en cada recurso &amp;#039;&amp;#039;&amp;#039;res/drawable&amp;#039;&amp;#039;&amp;#039; a imaxe da cara:&lt;br /&gt;
[[Image:Android_2014_U5_01_Menus_11.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Esta imaxe pode obterse do seguinte zip: [[media:Res.zip]] e unha vez descomprimido pódese copiar tal cal ao proxecto a &amp;quot;res&amp;quot;&lt;br /&gt;
*Estas imaxes e outras poden obterse de:&lt;br /&gt;
**http://www.androidicons.com/&lt;br /&gt;
**http://www.glyfx.com/content/page/android-common-ii.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Recursos XML====&lt;br /&gt;
*O xml do &amp;#039;&amp;#039;&amp;#039;Layout&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
*É o creado por defecto salvo que lle engadimos un id (Liñas 11).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;11&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;RelativeLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:paddingBottom=&amp;quot;@dimen/activity_vertical_margin&amp;quot;&lt;br /&gt;
    android:paddingLeft=&amp;quot;@dimen/activity_horizontal_margin&amp;quot;&lt;br /&gt;
    android:paddingRight=&amp;quot;@dimen/activity_horizontal_margin&amp;quot;&lt;br /&gt;
    android:paddingTop=&amp;quot;@dimen/activity_vertical_margin&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
        android:id=&amp;quot;@+id/tv&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;@string/hello_world&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*O xml do &amp;#039;&amp;#039;&amp;#039;menú&amp;#039;&amp;#039;&amp;#039; (modificamos o recurso XML creado por defecto en /res/menu/...)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;8,9,13,14,19,20&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;menu xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    tools:context=&amp;quot;com.example.u5_01_menus.U5_01_Menus&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/item1&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/ic_action_emo_basic&amp;quot;&lt;br /&gt;
        android:orderInCategory=&amp;quot;100&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;always&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;@string/item1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/item2&amp;quot;&lt;br /&gt;
        android:orderInCategory=&amp;quot;100&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;never&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;@string/item2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/item3&amp;quot;&lt;br /&gt;
        android:orderInCategory=&amp;quot;100&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;never&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;@string/item3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;menu&amp;gt;&lt;br /&gt;
            &amp;lt;item&lt;br /&gt;
                android:id=&amp;quot;@+id/SubItem3_1&amp;quot;&lt;br /&gt;
                android:title=&amp;quot;@string/item3_1&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;item&lt;br /&gt;
                android:id=&amp;quot;@+id/SubItem3_2&amp;quot;&lt;br /&gt;
                android:title=&amp;quot;@string/item3_2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/menu&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 8,13,18&amp;#039;&amp;#039;&amp;#039;: Observar como todos os ítems teñen o mesmo valor para a ser ordenados. &lt;br /&gt;
**Que o participante no curso probe a cambiar o terceiro ítem a un valor de 99.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 9,14,19&amp;#039;&amp;#039;&amp;#039;: Observar como o primeiro ítem indica always e os demais never á hora de amosar o menú na barra de acción.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Recurso xml de &amp;#039;&amp;#039;&amp;#039;strings&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Aínda que podíamos poñer os Títulos dos menús directamente no ficheiro anterior, decidimos, nesta ocasión, realizalo da maneira recomendada: definir os seus valores nun recurso xml.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;6-10&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string name=&amp;quot;app_name&amp;quot;&amp;gt;U5_01_Menus&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;string name=&amp;quot;hello_world&amp;quot;&amp;gt;Hello world!&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;string name=&amp;quot;item1&amp;quot;&amp;gt;Opción 1&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;string name=&amp;quot;item2&amp;quot;&amp;gt;Opción 2&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;string name=&amp;quot;item3&amp;quot;&amp;gt;Opción 3- Submenús&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;string name=&amp;quot;item3_1&amp;quot;&amp;gt;Opción 3- Submenú 1 - Calculadora&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;string name=&amp;quot;item3_2&amp;quot;&amp;gt;Opción 3- Submenú 2 - Saír&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====O código java da aplicación====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;38-62&amp;quot; &amp;gt;&lt;br /&gt;
package com.example.u5_01_menus;&lt;br /&gt;
&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.content.Intent;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.view.Menu;&lt;br /&gt;
import android.view.MenuItem;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
import android.widget.Toast;&lt;br /&gt;
&lt;br /&gt;
public class U5_01_Menus extends Activity {&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_u5_01__menus);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onCreateOptionsMenu(Menu menu) {&lt;br /&gt;
		// Inflate the menu; this adds items to the action bar if it is present.&lt;br /&gt;
		getMenuInflater().inflate(R.menu.u5_01__menus, menu);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onOptionsItemSelected(MenuItem item) {&lt;br /&gt;
		// Handle action bar item clicks here. The action bar will&lt;br /&gt;
		// automatically handle clicks on the Home/Up button, so long&lt;br /&gt;
		// as you specify a parent activity in AndroidManifest.xml.&lt;br /&gt;
	/*&lt;br /&gt;
		int id = item.getItemId();&lt;br /&gt;
		if (id == R.id.action_settings) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
		return super.onOptionsItemSelected(item);&lt;br /&gt;
 	*/&lt;br /&gt;
		TextView tv = (TextView) findViewById(R.id.tv);&lt;br /&gt;
		Toast.makeText(getApplicationContext(), &amp;quot;Pulsado elemento: &amp;quot; + item.getTitle().toString(), Toast.LENGTH_SHORT).show();&lt;br /&gt;
&lt;br /&gt;
		switch (item.getItemId()) {&lt;br /&gt;
		case R.id.item1:&lt;br /&gt;
			tv.setText(&amp;quot;Quedarei con esta cara de sorriso cando remate esta tarefa&amp;quot;);&lt;br /&gt;
			return true;&lt;br /&gt;
&lt;br /&gt;
		case R.id.item2:&lt;br /&gt;
			tv.setText(&amp;quot;A opción 2 non ten nada asignado&amp;quot;);&lt;br /&gt;
			return true;&lt;br /&gt;
&lt;br /&gt;
		case R.id.SubItem3_1:&lt;br /&gt;
			Intent intent = new Intent();&lt;br /&gt;
			intent.setClassName(&amp;quot;com.android.calculator2&amp;quot;, &amp;quot;com.android.calculator2.Calculator&amp;quot;);&lt;br /&gt;
			startActivity(intent);&lt;br /&gt;
			return true;&lt;br /&gt;
&lt;br /&gt;
		case R.id.SubItem3_2:&lt;br /&gt;
			finish();&lt;br /&gt;
			return true;&lt;br /&gt;
		default:&lt;br /&gt;
			return super.onOptionsItemSelected(item);&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void finish() {&lt;br /&gt;
		super.finish();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 39&amp;#039;&amp;#039;&amp;#039;: Recollemos o título do ítem pulsado.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 44,48,54,58&amp;#039;&amp;#039;&amp;#039;: devolver true no caso de procesar cada un dos ítems.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 60&amp;#039;&amp;#039;&amp;#039;: Se non se procesou o ítem chamar ao pai, que vai devolver false por defecto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Se na definición de cada ítem se houbera usado o atributo &amp;#039;&amp;#039;&amp;#039;android:onClick&amp;#039;&amp;#039;&amp;#039; entón teríamos que crear en java os métodos correspondentes do mesmo xeito que se fai cando se usa ese atributo nun Layout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Menús contextuais==&lt;br /&gt;
*Pódense crear sobre calquera elemento View, pero normalmente vanse usar con ListView e GridView.*&lt;br /&gt;
*Existen dúas formas de implantar este tipo de menús:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Menú contextual flotante&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*O menú aparece cando o usuario prema durante un tempo longo un elemento e aparece unha lista.&lt;br /&gt;
[[Image:Android_2014_U5_02_MenusContextuais_01.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para crear este tipo de menú:&lt;br /&gt;
*O View que queira usalo ten que ser asociado ao mesmo chamando o método &amp;#039;&amp;#039;&amp;#039;registerForContextMenu&amp;#039;&amp;#039;&amp;#039; pasando o obxecto View.&lt;br /&gt;
*Se todos os elementos do ListView / GridView teñen o mesmo menú contextual, se pode pasar como parámetro o ListView / GridView.&lt;br /&gt;
*Por exemplo (isto se fai no método onCreate): &amp;#039;&amp;#039;&amp;#039;registerForContextMenu(lista);&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
**Sendo lista a referencia a unha ListView.&lt;br /&gt;
&lt;br /&gt;
*Implantar o método &amp;#039;&amp;#039;&amp;#039;onCreateContextMenu()&amp;#039;&amp;#039;&amp;#039; na Activity / Fragment.&lt;br /&gt;
**Este método será chamado de forma automática cando o usuario preme durante un tempo o elemento (View) asociado o ContextMenu.&lt;br /&gt;
**O que fai este método é amosar o menú contextual creado por nós previamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;5&amp;quot; &amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {&lt;br /&gt;
    super.onCreateContextMenu(menu, v, menuInfo);&lt;br /&gt;
    MenuInflater inflater = getMenuInflater();&lt;br /&gt;
    inflater.inflate(R.menu.context_menu, menu);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Lembrar que o MenuInflater serve para pasar dun arquivo XML (o menú contextual definido por nós) a obxectos MenuItems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Implantar o método &amp;#039;&amp;#039;&amp;#039;onContextItemSelected()&amp;#039;&amp;#039;&amp;#039; ao que se chama de forma automática cando se selecciona algo do menú contextual&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;3,4&amp;quot; &amp;gt;&lt;br /&gt;
        @Override&lt;br /&gt;
	public boolean onContextItemSelected(MenuItem item) {&lt;br /&gt;
		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();&lt;br /&gt;
		switch (item.getItemId()) {&lt;br /&gt;
		case R.id.edit:&lt;br /&gt;
			editNote(info.id);&lt;br /&gt;
			return true;&lt;br /&gt;
		case R.id.delete:&lt;br /&gt;
			deleteNote(info.id);&lt;br /&gt;
			return true;&lt;br /&gt;
		default:&lt;br /&gt;
			return super.onContextItemSelected(item);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 3&amp;#039;&amp;#039;&amp;#039;. Do ítem pulsado recibimos información extra, entre outras, o &amp;quot;id&amp;quot; e a &amp;quot;posición&amp;quot; do ítem do adaptador sobre o que se pulsou durante un tempo para crear o menú contextual.&lt;br /&gt;
**Ese &amp;quot;id&amp;quot; e &amp;quot;posición&amp;quot; son recollidos na variable info de tipo AdapterContextMenuInfo. &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 4&amp;#039;&amp;#039;&amp;#039;: fixarse que é &amp;#039;&amp;#039;&amp;#039;item.getItemId()&amp;#039;&amp;#039;&amp;#039; para obter referencia ao id do menú contextual que foi seleccionado. Non confundir co id do elemento do adaptador sobre o que foi creado ese menú contextual.&lt;br /&gt;
*O resto funciona igual que non menú básico.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Menú de modo acción contextual&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*Neste caso, o menú aparece nunha barra de acción contextual na parte superior da pantalla (só dispoñible a partires da versión 3.0 API11).[[Image:Android_2014_U5_02_MenusContextuais_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
*O funcionamento é semellante ao anterior e deixamos para o participante no curso o seguinte enlace para que afonde no seu funcionamento: &lt;br /&gt;
**http://developer.android.com/guide/topics/ui/menus.html#CAB&lt;br /&gt;
&lt;br /&gt;
===Menú contextual: Caso Práctico===&lt;br /&gt;
*Neste caso vanse crear dous menús contextuais distintos:&lt;br /&gt;
**un para unha etiqueta (TextView) &lt;br /&gt;
**e outro para unha lista (ListView).&lt;br /&gt;
&lt;br /&gt;
*Crear o proxecto: &amp;#039;&amp;#039;&amp;#039;U5_02_MenusContextuais&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Creación dunha segunda Activity&amp;quot; widths=&amp;quot;350&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_03.jpg| A aplicación ten unha etiqueta de texto (Hello world!) e unha lista.&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_04.jpg| Se prememos durante un anaco sobre a etiqueta de texto aparece o menú contextual da imaxe. Se seleccionamos a primeira opción dese menú contextual ...&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_05.jpg| ... obtemos un Toast que nos di que seleccionamos esa opción.&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_06.jpg| Se prememos por un anaco sobre un elemento da lista, por exemplo sobre Mango, obtemos outro menú contextual distinto. Se prememos na opción borrar ...&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_07.jpg| ... bórrase o elemento da lista&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_08.jpg| Se prememos por un anaco de tempo sobre outro elemento, por exemplo Laranxa, e seleccionamos Duplicar do menú contextual ...&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_09.jpg| ... duplicamos o elemento na lista.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Menú contextual: O XML do Layout===&lt;br /&gt;
&lt;br /&gt;
*Conservamos o TextView que vén por defecto e engadimos un ListView. &lt;br /&gt;
*Ao TextView engadímoslle un id.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;41&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
    android:padding=&amp;quot;@dimen/activity_vertical_margin&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
        android:id=&amp;quot;@+id/tv&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;@string/hello_world&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;ListView&lt;br /&gt;
        android:id=&amp;quot;@+id/lvFroitas&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;/ListView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menú contextual: O XML dos menús contextuais===&lt;br /&gt;
*Imos crear dous recursos xml para cada un dos menús contextuais distintos que temos segundo premamos sobre un TextView ou sobre un ListView.&lt;br /&gt;
*Poderían ser o mesmo menú contextual, pero así aprendemos que estes poden ser distintos en función da View ao que se asocien.&lt;br /&gt;
&lt;br /&gt;
[[Image:Android_2014_U5_02_MenusContextuais_10.jpg]]&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;O xml de /res/menu/menu_contextual_etiqueta.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;41&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menu xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/tvItem1&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;withText&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;TextView opción 1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/tvItem2&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;withText&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;TextView opción 2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/menu&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;O xml de /res/menu/menu_contextual_lista.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;41&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menu xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/lvItemBorrar&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;withText&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;Borrar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item&lt;br /&gt;
        android:id=&amp;quot;@+id/lvItemDuplicar&amp;quot;&lt;br /&gt;
        android:showAsAction=&amp;quot;withText&amp;quot;&lt;br /&gt;
        android:title=&amp;quot;Duplicar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/menu&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Observar que nos dous ficheiros xml cada item ten asociado un &amp;quot;id&amp;quot;, para logo ser identificado o ítem cando sexa procesado no código.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Menú contextual: o código Java da aplicación===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;30,55-69, 71-83,85-116&amp;quot; &amp;gt;&lt;br /&gt;
package com.example.u5_02_menuscontextuais;&lt;br /&gt;
&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.view.ContextMenu;&lt;br /&gt;
import android.view.ContextMenu.ContextMenuInfo;&lt;br /&gt;
import android.view.Menu;&lt;br /&gt;
import android.view.MenuInflater;&lt;br /&gt;
import android.view.MenuItem;&lt;br /&gt;
import android.view.View;&lt;br /&gt;
import android.widget.AdapterView.AdapterContextMenuInfo;&lt;br /&gt;
import android.widget.ArrayAdapter;&lt;br /&gt;
import android.widget.ListView;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
import android.widget.Toast;&lt;br /&gt;
&lt;br /&gt;
public class U5_02_MenusContextuais extends Activity {&lt;br /&gt;
	ListView lv;&lt;br /&gt;
	TextView tv;&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_u5_02__menus_contextuais);&lt;br /&gt;
&lt;br /&gt;
		lv = (ListView) findViewById(R.id.lvFroitas);&lt;br /&gt;
		tv = (TextView) findViewById(R.id.tv);&lt;br /&gt;
		registerForContextMenu(tv);&lt;br /&gt;
&lt;br /&gt;
		engadirDatosListView();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onCreateOptionsMenu(Menu menu) {&lt;br /&gt;
		// Inflate the menu; this adds items to the action bar if it is present.&lt;br /&gt;
		getMenuInflater().inflate(R.menu.u5_02__menus_contextuais, menu);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onOptionsItemSelected(MenuItem item) {&lt;br /&gt;
		// Handle action bar item clicks here. The action bar will&lt;br /&gt;
		// automatically handle clicks on the Home/Up button, so long&lt;br /&gt;
		// as you specify a parent activity in AndroidManifest.xml.&lt;br /&gt;
		int id = item.getItemId();&lt;br /&gt;
		if (id == R.id.action_settings) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
		return super.onOptionsItemSelected(item);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private void engadirDatosListView() {&lt;br /&gt;
		String[] froitas = new String[] { &amp;quot;Laranxa&amp;quot;, &amp;quot;Mango&amp;quot;, &amp;quot;Ameixa&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
		ArrayList&amp;lt;String&amp;gt; alFroitas = new ArrayList&amp;lt;String&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
		alFroitas.addAll(Arrays.asList(froitas));&lt;br /&gt;
&lt;br /&gt;
		ArrayAdapter&amp;lt;String&amp;gt; adaptador = new ArrayAdapter&amp;lt;String&amp;gt;(this, android.R.layout.simple_list_item_1, alFroitas);&lt;br /&gt;
&lt;br /&gt;
		adaptador.setDropDownViewResource(android.R.layout.simple_list_item_1);&lt;br /&gt;
&lt;br /&gt;
		lv.setAdapter(adaptador);&lt;br /&gt;
&lt;br /&gt;
		registerForContextMenu(lv);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {&lt;br /&gt;
		super.onCreateContextMenu(menu, v, menuInfo);&lt;br /&gt;
		MenuInflater inflater = getMenuInflater();&lt;br /&gt;
&lt;br /&gt;
		// Comprobamos se o menú contextual se lanzou sobre a etiqueta ou sobre&lt;br /&gt;
		// a lista&lt;br /&gt;
		if (v.getId() == R.id.tv)&lt;br /&gt;
			inflater.inflate(R.menu.menu_contextual_etiqueta, menu);&lt;br /&gt;
&lt;br /&gt;
		else if (v.getId() == R.id.lvFroitas)&lt;br /&gt;
			inflater.inflate(R.menu.menu_contextual_lista, menu);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onContextItemSelected(MenuItem item) {&lt;br /&gt;
		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();&lt;br /&gt;
		ArrayAdapter&amp;lt;String&amp;gt; adaptador = (ArrayAdapter&amp;lt;String&amp;gt;) lv.getAdapter();&lt;br /&gt;
&lt;br /&gt;
		switch (item.getItemId()) {&lt;br /&gt;
&lt;br /&gt;
		// Ítems premidos sobre o TextView&lt;br /&gt;
		// Lanza un Toast coa opción do menú contextual que se seleccinou&lt;br /&gt;
		case R.id.tvItem1:&lt;br /&gt;
			Toast.makeText(this, &amp;quot;Menú contextual TextView:\n&amp;quot;+item.getTitle(), Toast.LENGTH_SHORT).show();&lt;br /&gt;
			return true;&lt;br /&gt;
&lt;br /&gt;
		case R.id.tvItem2:&lt;br /&gt;
			Toast.makeText(this, &amp;quot;Menú contextual TextView:\n&amp;quot;+item.getTitle(), Toast.LENGTH_SHORT).show();&lt;br /&gt;
			return true;&lt;br /&gt;
&lt;br /&gt;
		// Ítems premidos sobre o ListView&lt;br /&gt;
		case R.id.lvItemBorrar:&lt;br /&gt;
			adaptador.remove(adaptador.getItem(info.position));&lt;br /&gt;
			adaptador.setNotifyOnChange(true);&lt;br /&gt;
			return true;&lt;br /&gt;
&lt;br /&gt;
		case R.id.lvItemDuplicar:&lt;br /&gt;
			adaptador.add(adaptador.getItem(info.position));&lt;br /&gt;
			adaptador.setNotifyOnChange(true);&lt;br /&gt;
&lt;br /&gt;
			return true;&lt;br /&gt;
		default:&lt;br /&gt;
			return super.onContextItemSelected(item);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 30&amp;#039;&amp;#039;&amp;#039;: indicamos que TextView vai ter un menú contextual asociado.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 55-69&amp;#039;&amp;#039;&amp;#039;: Creamos un Array estático que logo asignamos a un dinámico.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;Liña 62&amp;#039;&amp;#039;&amp;#039;: usamos o array dinámico para logo en tempo de execución poder engadir/borrar elementos do adaptador e por tanto do ListView.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;Liña 68&amp;#039;&amp;#039;&amp;#039;: indica que o ListView de froitas vai ter un menú contextual asociado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 71-83&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;&amp;#039;onCreateContexMenu()&amp;#039;&amp;#039;&amp;#039; vai ser chamado cando se prema durante un anaco sobre unha view, neste caso comprobamos sobre que view se premeu e lánzase (&amp;quot;inflase&amp;quot;) o correspondente menú contextual, cada un deles definido nun ficheiro xml distinto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 85-116&amp;#039;&amp;#039;&amp;#039;: En función do id do ítem premido realizamos unhas accións ou outras como no caso dos menús básicos. Só que neste caso os ids proveñen de ítems de menús declarados en 2 ficheiros distintos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Personalizar título do menú contextual====&lt;br /&gt;
*Se queremos que o menú contextual teña un título debemos usar o método: &amp;#039;&amp;#039;&amp;#039;setHeaderTitle()&lt;br /&gt;
&lt;br /&gt;
*As seguintes imaxes amosan un exemplo para o caso do TextView e o ListView:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Títulos para os menús contextuais&amp;quot; widths=&amp;quot;350&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_11.jpg| Neste caso o título do menú contextual é &amp;quot;Etiqueta de texto&amp;quot;&lt;br /&gt;
Image:Android_2014_U5_02_MenusContextuais_12.jpg| Neste outro é o título do ítem do ListView sobre o que se premeu.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Os cambios a realizar no &amp;#039;&amp;#039;&amp;#039;código Java&amp;#039;&amp;#039;&amp;#039; son os seguintes:&lt;br /&gt;
*No memento no que hai que crear o menú contextual:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;9,14&amp;quot; &amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {&lt;br /&gt;
		super.onCreateContextMenu(menu, v, menuInfo);&lt;br /&gt;
		MenuInflater inflater = getMenuInflater();&lt;br /&gt;
&lt;br /&gt;
		// Comprobamos se o menú contextual se lanzou sobre a etiqueta ou sobre&lt;br /&gt;
		// a lista&lt;br /&gt;
		if (v.getId() == R.id.tv){&lt;br /&gt;
			menu.setHeaderTitle(&amp;quot;Etiqueta de texto&amp;quot;);&lt;br /&gt;
			inflater.inflate(R.menu.menu_contextual_etiqueta, menu);&lt;br /&gt;
		}&lt;br /&gt;
		else if (v.getId() == R.id.lvFroitas) {&lt;br /&gt;
			AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;&lt;br /&gt;
			menu.setHeaderTitle(lv.getAdapter().getItem(info.position).toString());&lt;br /&gt;
			inflater.inflate(R.menu.menu_contextual_lista, menu);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 9,14&amp;#039;&amp;#039;&amp;#039;: establecemos o título para o menú contextual.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2015).&lt;/div&gt;</summary>
		<author><name>Carrion</name></author>
	</entry>
</feed>