App Tutorial

ContextMenu Android: Guida Completa con Esempi Java

Scopri come creare un ContextMenu Android in Android Studio: guida passo passo con codice XML e Java per implementare menu contestuali attivati con un tocco prolungato nelle tue app Android.

ContextMenu Android esempio con menu contestuale su long press in Java

Il ContextMenu Android è particolarmente utile quando vuoi offrire azioni contestuali su un elemento specifico senza occupare spazio nell’interfaccia principale. A differenza dell’Options Menu, che appare in alto nella toolbar, il ContextMenu si attiva con un long press direttamente sull’elemento — ideale per liste, immagini o qualsiasi view interattiva.

Cos’è il ContextMenu Android?

Prima di iniziare, assicurati di avere Android Studio installato e un progetto configurato con SDK minimo API 21 (Android 5.0). Non sono necessarie dipendenze aggiuntive: il ContextMenu fa parte delle API native di Android.

Appare quando si mantiene il tocco per qualche istante sull’oggetto con cui si vuole interagire. Consente all’utente di selezionare più elementi per eseguire azioni rapide all’interno dell’app. Per registrarlo su una vista si usa il metodo registerForContextMenu().

Passo 1 – Creare il Layout XML

Il layout definisce un LinearLayout centrato con una TextView come unico elemento. Sarà proprio su questa TextView che registreremo il ContextMenu: quando l’utente tieni premuto il dito, Android intercetta il long press e mostra il menu contestuale.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/linearLayout"
    android:gravity="center">

    <TextView
        android:text="@string/hello_world"
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

Passo 2 – Definire il Menu in XML

Il file context.xml definisce le voci del menu come elementi item con un id univoco e un titolo visibile. Puoi aggiungere o rimuovere voci liberamente: ogni id dovrà poi essere gestito nel metodo onContextItemSelected della tua Activity.

Crea il file context.xml nella cartella res/menu con le voci del menu:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/MENU_1" android:title="Data e Ora"/>
    <item android:id="@+id/MENU_2" android:title="Accessibilita'"/>
    <item android:id="@+id/MENU_3" android:title="Account"/>
    <item android:id="@+id/MENU_4" android:title="Connessione"/>
    <item android:id="@+id/MENU_5" android:title="Apn"/>
    <item android:id="@+id/MENU_6" android:title="Batteria"/>
    <item android:id="@+id/MENU_7" android:title="Informazioni"/>
    <item android:id="@+id/MENU_8" android:title="Cerca"/>
</menu>

I tre metodi chiave da implementare sono: onCreateContextMenu(), che gonfia il layout XML nel menu; registerForContextMenu(), da chiamare nell’onCreate per collegare il menu alla view; e onContextItemSelected(), che gestisce il tap su ciascuna voce avviando la relativa Activity di sistema. Per maggiori dettagli consulta la documentazione ufficiale Android sui menu contestuali.

Passo 3 – Implementare il Codice Java

package com.mycompany.myapp2;

import android.app.*;
import android.os.*;
import android.view.*;
import android.content.*;
import android.provider.*;
import android.widget.*;
import android.view.ContextMenu.*;

public class MainActivity extends Activity {

    TextView textView;
    LinearLayout linearLayout;

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context, menu);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        textView = findViewById(R.id.textView);
        linearLayout = findViewById(R.id.linearLayout);
        registerForContextMenu(textView);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
            case R.id.MENU_1:
                startActivity(new Intent(Settings.ACTION_DATE_SETTINGS));
                return true;
            case R.id.MENU_2:
                startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
                return true;
            case R.id.MENU_3:
                startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT));
                return true;
            case R.id.MENU_4:
                startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
                return true;
            case R.id.MENU_5:
                startActivity(new Intent(Settings.ACTION_APN_SETTINGS));
                return true;
            case R.id.MENU_6:
                startActivity(new Intent(Settings.ACTION_BATTERY_SAVER_SETTINGS));
                return true;
            case R.id.MENU_7:
                startActivity(new Intent(Settings.ACTION_APPLICATION_SETTINGS));
                return true;
            case R.id.MENU_8:
                startActivity(new Intent(Settings.ACTION_APP_SEARCH_SETTINGS));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

Conclusione: ContextMenu Android in Java

In questa guida abbiamo visto come creare un ContextMenu Android in Android Studio. Con un tocco prolungato sulla TextView viene visualizzato il menu contestuale con tutte le opzioni definite nel file XML. Se vuoi approfondire ulteriormente, consulta la guida su Android Studio per best practices nello sviluppo.