Si has llegado hasta aquí con vida es que realmente te interesa el mundo del androide verde. Tras haberte explicado cómo crear tu primera aplicación en Android y cómo crear un layout, el siguiente paso para seguir mejorando tu aplicación es crear un menú en Android Studio.
Qué es un menú
No nos hemos parado a explicarlo demasiado porque seguramente te lo imagines, pero el menú es lo que aparece en la parte superior de la aplicación, dónde se alojan los botones que nos llevan a diferentes opciones, como es el caso de Settings, que vemos en la siguiente imagen. Se trata de un menu_main.xml, que suele ser el menú por defecto, salvo que le cambiemos el nombre.
Cada layout tiene un menú
La realidad, es que cada layout tiene un menú. En una aplicación con muchos layouts puede existir un único menú, porque no siempre hacen falta opciones a mayores que la anterior. Lo más común, es que existan varios menús, ya que puede haber layouts que tienen un icono de buscar o de añadir, mientras que otros solamente tienen un about.
Cómo crear un menú en Android Studio
Pues bien, una vez sabido qué es menú ya podemos proceder a crearlo en Android Studio. Para hacerlo, debemos situarnos en la carpeta res > menu, en la que haremos clic derecho dónde nos saldrá la siguiente opción:
New > Menu resource file
Nombre del menú
Menú creado
Como podemos ver en las anteriores imágenes, acabamos de crear un nuevo menú «androidstudiofaqs». Este menú, se crea junto al otro que ya había predefinido (menu_main.xml, que incluirá Settings por defecto o lo que queramos). Y además, como vemos en la anterior imagen, viene completamente vacío, por lo que podemos darle estilo basándonos en el menú predefinido.
El menú se invoca en la activity
Para probar este menú, debemos situarnos en la clase que extiende de una actividad dentro del método onCreateOptionsMenu(). Aquí debemos llamar al menú que acabamos de crear, ya que será el menú que tendrá asociado a dicha activity.
oEn nuestro caso, hemos creado un menú vacío, pero en el caso del menu_main.xml vemos que tiene código y se hace referencia a Settings, por lo que dentro de onOptionsItemSelected() implementaremos el comportamiento del menú al hacer clic en dicho botón. Esto en concreto lo veremos en detalle más adelante, además de jugar con diversos botones en un mismo menú.
¿Cómo lleváis los conceptos hasta ahora? Si tenéis alguna duda, dejadme un comentario y os ayudaré encantada.
Creación del del menú
1 2 3 4 |
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> </menu> |
Código del menú con Settings (recomendado)
1 2 3 4 5 |
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/action_settings" android:title="@string/action_settings" android:orderInCategory="100" android:showAsAction="never" /> </menu> |
Código java que carga el menú
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_2, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; // lo ideal aquí sería hacer un intent para abrir una nueva clase como lo siguiente Log.i("ActionBar", "Settings!"); Intent about = new Intent(getApplicationContext(), About.class); startActivity(about); return true; } return super.onOptionsItemSelected(item); } |
Si tienes muchas opciones, lo ideal es hacer un case para contemplarlas todas. Puedes preguntarme en los comentarios si tienes dudas.
Actualización importante
Tutorial sobre cómo crear un submenú en Android Studio.
Si quieres el código manual, pídemelo sin problema!
HOLA SEÑORITA SI PUEDES Y DESEAS ENVIA ME CODIGO
Acabo de añadir el código amigo, si tienes dudas pregúntame.
Cordial saludo,
En que parte esta el codigo??
Hola! Son dos partes
El código XML y luego invocarlo en el activity. Fíjate bien en la entrada, solo tienes que copiar el código y pegarlo.
Hola, cuando intento escribir los @Override me da un error, porque puede ser?
Hola Mariano, ¿qué error te dice exactamente en la consola? Puede deberse a muchas cosas.. estas escribiendo bien el nombre del método? Tienes Java 1.6 en el Compiler?
Disculpen tengo un error en esa parte del codigo (la flecha). me podria decir cual es el problema 😛
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.Configuracion) {
return true;
// lo ideal aquí sería hacer un intent para abrir una nueva clase como lo siguiente
————–> Log.i(«ActionBar», «Settings!»);
Intent about = new Intent(getApplicationContext(), Configuracion.class);
startActivity(about);
return true;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.Configuracion) {
return true;
// lo ideal aquí sería hacer un intent para abrir una nueva clase como lo siguiente
Log.i(«ActionBar», «Settings!»);
Intent about = new Intent(getApplicationContext(), Configuracion.class);
startActivity(about);
return true;
//Toast.makeText(MainActivity.this,»Hola»,Toast.LENGTH_SHORT).show();
return true;
}@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.Configuracion) {
return true;
// lo ideal aquí sería hacer un intent para abrir una nueva clase como lo siguiente
Log.i(«ActionBar», «Settings!»);
Intent about = new Intent(getApplicationContext(), Configuracion.class);
startActivity(about);
return true;
//Toast.makeText(MainActivity.this,»Hola»,Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}//Toast.makeText(MainActivity.this,»Hola»,Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
Hola amigo! Simplemente es un log que mostraría el resultado en consola. Si haces el import ya no debería darte error (import android.util.Log;), sino simplemente bórralo!!!
Ya va bien??
Tengo un problema con el menu, cuando deslizable que cuando selecciono algun Item me abre la actividad nueva que cree pero me quita el menu deslizable, como podría solucionar ese inconveniente?
Hola. Tengo un problema cuando creo un menu en una segunda activity este no aparece al mometo de correr la app en un telefono movil. que puede ser?
Tienes esto ¿?
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_2, menu);
return true;
}
En la segunda activity? con el nombre del nuevo menú o el mismo si es el mismo claro.
Queria Felicitarte excelentes tutoriales!..
Gracias un abrazo!:D
Que tal!
buen tutorial 🙂
yo solo quiero personalizar mi menú, es decir agregarle Views o gruopView, soy nuevo en
android, usted cree que se pueda hacer eso??
un menu así http://macnn.mnmcdn.com/article_images/1443113837-md-001_dark_and_light_580.jpg
Hola que tal amiga!
Excelente post.
Podrías enviarme el code completo ami correo: adobedescargas1@gmail.com
De antemano muchas gracias.
Saludos.
Como hago para que el menu aparezca en todas las pantallas que quiero? Y en que momento inserto el menu en las pantallas, en el tutorial no lo veo. Gracias
Tienes que añadir el código java que carga el menú (está abajo del artículo). Dependiendo de la pantalla que quieras, tendrás que pegar ese código en su clase java donde lo invocas
Hola, buenas.
tengo una duda sobre este tema, a ver si me pudes ayudar.
si tengo por ejemplo dos activitys, tres o muchas, no importa la cantidad,
¿tengo que poner en cada una de ellas el onOptionsItemSelected y todos y cada unos de los codigos para cada opcion del menú?
por ejemplo si en la activity 1 tengo un menú una opcion de «guardar imagen» con su codigo para que guarde la imagen , ¿en la activity 2 tengo que copiar todo el codigo para que guarde la imagen?
El problema es que si tienes 10 o 20 activitys y con 5 o 10 opciones y luego quieres añadir 2 o 3 mas, tienes que ir de activity en activity copiando y pegando codigo .
¿eso es asi o hay algun tipo de (function() como en php por ejemplo) que cada vez que añades una opcion te la añada en todas las activitys?
hola hola tengo un problema a mi me sale: if (id == R.id.action_settings) {
(((((esa parte del action_settings en rojo))))
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
Eso es porque no reconoce el nombre action_settings, debes de haberle llamado de otra manera
hola, como hago el case tengo 5 opciones y quiero que mande a una actividad al presionarlas
Hola Andrea una pregunta, como podria atacar para activar o desactivar una de las opciones del menu creado desde el MainActivity, gracias por tu ayuda de antemano
hola,tengo un problema ,espero me puedan colaborar (ya he creado apps para android pero con layouts y botones atras y siguiente) y he usado set on clcik listener,definido los botones y agregarles el intent NEXT Y AFTER (para adelantar y retroceder en activitys de tipo EMPTY).. el tema es que empece usando un navigation drawer y ya con mi lista creada con ID respectivos,me gustaria que al pulsar uno de mis MENU_ITEMS cambiarar a la respectiva PANTALLA DE CONTENIDO que le corresponde,pero no se como darle la accion en java,no se que metodos o tipo de codigo usar,ya he provado varios,la idea seria NO usar fragmentos como ya he visto en algunos ejemplos,sino que al presionar el MENU_ITEM cambiara al activity respectivo creado con cada contenido respectivo,ayudenme porfavor con los metodos y clases correspondientes que deveria de implementar,gracias
Hola tengo una duda :
¿ es posible agregar menu dentro de una aplicacion con google maps ?
si se puede ¿ como se podria hacer ?
por ejm agregar el menu que muestre los markers del mapa
Hola! Claro que se puede, pero depende de como lo hagas. ¿Nada más ejecutar tu app ya se carga el mapa?
Holaa, me da un error en el About.class
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.logout) {
return true;
Intent about = new Intent(getApplicationContext(), About.class); <—
startActivity(about);
return true;
}
return super.onOptionsItemSelected(item);
}
Me da el mismo error por la fecha en que se publico el tutorial sospecho que cambio la sintaxis de ese intent dependiendo del framework o algo asi 🙁
Hola!
Como puedo crear mas de un menú, y hacer que se visualice el que yo elija desde un botón?, todo esto dentro de un misma actividad.
Saludos!.
Hola, me dice que la clase About no existe, sabes por cuál clase la puedo sustituir?
Como puedo hacer que siempre se seleccione por default una opción de menú, siempre que inicia mi app tengo seleccionada la primara opción del menú y quisiera que en un menú de 3 iconos, fuera la segunda opción la que estuviera seleccionada.