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.