Tuesday, 3 May 2016

Android Menu

Here, you will learn about the option menu that is primary menu, context menu that works on long press and popup menu.


  • Option Menu
  • Context Menu
  • Popup Menu

1. Android Option Menu Example




Android Option Menus are the primary menus of android. They can be used for settings, search, delete item etc.



Here, we are going to see two examples of option menus. First, the simple option menus and second, options menus with images.



Here, we are inflating the menu by calling the inflate() method of MenuInflater class. To perform event handling on menu items, you need to override onOptionsItemSelected() method of Activity class.



Android Option Menu Example

Let's see how to create menu in android. Let's see the simple option menu example that contains three menu items.



activity_main.xml



 <RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android"   
   xmlns:tools="http://schemas.android.com/tools"   
   android:layout_width="match_parent"   
   android:layout_height="match_parent"   
   tools:context=".MainActivity" >   
    
   <TextView   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:text="@string/hello_world" />   
    
 </RelativeLayout>   

menu_main.xml

It contains three items as show below. It is created automatically inside the res/menu directory.

 <menu xmlns:androclass="http://schemas.android.com/apk/res/android" >   
   <item android:id="@+id/item1"   
     android:title="Item 1"/>   
   <item android:id="@+id/item2"   
     android:title="Item 2"/>   
   <item android:id="@+id/item3"   
     android:title="Item 3"/>   
 </menu>   


MainActivity.java

This class displays the content of menu.xml file and performs event handling on clicking the menu items.

 package com.androidtutorialforum.optionmenu;   
 import android.os.Bundle;   
 import android.app.Activity;   
 import android.view.Menu;   
 import android.view.MenuItem;   
 import android.widget.Toast;   
 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) {   
     // Inflate the menu; this adds items to the action bar if it is present.   
     getMenuInflater().inflate(R.menu.main, menu);//Menu Resource, Menu   
     return true;   
   }   
   @Override   
   public boolean onOptionsItemSelected(MenuItem item) {   
     switch (item.getItemId()) {   
       case R.id.item1:   
        Toast.makeText(getApplicationContext(),"Item 1 Selected",Toast.LENGTH_LONG).show();   
       return true;     
       case R.id.item2:   
         Toast.makeText(getApplicationContext(),"Item 2 Selected",Toast.LENGTH_LONG).show();   
        return true;     
       case R.id.item3:   
         Toast.makeText(getApplicationContext(),"Item 3 Selected",Toast.LENGTH_LONG).show();   
        return true;     
        default:   
         return super.onOptionsItemSelected(item);   
     }   
   }   
 }   
   



2. Android Context Menu Example

Android context menu appears when user press long click on the element. It is also known as floating menu.

It doesn't support item shortcuts and icons.

Android Context Menu Example

Let's see the simple example of context menu in android.

activity_main.xml

Drag one listview from the pallete, now the xml file will look like this:

activity_main.xml
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   
   xmlns:tools="http://schemas.android.com/tools"   
   android:layout_width="match_parent"   
   android:layout_height="match_parent"   
   android:paddingBottom="@dimen/activity_vertical_margin"   
   android:paddingLeft="@dimen/activity_horizontal_margin"   
   android:paddingRight="@dimen/activity_horizontal_margin"   
   android:paddingTop="@dimen/activity_vertical_margin"   
   tools:context=".MainActivity" >   
    
   <ListView   
     android:id="@+id/listView1"   
     android:layout_width="match_parent"   
     android:layout_height="wrap_content"   
     android:layout_alignParentLeft="true"   
     android:layout_alignParentTop="true"   
     android:layout_marginLeft="66dp"   
     android:layout_marginTop="53dp" >   
   </ListView>   
    
 </RelativeLayout>   

Activity class

Let's write the code to display the context menu on press of the listview.

MainActivity.java
 package com.androidtutorialforum.contextmenu;   
 import android.os.Bundle;   
 import android.app.Activity;   
 import android.view.ContextMenu;   
 import android.view.ContextMenu.ContextMenuInfo;   
 import android.view.Menu;   
 import android.view.MenuItem;   
 import android.view.View;   
 import android.widget.AdapterView;   
 import android.widget.ArrayAdapter;   
 import android.widget.ListView;   
 import android.widget.Toast;   
 public class MainActivity extends Activity {   
   ListView listView1;   
   String contacts[]={"Ajay","Sachin","Sumit","Tarun","Yogesh"};   
   @Override   
   protected void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.activity_main);   
     listView1=(ListView)findViewById(R.id.listView1);   
     ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contacts);   
     listView1.setAdapter(adapter);   
     // Register the ListView for Context menu   
     registerForContextMenu(listView1);   
   }   
   @Override    
   public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)   
   {   
       super.onCreateContextMenu(menu, v, menuInfo);   
       menu.setHeaderTitle("Select The Action");    
       menu.add(0, v.getId(), 0, "Call");//groupId, itemId, order, title    
       menu.add(0, v.getId(), 0, "SMS");    
   }    
   @Override    
   public boolean onContextItemSelected(MenuItem item){    
       if(item.getTitle()=="Call"){   
         Toast.makeText(getApplicationContext(),"calling code",Toast.LENGTH_LONG).show();   
       }    
       else if(item.getTitle()=="SMS"){   
         Toast.makeText(getApplicationContext(),"sending sms code",Toast.LENGTH_LONG).show();   
       }else{   
         return false;   
       }    
      return true;    
    }    
   }   







3. Android Popup Menu Example


Android Popup Menu displays the menu below the anchor text if space is available otherwise above the anchor text. It disappears if you click outside the popup menu.



The android.widget.PopupMenu is the direct subclass of java.lang.Object class.


Android Popup Menu Example

Let's see how to create popup menu in android.

activity_main.xml

It contains only one button.

activity_main.xml
 <RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android"   
   xmlns:tools="http://schemas.android.com/tools"   
   android:layout_width="match_parent"   
   android:layout_height="match_parent"   
   android:paddingBottom="@dimen/activity_vertical_margin"   
   android:paddingLeft="@dimen/activity_horizontal_margin"   
   android:paddingRight="@dimen/activity_horizontal_margin"   
   android:paddingTop="@dimen/activity_vertical_margin"   
   tools:context=".MainActivity" >   
    
   <Button   
     android:id="@+id/button1"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_alignParentLeft="true"   
     android:layout_alignParentTop="true"   
     android:layout_marginLeft="62dp"   
     android:layout_marginTop="50dp"   
     android:text="Show Popup" />   
    
 </RelativeLayout>   


popup_menu.xml

It contains three items as show below. It is created inside the res/menu directory.

poupup_menu.xml
 <menu xmlns:androclass="http://schemas.android.com/apk/res/android" >   
    
   <item   
     android:id="@+id/one"   
     android:title="One"/>   
      
   <item   
     android:id="@+id/two"   
     android:title="Two"/>   
       
   <item   
     android:id="@+id/three"   
     android:title="Three"/>   
        
 </menu>   

Activity class

It displays the popup menu on button click.

MainActivity.java
 package com.androidtutorialforum.popupmenu;   
 import android.os.Bundle;   
 import android.app.Activity;   
 import android.view.Menu;   
 import android.view.MenuItem;   
 import android.view.View;   
 import android.view.View.OnClickListener;   
 import android.widget.Button;   
 import android.widget.PopupMenu;   
 import android.widget.Toast;   
 public class MainActivity extends Activity {   
 Button button1;   
         
      @Override   
      protected void onCreate(Bundle savedInstanceState) {   
      super.onCreate(savedInstanceState);   
      setContentView(R.layout.activity_main);   
         
      button1 = (Button) findViewById(R.id.button1);   
      button1.setOnClickListener(new OnClickListener() {   
         
       @Override   
       public void onClick(View v) {   
       //Creating the instance of PopupMenu   
       PopupMenu popup = new PopupMenu(MainActivity.this, button1);   
       //Inflating the Popup using xml file   
       popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());   
         
       //registering popup with OnMenuItemClickListener   
       popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {   
        public boolean onMenuItemClick(MenuItem item) {   
        Toast.makeText(MainActivity.this,"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show();   
        return true;   
        }   
       });   
    
       popup.show();//showing popup menu   
       }   
      });//closing the setOnClickListener method   
      }   
   }