In Android, there are three types of menus available to define a set of options and actions in the Android apps. The lists of menus in Android applications are the following:
- Android options menu
- Android context menu
- Android popup menu
Here in this article let’s discuss the detail of the Context Menu. In Android, the context menu is like a floating menu and arises when the user has long-pressed or clicked on an item and is beneficial for implementing functions that define the specific content or reference frame effect. The Android context menu is alike to the right-click menu in Windows or Linux. In the Android system, the context menu provides actions that change a specific element or context frame in the user interface and one can provide a context menu for any view. The context menu will not support any object shortcuts and object icons. A sample GIF is given below to get an idea about what we are going to do in this article.
Step By Step Implementation
Step 1: Create a New Project in Android Studio
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. The code for that has been given in both Java and Kotlin Programming Language for Android.
Step 2: Working with the XML Files
Open res -> Layout -> activity_main.xml and write the following code. In this file add only a TextView to display a simple text.
XML
<?xml version="1.0" encoding="utf-8"?><!-- Relative Layout to display all the details --> android:id="@+id/relLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:padding="16dp" tools:context=".MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:text="Long press me!" android:textColor="#000" android:textSize="20sp" android:textStyle="bold" /></RelativeLayout> |
Step 3: Working with the MainActivity file
Open the app -> Java -> Package -> Mainactivity.java file. In this step, add the code to show the ContextMenu. Whenever the app will start make a long click on a text and display the number of options to select of them for specific purposes. Comments are added inside the code to understand the code in more detail.
Java
import android.graphics.Color;import android.os.Bundle;import android.view.ContextMenu;import android.view.MenuItem;import android.view.View;import android.widget.RelativeLayout;import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { TextView textView; RelativeLayout relativeLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Link those objects with their respective id's that we have given in .XML file textView = (TextView) findViewById(R.id.textView); relativeLayout = (RelativeLayout) findViewById(R.id.relLayout); // here you have to register a view for context menu you can register any view // like listview, image view, textview, button etc registerForContextMenu(textView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); // you can set menu header with title icon etc menu.setHeaderTitle("Choose a color"); // add menu items menu.add(0, v.getId(), 0, "Yellow"); menu.add(0, v.getId(), 0, "Gray"); menu.add(0, v.getId(), 0, "Cyan"); } // menu item select listener @Override public boolean onContextItemSelected(MenuItem item) { if (item.getTitle() == "Yellow") { relativeLayout.setBackgroundColor(Color.YELLOW); } else if (item.getTitle() == "Gray") { relativeLayout.setBackgroundColor(Color.GRAY); } else if (item.getTitle() == "Cyan") { relativeLayout.setBackgroundColor(Color.CYAN); } return true; }} |
Kotlin
import android.graphics.Colorimport android.os.Bundleimport android.view.ContextMenuimport android.view.ContextMenu.ContextMenuInfoimport android.view.MenuItemimport android.view.Viewimport android.widget.RelativeLayoutimport android.widget.TextViewimport androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { lateinit var textView: TextView lateinit var relativeLayout: RelativeLayout override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Link those objects with their respective id's that we have given in .XML file textView = findViewById(R.id.textView) relativeLayout = findViewById(R.id.relLayout) // here you have to register a view for context menu you can register any view // like listview, image view, textview, button etc registerForContextMenu(textView) } override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenuInfo) { super.onCreateContextMenu(menu, v, menuInfo) // you can set menu header with title icon etc menu.setHeaderTitle("Choose a color") // add menu items menu.add(0, v.id, 0, "Yellow") menu.add(0, v.id, 0, "Gray") menu.add(0, v.id, 0, "Cyan") } // menu item select listener override fun onContextItemSelected(item: MenuItem): Boolean { if (item.title === "Yellow") { relativeLayout.setBackgroundColor(Color.YELLOW) } else if (item.title === "Gray") { relativeLayout.setBackgroundColor(Color.GRAY) } else if (item.title === "Cyan") { relativeLayout.setBackgroundColor(Color.CYAN) } return true }} |
Output: Run on Emulator
Now connect the device with a USB cable or in an Emulator and launch the application. The user will see a text. Now long pressing on the text will generate menu options and select one of them to perform specific functionality.

