Blog >Lista Soluciones >
Context Menu I
Vamos a ver como crear menús contextuales con RadioButton.
Lo primero que vamos a hacer es asociar nuestra actividad principal con el menú contextual mediante un botón que tendremos en la misma.
Ahora vamos a crear nuestro menú contextual mediante un recurso xml, así en que en la carpeta res/menu añadimos un nuevo archiuvo xml en que habrá este código:
A continuación hay que sobreescribir el evento encargado de construir los menús contextuales en los distintos controles de la aplicación, así que llamammos a onCreateContextMenu()
Para cada vez que necesitemos mostrar un menú contextual.
En él usamos la referencia inflater para generar la extructura del menú.
Y por último, vamos a implementar una función para controlar las acciones según se pulse en un item u otro.
Y este es el resutado :
Podeis descargar el código fuente de esta primera parte desde Thebestandroide más abajo :
Bien, ahora queremos que aparezca un radioButton por cada item que haya en el menú contextual, así que lo primero que hacemos es cambiar el recurso XML para que aparezcan:
Al poner la etiqueta group con el parámetro checkableBehavior="single" le decimos que todos los radioButton están en un mismo grupo y con ese parámetro en "single" hacemos que sólo se pueda seleccionar 1 de todos.
Finalmente añadimos varias lineas para que ejecuten ese comportamiento cada vez que hacemos click en un item en onContextItemSelected();
Y este es el resultado:
Ya que estamos, y para hacerlo más completo vamos a introducirle un titulo y una imagen al menú para que aparezca siempre que este salte con estas 2 líneas:
Previamente a estas líneas arrastramos a la carpeta drawable para tener la imagen disponible como recurso.
Así que la función quedaría así
Y este es el resultado :
Bueno una vez todo explicado, a continuación pongo el código entero :
El código del recurso XML, osea el context menu
El código de la actividad principal
Ahora veremos algo aun MÁS interesante respecto a los menus contextuales, ¿Cómo insertar imágenes en cada item del menu contextual? Lo haremos desde el siguiente post : Contextmenu + imagen por item.
Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo.
Lo primero que vamos a hacer es asociar nuestra actividad principal con el menú contextual mediante un botón que tendremos en la misma.
Ahora vamos a crear nuestro menú contextual mediante un recurso xml, así en que en la carpeta res/menu añadimos un nuevo archiuvo xml en que habrá este código:
A continuación hay que sobreescribir el evento encargado de construir los menús contextuales en los distintos controles de la aplicación, así que llamammos a onCreateContextMenu()
Para cada vez que necesitemos mostrar un menú contextual.
En él usamos la referencia inflater para generar la extructura del menú.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //REFERENCIA AL BOTON EN LA VISTA b1=(Button) findViewById(R.id.button1); //EVENTO ONCLICK b1.setOnClickListener(new OnClickListener() { //ABRIR EL MENU CONTEXTUAL @Override public void onClick(View v) { registerForContextMenu(v); openContextMenu(v); } }); } public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater= getMenuInflater(); inflater.inflate(R.menu.menucontext_1, menu); }
Y por último, vamos a implementar una función para controlar las acciones según se pulse en un item u otro.
public boolean onContextItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.menugraficos1: return true; case R.id.menugraficos2: return true; case R.id.menugraficos3: return true; default: return super.onContextItemSelected(item); } }
Y este es el resutado :
Podeis descargar el código fuente de esta primera parte desde Thebestandroide más abajo :
Bien, ahora queremos que aparezca un radioButton por cada item que haya en el menú contextual, así que lo primero que hacemos es cambiar el recurso XML para que aparezcan:
Al poner la etiqueta group con el parámetro checkableBehavior="single" le decimos que todos los radioButton están en un mismo grupo y con ese parámetro en "single" hacemos que sólo se pueda seleccionar 1 de todos.
Finalmente añadimos varias lineas para que ejecuten ese comportamiento cada vez que hacemos click en un item en onContextItemSelected();
public boolean onContextItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.menugraficos1: item.setChecked(true); return true; case R.id.menugraficos2: item.setChecked(true); return true; case R.id.menugraficos3: item.setChecked(true); return true; default: return super.onContextItemSelected(item); } }
Y este es el resultado:
Ya que estamos, y para hacerlo más completo vamos a introducirle un titulo y una imagen al menú para que aparezca siempre que este salte con estas 2 líneas:
menu.setHeaderTitle("Gráficos"); menu.setHeaderIcon(R.drawable.iconomenujuego);
Previamente a estas líneas arrastramos a la carpeta drawable para tener la imagen disponible como recurso.
Así que la función quedaría así
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("Gráficos"); menu.setHeaderIcon(R.drawable.iconomenujuego); MenuInflater inflater= getMenuInflater(); inflater.inflate(R.menu.menucontext_1, menu);
Y este es el resultado :
Bueno una vez todo explicado, a continuación pongo el código entero :
El código del recurso XML, osea el context menu
El código de la actividad principal
public class MainActivity extends Activity { private Button b1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1=(Button) findViewById(R.id.button1); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { lanzarMenu(v); } }); } public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("Gráficos"); menu.setHeaderIcon(R.drawable.iconomenujuego); MenuInflater inflater= getMenuInflater(); inflater.inflate(R.menu.menucontext_1, menu); } public boolean onContextItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.menugraficos1: item.setChecked(true); return true; case R.id.menugraficos2: item.setChecked(true); return true; case R.id.menugraficos3: item.setChecked(true); return true; default: return super.onContextItemSelected(item); } } //funcion para lanzar el menú public void lanzarMenu(View v){ registerForContextMenu(v); openContextMenu(v); } }
Ahora veremos algo aun MÁS interesante respecto a los menus contextuales, ¿Cómo insertar imágenes en cada item del menu contextual? Lo haremos desde el siguiente post : Contextmenu + imagen por item.
Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo.