Ok. Vamos a ver ahora cómo crear todos nuestros tipos de menús que podemos tener en Android. Vamos a crear un menú de opciones, un menú de contexto y también un menú pop up. Voy a comenzar creando un menú de opciones. Sabemos que el menú de opciones es aquel que aparece en la parte superior de nuestra barra. De nuestro action bar. Entonces vamos a comenzar por ahí. Primeramente tenemos que decir que un menú en términos del proyecto de Android también se considera un recurso. Tenemos dos formas. De crear menús en Android es a través de recursos XML. Y la otra es también a través de código Java. Solamente código Java. La forma como vamos a estar trabajando en este momento es a través de un recurso XML. Entonces lo primero que tengo que hacer es precisamente crear ese recurso. Entonces estoy situada en la carpeta RES. Bueno, antes de esto pues simplemente debo decir que tengo un proyecto. He creado un proyecto de Android. Un proyecto que se llama Menú.opciones.contexto.pop-up. Y lo único que tengo es nuestro activity por default. Y you. Es todo lo que tenemos. Entonces creamos nuestro menú como recurso. Voy a darle click derecho en RES. New. Y vamos a colocar Android resource file. En file name podemos colocar menú de opciones. Y en values. Aquí vamos a colocar precisamente qué tipo de recurso es el menú que estamos creando. O el archivo que estamos creando. Precisamente en la opción de resource type. Vamos a colocar que es un tipo menú. Bien. Entonces a continuación you se creó nuestro recurso. Igualmente es una etiqueta XML. Y podemos comenzar a añadir menús a través de la etiqueta item. Ok. Voy a colocar aquí item, item y cerramos nuestra etiqueta. Bien, he dejado un espacio porque voy a comenzar a escribir propiedades a este item. Lo primero que voy a ponerle a este item es un Android id. Un id. [TYPING] Así. Vamos a hacer un menú de opciones. Únicamente va a tener dos opciones. A lo mejor podemos decir un menú de about o de acerca de nosotros o acerca de esta aplicación. Y otro menú podemos definirlo como un menú de settings, un menú de configuraciones de la aplicación. Entonces puedo colocar aquí, yo puedo poner m, about. Y ahorita vamos a continuar escribiendo cosas ahí, mientras tanto voy a declarar mi siguiente menú, voy a colocar Android dos puntos id, y vamos a colocar que es arroba más id, m settings. Menu settings. Bien. Lo siguiente que tengo que colocarle a este menú, voy a empezar a dar un par de saltos de línea, para acomodar mejor mis etiquetas y mis propiedades. Bien, lo siguiente es el texto que va decir mi menú. Entonces voy a colocar la propiedad Android, dos puntos title, e iré a continuación a mi archivo strings. A dar de alta, precisamente, los textos que van a responder este menú. Entonces primero dijimos que debe ser menu about, y vamos a poner about Posteriormente tenemos nuestro menú de settings, y vamos a colocar. Settings. Bien, entonces regreso a mi archivo de xml de menú de opciones. Y haciendo referencia a voy a colocar el menú about y lo mismo para el menú settings. Android title menu settings. Bien, como observas pues éstos son atributos obligatorios. Por lo menos el título es un atributo obligatorio que debe estar ubicado en la etiqueta item. Ok, entonces voy agregar un último parámetro, Android dos puntos, order in category. Y vamos a ponerle que el orden en la categoría, este atributo es básicamente para poder estar ordenando mis menús, tener un ordenamiento. ¿Cuál va aparecer antes, cuál va aparecer después? Entonces voy a ponerle que tenga cien, y el otro. Eso realmente pues es un número que tú puedes definir que es libre, que puedes tener, básicamente tu puedes basarte en lo que tú quieras para colocar este número. Entonces no hay ningún problema. Ok, you tenemos aquí nuestros menús de de opciones. Entonces ahora debemos ir a implementarlos en nuestro main activity. Tenemos nuestro layout que hasta ahorita está así, se ve de ésta forma. Y la idea es que nuestro menú de opciones va aparecer de pronto tres puntitos en esta zona que está aquí, y ésto va responder a nuestro menú de opciones. Colocaremos en nuestro main activity. Vamos a sobre escribir el método on create options menu. On create options menu. Este método, pues como su nombre nos dice, pues nos va crear un menú de opciones. ¿Y qué es lo que hará este método? Pues básicamente tomará nuestro layout que acabamos de crear, nuestro recurso menú, y lo va a inflar en la vista, lo va mostrar en la vista. Entonces para esto, en vez de retornar esto que me está diciendo aquí, on create options menu. Voy a decirle get menu inflater, punto inflate. Y lo que recibe aquí es el recurso que acabamos de definir. R punto menú, punto menú de opciones. Aquí le vamos a colocar el objeto menú que estamos recibiendo por aquí. Menú. Éste que está aquí es lo que pasamos aquí. Y finalmente devolvemos true. Listo. Ok. Si nosotros corremos esto, you podremos estar viendo un menú de opciones. Vamos a correr nuestro proyecto y vamos a ponerle por aquí, tenemos nuestro teléfono you listo. Vamos a esperar a que se construya. Ok. you he terminado de construirlo. Y entonces, como observamos, you podemos ver en esta zona. you podemos ver nuestros tres puntitos. Y ahí you vemos nuestro menú, about y settings. Bien, aparece primeramente about y después settings. Vamos a colocar aquí un poco de movimiento. Un poco de acción a estas dos opciones. Y vamos a controlar las opciones de este menú, sobre-escribiendo el método on options item selected. Con este método. Aquí es donde nosotros podemos controlar que si selecciono about o si selecciono settings qué es lo que va suceder. Entonces, ¿cómo voy a controlar ésto? Bien, voy a dar un par de enters en este return. Y voy a controlarlo a partir del id que corresponde a cada elemento. Ok, recuerdas que para about seleccionamos. Definimos más bien, el id m about. Y para settings definimos el m id m settings. Entonces, a partir de estos ids que definimos, es como vamos a poder identificar cuál es el menú que alguien ha seleccionado. Entonces lo haremos a través de un switch. Tenemos que estar comparando cuál es el menú que seleccionamos. Entonces tengo aquí mi switch. Lo que va a recibir es, si observas, tengo aquí el parámetro menú ítem. Lo que devuelve, o más bien lo que recibe este método. Está recibiendo el ítem del menú seleccionado. Entonces quiere decir que éste. Quiere decir que cuando yo doy click en about, ese elemento se pasa como parámetro en este método. Entonces yo you puedo preguntarle al ítem. Puedo decir item.get item id. Yo puedo preguntarle a ese ítem por su id. Y lo que me va devolver. Puedo poner case, R.id. Si el id es m about, entonces, puedes hacer algo por aquí. Mientras tanto voy a poner solamente un break. Y con otro case, puedo decir si R punto id es settings, el menú settings, entonces pues haz algo. Ok. Bien, entonces aquí adentro es donde, bueno si yo voy a ir a la ventana de about, pues yo puedo aquí levantar un intent. Vamos a crear una segunda actividad. Vamos a crear click derecho, new empty activity y vamos a ponerle activity about. Ok. Activity about. Y también vamos a crear nuestro activity settings. Activity settings. Bien, entonces simplemente para fines demostrativos, vamos a añadir un par de text views que simplemente digan activity about y activity settings. Entonces estos textos los voy a dar de alta en mi archivo. Vamos a poner texto, en archivo strings, vamos a poner texto about, y le vamos a poner about. Podrías reciclar las variables anteriores de menú settings. Pero la verdad es que como tienen diferente identificador. No me conviene para mi proyecto. Entonces simplemente voy a colocar aquí un text view. Vamos a ponerle grab content. Grab content ponemos su android id, text view about. Y le ponemos su texto. Ok, este mismo lo voy a copiar Aquí va a aparecer, aquí está about. Éste mismo lo voy a copiar y lo voy a pegar también en el de settings. Ok. Simplemente le voy a cambiar los datos, settings, y acá también settings. Listo, bien, entonces you tengo mis dos actividades en menú about, aquí voy a decirle intent. Intent. Igual a new, en donde estoy ubicada y a dónde quiero ir. Quiero ir a about activity. Activity about, punto class [TYPING] start activity, intent. Y voy a copiar este fragmento de código. Lo pegaré por aquí también en settings porque básicamente hará lo mismo. Vamos a colocar aquí activity settings. Vamos a cambiarle el nombre al objeto. Así, listo. Entonces podemos correr ésto. Vamos a esperar Ok, entonces al darle about me está llevando a la pantalla de about. Regreso. Al darle settings me está llevando a la pantalla de settings. De esa forma es como yo puedo estar controlando Los menús de opciones en mi proyecto. Ok. Entonces ahora veamos cómo crear un menú de contexto. Lo que voy hacer es, voy a ir a mi activity main punto xml. Y recuerda que un menú de contexto es aquel menú que aparece cuando tú te quedas bastante tiempo presionando un elemento. Un largo tiempo presionando un elemento. Y entonces sale el menú de contexto. Lo que vamos hacer es que este Hello World. Mientras si yo me quedo presionándolo un momento, de pronto aparezca nuestro menú de contexto. Ok, entonces vamos. Primeramente a declarar las opciones del menú de contexto. Entonces you tengo aquí mi carpeta menú, menú de opciones, recuerda que es para un menú de opciones que aparece en la parte superior. Ahora voy a darle clic derecho, new, menu resource file. Y le voy a decir menú de contexto. Le damos enter. you tengo aquí mi menú de contexto. Entonces únicamente. Voy a declarar un par de items. Si quiero, nada mas vamos a cambiar ese texto de "Hello World" donde vamos a poner el nombre de una persona. Y a lo mejor vamos a decir que si alguien deja presionado ese texto pues puedes, por un lado, eliminar el elemento o por otro lado podrías editar el elemento. Entonces vamos a declarar nuestro item, vamos a declarar dos items. Recuerda, primeramente colocamos android:id. Y colocaremos m editar. Y al otro le colocaremos. Android. M eliminar. Podremos manejarlos en inglés. Delete. Edit y delete. Bien, ahora, vamos a nuestro archivo strings para colocar los textos que deben tener estos menús. Voy a mi archivo strings, colocaré menú, edit, string, menú, delete, delete, así. Listo, you están mis textos. Regreso a mi menú de contexto, y ahora con la propiedad Android title arroba string, menu edit. Y el otro android title arroba string, menú, delete. you tengo mis dos menús listos. Ahora vamos, precisamente a darles vida a estos menús. Vamos a nuestro archivo main activity. Nos traemos aquí nuestro archivo main activity. Tenemos nuestros antiguos métodos OnCreate options menú y on options items selected. Debajo de ese método voy a sobrescribir el método OnCreate context menu. OnCreate context menu, aquí me aparece. Voy a dejar ese super tal cual como está. Este método lo que hará será precisamente crearnos o mostrarnos un menú de contexto. Crear el menú de contexto cuando dejes presionado un largo tiempo algún view, algún elemento. Puede ser un botón, puede ser un text view como lo vamos a hacer ahora, puede ser una imagen, puede ser lo que tú quieras. Entonces, primeramente voy a colocar mi menú, inflater. Voy a colocar aquí inflater igual a new, menu inflater y le vamos a pasar el contexto. Ahora, a través de un switch como la forma anterior, donde tenemos nuestro on create options menú. También aquí vamos a get menu inflater y vamos a inflar un menú, pero en nuestro caso un menú de contexto. Entonces vamos a ponerle get menu inflater punto inflate, y entonces va a recibir el recurso. Vamos a poner R punto menú punto menú de contexto, ese es el menú que necesitamos. Y por último pasamos el objeto menú. Que si observas en comparación con el anterior, el anterior era un objeto de tipo menú, un menú simple, un menú por default. Este objeto que vamos a pasar es un menú de tipo contexto. Menú. Y listo. Aquí lo que estará haciendo será que nos está creando un menú de contexto. Entonces ahora vamos a nuestro activity main. Vamos a hacer que este text view pues esté preparado para levantar el menú de contexto, el método que acabamos de crear. Entonces únicamente voy a cambiarle primeramente el texto a ese text view y le voy a poner texto, voy a poner nombre de una persona, y voy a poner por ejemplo Anahí Salgado. Nombre de una persona, vamos a nuestra vista de texto y le quitamos arroba string, nombre de una persona. ¿Ok? Vamos a hacer este texto un poco más grande para que sea fácilmente pues que le podamos dar tap fácilmente. A ver si podemos, vamos a trabajar algo más grande como unos 30sp. Está perfecto. Me llevaré esto para mi archivo dimens. Vamos a poner dimens, texto de la persona, aquí. Y le ponemos acá, arroba dimen, el texto de la persona. Ahí you está grande, you podría darle click fácilmente. Entonces, ahora sí vamos a poner este elemento listo para que levante un menú de contexto cuando lo presionamos varias veces. Vamos a nuestro main activity que es quien controla este layout. Nuestro método OnCreate sencillo, el que crea nuestra actividad. Ahí vamos a colocar la instrucción, vamos a poner nuestro text view en órbita. Entonces voy a poner tv, nombre, no le hemos colocado un id. Entonces vamos a ponerle el id porque lo vamos a necesitar, id, tv, nombre, ok, tv, nombre. Regreso a mi main activity, y ahora sí you puedo hacer mi casting, text view find view id, R punto id, punto tv nombre, you está, punto y coma. Y con la instrucción Register for context menu. Le paso el view, en nuestro caso tv nombre, s text view. Y entonces con esta instrucción yo you he colocado ese menú disponible o you he colocado este view disponible para que levante un menú de contexto. Entonces vamos a correr esto, vamos a ver cómo se ve hasta este momento. Nos falta también switchear cuál es el menú que han dado clic. Y para eso lo haremos con otro método que veremos más adelante. Ok, nuestra aplicación you va empezar a correr, ahí está. Y si dejamos presionado un largo tiempo, Anahí Salgado, aparece el menú que acabamos de hacer. Edit y delete, lo haré de nuevo y ahi está, edit y delete, perfecto. Vamos a cachar cuál de estos dos menus es el que he seleccionado o delete o edit. Entonces, vamos a sobre escribir debajo de nuestro on create context menu, vamos a sobre escribir el método on create, item. Perdón, es on context ítem select. O sea qué ítem de contexto es seleccionado. Y como observas aquí también me trae el menú ítem y exactamente utilizando la misma lógica que hicimos para nuestro menú de opciones, a través de un switch podemos estar verificando. Cuál es el elemento que le dieron click. Le preguntamos al item recibido, le preguntamos cuál es su id. Coloco case r.id. Alguno de mis menús. Dos puntos, y puede ser break. ¿Ok? case, r.id. M Delete. Colocamos break. Bien. Y de la misma manera que en el anterior. Aquí es donde puedo colocar mi intend, a dónde quiero que vaya. O no sé, probablemente no solamente esté yendo a otra pantalla en particular. Probablemente sea descargar un archivo, ir a un sitio web, consultar una página, no sé, etc. Lo que esté marcado para tu menú. Todo eso lo colocamos dentro de esto. Solamente para mostrarte, voy a colocar un mensaje de tipo toast. Donde vamos a pasar como primer parámetro el contexto, y voy a ponerle menu editar. Vamos a utilizar nuestro strings. Vamos a utilizar los textos que aparecen aquí, menu edit y menu delete, para mostrarlos en nuestro archivo strings. Voy a ponerle getResources.getString, R.string Menú edit. Para el de edit. Colocamos ahora la longitud. Podemos decir que sea short. Y por último, hacemos .show. [SOUND]. Lo mismo en el otro. Voy a copiar esta línea. Recuerda el primer parámetro es el contexto, el segundo parámetro es el texto a mostrar. Que en nuestro caso estamos tomando el texto de nuestro recurso string y lo solicitamos de esta forma. getResources.getString. El tercer parámetro es la duración del mensaje y por último mostramos nuestro mensaje. Vamos a correr esto, vamos a correrlo para verificar que realmente estemos dando clic en en el menú adecuado. Voy a dejar presionado Anahí Salgado, edit, y me dice que di clic en edit. De nuevo, delete. Ok, aquí yo puse el menú de settings pero realmente aquí tienes que colocar delete. Y básicamente de esta forma es cómo estamos manejando ahora menús de contexto. Nuevamente, lo dejo presionado. Delete. Ahora dice delete. De nuevo, edit. Y ahora dice edit. Esta es una forma en cómo podemos manejar un menú de contexto. Ahora, veamos cómo manejar un menú por pop. Si recuerdas un menú pop up es aquel que se levanta, o es aquel que se activa al presionar también un view. Pero en este caso no tendremos que esperar o no tendremos que dejar presionado sobre nuestro elemento para que aparezca. Simplemente dándole un touch. O dándole un tab a ese elemento. Inmediatamente se va a desplegar el menú. Entonces para hacer esto, voy a crear por aquí el tipo de view. Para estar manejando otros tipos de elementos sobre menús. Voy a manejar una imagen. Una imagen que previamente yo you tengo importada. En mi archivo drawable. Y es esta imagen. Este sol que es tomado de Internet. De la página de Google. Entonces vamos a hacer que esa imagen, precisamente cuando le demos. Tab. Cuando tapeemos esa imagen, pues se levante un menú. Podremos decir que el menú que queremos que se levante sea un menú de. Podré decir visualizar la imagen. O también podremos decir, ver detalles de la imagen. ¿Ok?, dos opciones en el menu. Bien, aquí también puedo crear un nuevo menú. Ahora para fines de nuestro ejemplo yo estoy creando un menú para cada concepto que estamos viendo pero realmente, si así lo quieres, todos tus menús podrían vivir en un solo archivo. Aunque yo te recomiendo que hagas esto, lo hagas de esta forma para que puedas tener, sobre todo por mejor práctica, por una buena práctica en tu proyecto. Que lo tengas mejor estructurado. Entonces vamos a ponerle menú pop up. Menú pop up, le damos finish. Y ahora vamos a empezar a añadir nuestro menú pop up. Bien, voy a poner nuestro ítem de la misma forma como hemos estado manejando nuestros ítems. Voy a darle aquí un enter y también aquí a cada elemento le vamos a poner su respectivo id. Y también su respectivo título. Android, recuerda, primeramente el id. El id le puedo poner menú dijimos que uno será view, y ahorita me voy por los títulos. Android id, podemos poner view detail. View detail, ver los detalles de esa imagen. Y ahora en el archivo strings pues vamos a colocar los textos que va a decir este menú. Recuerden que es una muy buena práctica tener los textos en nuestro archivo strings. Puesto que cuando queramos manejar el soporte para múltiples idiomas pues será sumamente sencillo estar manejando todos nuestros archivos concentrados en un sólo archivo, ok. Entonces view image, image detail. Bien, tengo aquí you mi menú, vamos a nuestro menú pop up, vamos a colocar android, title y aquí tengo un menú view. Y el siguiente Android title, menú view, detail, you está. Con estos dos es suficiente, you tengo listo mi menú. Entonces vamos a meter la imagen, vamos a colocar la imagen en nuestro layout. Vamos a ponernos debajo de este text view. Estoy en la vista de texto de mi activity main. Lo que voy a insertar aquí no es un text view, sino es un image view. Un image view vamos a decirle grab content y grab content. Vamos a ponerle android id y será img, imagen. Vamos a ponerle android src colocamos drawable y esa es nuestra imagen. Vamos a ver cómo está viéndose esto, you aquí se alcanza a percibir. Vamos a darle una posición a esto. Vamos a decir que este es centrado, vertical, y también que esté centrado horizontal. Veamos en el preview. Aquí está you se ve nuestra imagen. La idea es que al pulsar la imagen se despliegue un menú de ella. Se ve perfecto. Entonces para hacer esto, para hacer este menú pop up, lo que tenemos que hacer es disparar un evento o disparar un método que reaccione cuando alguien le de click a esta imagen. Entonces, al igual que en los botones, todos los views también tienen disponible esta propiedad Android on click. Entonces lo que haremos será crear un método que dentro de ese método tendrá toda la lógica para levantar un pop-up. Y ese método creado lo vamos a asociar a este atributo on click. Entonces voy a ir al archivo de Java que controla este layout main activity. Me voy a ir hasta abajo en donde vamos. No te confundas con las llavecitas, estoy en una antes de la última, por eso te recomiendo que vayas colocando al final. Entonces voy a ponerle public void y le voy a poner menú pop up. Vamos a ponerle levantar menú pop up. Y entonces este va recibir un view así, y aquí adentro vamos a tener toda la lógica para nuestro pop up. Para empezar, nuestro pop up proviene de una clase, una clase pop up menú. Y entonces debemos crear por aquí nuestro objeto, vas a poner el = new, pop-up menu. Vamos a poner el contexto, nos pide el contexto de la actividad, en dónde será mostrado. Y posteriormente el view. Vamos a colocar nuestro view, aquí vamos a revisar ahorita si con este view es suficiente para levantar el menú. Sino tendremos que declarar nuestro elemento image view y pasarlo como parámetro. Entonces voy a colocar aquí pop up menú .getMenuInflater.inflate. Y como seguramente you debes saber, pues lo que estoy haciendo es inflar el menú a través del view que estamos seleccionando, a través del view que estamos levantando. Voy a poner R.menu.menupopup, coma, le diré con mi objeto pop up, menu get menu. Y entonces pues este menú, you con estas líneas es suficiente, you debería mostrarse nuestro menú vamos a verlo y ahora nos faltará posteriormente, aquí nos falta este método llevarlo al image view. Eso es muy importante, debemos llevar el método al image view y aquí nuestro proyecto you se estaba preparando para correr, lo vamos a correr de nuevo, sino no va suceder nada. Y antes de cualquier cosa, pues, vamos a ver you está corriendo. Vamos a ver qué pasa si. Tecleamos en nuestro menú, ahorita no está respondiendo entonces vamos a colocar nuestro image view por aquí. Image view, imagen y vamos a ponerle por aquí su casteo image view, vamos a poner find R.id.imageviewimagen. Podemos pasar aquí el objeto imagen. Lo corremos de nuevo Esperamos, you está a punto de correr, ahí está. Ok, aquí algo que nos está pasando, es que debemos poner por supuesto mostrar nuestro menú. Si no utilizamos el método show no se mostrará nuestro menú. Ahora sí. Ahí está nuestro menú, view image, view image detail, que si observas simplemente al darle clic se muestra el menú. Acá está nuestro menú de contexto, presionando una larga duración. Y acá está nuestro menú, mi opción es, ahora solamente nos falta que sobre este view, view image o view image detail. Sobre este view, pues podamos cachar cuando alguien le de click a cualquiera de estos dos elementos. Es muy sencillo, el objeto popup menú. Tiene un método set on menú item, click listener. Tiene un método listener que siempre está alerta y está escuchando cuando tu le des touch o cuando le des tap a alguno de estos elementos. Entonces lo que haré es utilizar este y vamos a crear una interfaz new on menu item click listener. Y como observas tengo aquí menu item click, y ¿adivina qué?, también estoy recibiendo un menú item. Y por supuesto puedo estar utilizando igual un switch para estarle preguntado al item cuál es el id que está recibiendo. Puedo poner mi primer caso R.id.viewbreak y el segundo y colocar break también. Y podemos devolver true, no olvides devolver true aquí. Entonces para poder ver un poco más lo que está sucediendo, puedo colocar de la misma forma un toast. Coloco this nuestro texto, get resources.getstring, voy a colocar R.string.menuview,toast.LinkLongs. Y no olvides nuestro .show, que es muy importante. Aquí me está diciendo que no estoy en un contexto de actividad entonces le pondré get base contacts. Copiaré lo mismo y lo pegaré acá. Y es verdad no estoy en un contexto de actividad, puesto que me encuentro dentro de una interfaz que está sobre escribiendo el método on item click. Simplemente que vamos a poner view detail. Vamos a correrlo. Y esta es la última nuestro último menú. Ok, aquí esta nuestro menú, y ahí está respondiendo view image puedo seleccionar el otro y ahí está, view image detail. Perfecto, éstos son nuestros tres tipos de menus que tenemos. Un menú de opciones que lo encontrarás en nuestro app bar. Un menú de contexto que será activado cuando dejes presionado un view por largo tiempo. Y un menú pop up que simplemente se levantará cuando des click o cuando des tap a un view en particular.