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 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.
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 ;
}
} |
import android.graphics.Color
import android.os.Bundle
import android.view.ContextMenu
import android.view.ContextMenu.ContextMenuInfo
import android.view.MenuItem
import android.view.View
import android.widget.RelativeLayout
import android.widget.TextView
import 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.