Como programar un Context Menu

22 agosto, 2011 por Gonzalo de Córdoba Dejar una respuesta »

Objetivo:

Vamos a aprender a crear nuestro primer Context Menu a partir de pulsar un botón.

Se van a ver en concreto dos formas de aparecer el Context Menu:

- Al dejar pulsado un botón (es como normalmente aparece un Context Menu)

- Al pulsar normal el botón (modificamos el comportamiento para que en este caso también aparezca)

Ejemplo Context Menu Android

Aprendiendo Context Menu Android 2

 

 

 

 

 

 

 

 

 

 

 

 

Código fuente java (Principal.java):

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.Toast;

public class Principal extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      //al Boton_01 le damos el comportamiento normal con
      //registerForContextMenu, y al pulsar largamente sale el ContextMenu
      Button btn = (Button) findViewById(R.id.button_example);
      registerForContextMenu(btn);

      //el boton 2, es un boton especial. A diferencia del boton 1,
      //haremos que el ContextMenu aparezca al pulsar normalmente el botón
      Button btn2 = (Button) findViewById(R.id.button_example2);

   }

   /**
    * Se crea el Context Menu, añadiendo las opciones deseadas
    * @param ContextMenu
    * @param View
    * @param ContextMenuInfo
    */
   @Override
   public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
      super.onCreateContextMenu(menu, v, menuInfo);
      menu.setHeaderTitle("Context Menu");
      menu.add(0, v.getId(), 0, "Action 1");
      menu.add(0, v.getId(), 0, "Action 2");
   }

   /**
    * Se definen las funciones que se llamarán al pulsar las
    * opciones del Context Menu
    * @param MenuItem
    */
   @Override
   public boolean onContextItemSelected(MenuItem item) {
      if (item.getTitle() == "Action 1") {
         function1(item.getItemId());
      }else if (item.getTitle() == "Action 2") {
         //function2(item.getItemId());
	 return true; //pulsando sobre ella salgo
      }else{
	 return false;
      }
      return true;
   }

/**
    * Se definen las acciones que se realizan al pulsar la Accion1 en
    * del Context Menu.
    * En este caso, como ejemplo, damos un mensaje en pantalla
    * @param int
    */
public void function1(int id) {
      Toast.makeText(this, "Accion 1 llamada", Toast.LENGTH_SHORT).show();
   }

/**
    * Se definen las acciones que se realizan al pulsar la Accion2 en
    * del Context Menu.
    * En este caso, como ejemplo, damos un mensaje en pantalla
    * @param int
    */
public void function2(int id) {
      Toast.makeText(this, "Accion 2 llamada", Toast.LENGTH_SHORT).show();
   }

/**
    * Funcion auxiliar que se utiliza para el boton2 solamente.
    * Con ella conseguimos que al pulsar el boton2 de forma normal,
    * aparezca el Context Menu.
    * @param View
    */
   public void funcionIniciarContextMenuParaBoton2(View v) {
      registerForContextMenu(v);
      openContextMenu(v);
   }

}

 

Código fuente XML (main.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">

    <!-- Texto Inicial para la aplicación -->
    <TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:text="Aprendiendo Context Menu" />

    <!-- Creacion boton1. Dejándolo pulsado aparecerá el Context Menu, pero eso
    se define el en .java, no aquí -->
    <Button android:text="Button01" android:id="@+id/button_example"
     android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

    <!-- Creacion boton2. Haciendo clic en él llamamos a la funcion que
     inicializa el Context Menu manualmente -->
    <Button android:text="Button02" android:id="@+id/button_example2"
     android:onClick="funcionIniciarContextMenuParaBoton2"
     android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

</LinearLayout>

 

Descárgate el código aquí

Publicidad

1 comentario

  1. Jonathan Elias Liriano Guzman dice:

    quiero saber como puedo manejar barios contextmenu
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle(«Context Menu»);
    menu.add(0, v.getId(), 0, «Action 1″);
    menu.add(0, v.getId(), 0, «Action 2″);
    }
    por k aparte d ese quiero otro pero a la hora de realizarlo me dice que le cambie el nombre pero le cambio el nombre y no funciona solo funciona el primero

Deja un comentario

Rellena el captcha please!! *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies