Menú contextual en Android

Creación de menú contextual para App Android dentro de un Activity

El menú opciones en Android se puede crear directamente al generar un Activity desde IDE Eclipse usando la plantilla "Blank Activity". En esta publicación he querido construirlo paso a paso, creando todas las líneas de código.

Se trabajará sobre dos archivos:

  • MainActivity.java
  • options_menu.xml

El archivo options_menu.xml se creará dentro de una carpeta que tendremos que crear llamada menu, que estará dentro de la carpeta res. La interfaz gráfica o mediante código XML directamente, se creará tres ítems.

  • El atributo android:id contendrá la referencia del ítem.
  • El atributo android:icon captura la imagen del atributo.
  • El atributo android:orderInCategory permite mostrar el orden de aparición de los ítems.
  • El atributo android:showAsAction sirve para especificar que y como queremos mostrar los ítems.
  • El atributo android:title se usará para especificar el texto del ítem.

El código del XML puede ser:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/optionAdd"
        android:icon="@drawable/ic_add"
        android:orderInCategory="1"
        android:showAsAction="ifRoom"
        android:title="@string/add">
    </item>
    <item
        android:id="@+id/optionDelete"
        android:icon="@drawable/ic_delete"
        android:orderInCategory="2"
        android:showAsAction="ifRoom"
        android:title="@string/delete">
    </item>
    <item
        android:id="@+id/optionEdit"
        android:icon="@drawable/ic_edit"
        android:orderInCategory="3"
        android:showAsAction="ifRoom"
        android:title="@string/edit">
    </item>

</menu>

En el archivo "MainActivity.java" se sobre escriben dos métodos para crear y dar funcionalidad el menú, public boolean onCreateOptionsMenu(Menu menu) y public boolean onOptionsItemSelected(MenuItem item). En el primero se llama y se muestra el menú definido en el XML. Y en el segundo se la da funcionalidad a los ítems, detectando sobre que ítem se hizo "click". El código de la clase es el siguiente:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.optionAdd:
            clickAdd();
            break;
        case R.id.optionDelete:
            clickDelete();
            break;
        case R.id.optionEdit:
            clickEdit();
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    private void clickEdit() {
        Toast.makeText(this, "Ha seleccionado Editar", Toast.LENGTH_SHORT).show();
    }

    private void clickDelete() {
        Toast.makeText(this, "Ha seleccionado Delete", Toast.LENGTH_SHORT).show();
    }

    private void clickAdd() {
        Toast.makeText(this, "Ha seleccionado Añadir", Toast.LENGTH_SHORT).show();
    }
}

Hay tres métodos más que sólo son usados para mostrar un Toast: clickAdd(), clickDelete() y clickEdit()

Se puede ver el vídeo:

Se puede descargar el código Menú contextual en Android.