Android OptionMenu (选项菜单) 和 ContextMenu (上下文菜单) 、 SubMenu (子菜单)

今天学习一下菜单组件,在Android中的菜单中有三种

①:OptionMenu(选项菜单)

②:ContextMenu(上下文菜单) 

③:SubMenu(子菜单)


下面分别来学一下

一:OptionMenu(选项菜单) 

当我们使用手机的时候,按着手机上面的Menu,弹出的菜单就是选项菜单。但是我们一次性能显示菜单选项只能是6个

如果我们设置的超过6个时候,第六个菜单选项会自动设置成更多,然后我们点击更多的时候,剩下来的选项菜单就会选项.                                                               

   下面我们来创建一个选项菜单,步骤如下:

   ①:先去覆盖Activity中的onCreateOptionsMenu(),但是这个方法只会在第一次调用的时候会被实例化,当实例化时候,就不会在被调用了

   ②:调用add()来添加菜单选项.add(groupId, itemId, order, titleRes)方法中个参数的意思是,

 *      @param group
 *            : 选项组号,一般都设置成0就OK啦
 * @param itenId
 *            : 选项的Id 很重要
 * @param order
 *            :顺序,一般来说都设置0就行了
 * @param titelRes
 *            : 选项的标题名字
 */

    ③:覆盖onCreateOptionsMenu(Menu menu)menu.getItemId()来获取选项的Id


 下面来看下Demo源代码:

  1. package com.jiangqq.menu;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuItem;  
  7. import android.widget.Toast;  
  8.   
  9. /** 
  10.  * ①:直接去覆盖public boolean onCreateOptionsMenu(Menu menu) { code......}, 
  11.  *   这个方法,需要注意的是,这个方法如果覆盖的了,只会被创建一次,也就是说, 选项菜单只会去被实例化一次,,,之后就不会被去调用了 
  12.  * ②:调用Menu中的add()方法,来添加每一个菜单选项, add(groupId, itemId, order, titleRes) group: 
  13.  *     选项组号,一般都设置成0就OK啦 itenId: 选项的Id 很重要 order:顺序,一般来说都设置0就行了 titelRes: 选项的标题名字 
  14.  * ③:当我们去点击某项的选项的时候,覆盖重写onOptionsItemSelected(MenuItem item)这个方法去实现点击事件 
  15.  *  
  16.  * @author jiangqq 
  17.  *  
  18.  */  
  19. public class Option_Menu_Activity extends Activity {  
  20.     // 点击菜单选项的常量Id   
  21.     private static final int menu1 = 1;  
  22.     private static final int menu2 = 2;  
  23.     private static final int menu3 = 3;  
  24.     private static final int menu4 = 4;  
  25.     private static final int menu5 = 5;  
  26.     private static final int menu6 = 6;  
  27.     private static final int menu7 = 7;  
  28.   
  29.     public void onCreate(Bundle savedInstanceState) {  
  30.         super.onCreate(savedInstanceState);  
  31.         setContentView(R.layout.main);  
  32.   
  33.     }  
  34.   
  35.     /** 
  36.      * @param group 
  37.      *            : 选项组号,一般都设置成0就OK啦 
  38.      * @param itenId 
  39.      *            : 选项的Id 很重要 
  40.      * @param order 
  41.      *            :顺序,一般来说都设置0就行了 
  42.      * @param titelRes 
  43.      *            : 选项的标题名字 
  44.      */  
  45.     public boolean onCreateOptionsMenu(Menu menu) {  
  46.   
  47.         menu.add(0, menu1, 0"Menu1");  
  48.         menu.add(0, menu2, 0"Menu2");  
  49.         menu.add(0, menu3, 0"Menu3");  
  50.         menu.add(0, menu4, 0"Menu4");  
  51.         menu.add(0, menu5, 0"Menu5");  
  52.         menu.add(0, menu6, 0"Menu6");  
  53.         menu.add(0, menu7, 0"Menu7");  
  54.         return true;  
  55.   
  56.     }  
  57.   
  58.     /** 
  59.      *  
  60.      * @param item 
  61.      *            .getItemId() 获取被点击的Id 
  62.      */  
  63.     public boolean onOptionsItemSelected(MenuItem item) {  
  64.         switch (item.getItemId()) {  
  65.         case menu1:  
  66.             Toast.makeText(this"你点击Menu1", Toast.LENGTH_LONG).show();  
  67.             break;  
  68.         case menu2:  
  69.             Toast.makeText(this"你点击Menu2", Toast.LENGTH_LONG).show();  
  70.             break;  
  71.         case menu3:  
  72.             Toast.makeText(this"你点击Menu3", Toast.LENGTH_LONG).show();  
  73.             break;  
  74.         case menu4:  
  75.             Toast.makeText(this"你点击Menu4", Toast.LENGTH_LONG).show();  
  76.             break;  
  77.         case menu5:  
  78.             Toast.makeText(this"你点击Menu5", Toast.LENGTH_LONG).show();  
  79.             break;  
  80.         case menu6:  
  81.             Toast.makeText(this"你点击Menu6", Toast.LENGTH_LONG).show();  
  82.             break;  
  83.         case menu7:  
  84.             Toast.makeText(this"你点击Menu7", Toast.LENGTH_LONG).show();  
  85.             break;  
  86.         }  
  87.         return true;  
  88.     }  

     下面为选项菜单的测试截图

 

二:ContexgMenu(上下文菜单)

概述:

Android 的上下文菜单类似于 PC 上的右键菜单。当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以注册上下文菜单,不过,最常见的是用于列表视图ListView的item。

注意:Android 的上下文菜单不支持图标或快捷键。

 

创建一个上下文菜单的步骤:

1. 覆盖 Activity 的 onCreateContenxtMenu() 方法,调用 Menu 的 add 方法添加菜单项(MenuItem)。

2. 覆盖 Activity 的 onContextItemSelected() 方法,响应上下文菜单菜单项的单击事件。

3. 调用 registerForContextMenu() 方法,为视图注册上下文菜单。

看下实现的源代码:

  1. package com.jiangqq.menu;  
  2.   
  3. import Android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.ContextMenu;  
  6. import android.view.ContextMenu.ContextMenuInfo;  
  7. import android.view.MenuItem;  
  8. import android.view.View;  
  9. import android.widget.TextView;  
  10. import android.widget.Toast;  
  11.   
  12. public class Context_Menu_Activity extends Activity {  
  13.     private static final int menu1 = 1;  
  14.     private static final int menu2 = 2;  
  15.     private static final int menu3 = 3;  
  16.   
  17.     private TextView context_demo;  
  18.   
  19.     @Override  
  20.     protected void onCreate(Bundle savedInstanceState) {  
  21.         // TODO Auto-generated method stub   
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.context);  
  24.         context_demo = (TextView) this.findViewById(R.id.context_demo);  
  25.         registerForContextMenu(context_demo);  
  26.     }  
  27.   
  28.     @Override  
  29.     public void onCreateContextMenu(ContextMenu menu, View v,  
  30.             ContextMenuInfo menuInfo) {  
  31.   
  32.         super.onCreateContextMenu(menu, v, menuInfo);  
  33.         menu.add(0, menu1, 0"Menu1");  
  34.         menu.add(0, menu2, 0"Menu2");  
  35.         menu.add(0, menu3, 0"Menu3");  
  36.     }  
  37.   
  38.     @Override  
  39.     public boolean onContextItemSelected(MenuItem item) {  
  40.         switch (item.getItemId()) {  
  41.         case menu1:  
  42.             Toast.makeText(this"你 点击的是Menu1", Toast.LENGTH_LONG).show();  
  43.             context_demo.setText("你点击的是Menu1");  
  44.             break;  
  45.   
  46.         case menu2:  
  47.             Toast.makeText(this"你点击的是Menu2", Toast.LENGTH_LONG).show();  
  48.             context_demo.setText("你点击的是Menu2");  
  49.             break;  
  50.         case menu3:  
  51.             Toast.makeText(this"你点击的是Menu3", Toast.LENGTH_LONG).show();  
  52.             context_demo.setText("你点击的是Menu3");  
  53.             break;  
  54.         }  
  55.         return true;  
  56.     }  
  57. }  

三:SubMenu(子菜单)

平时我们希望把同一类型的菜单进行分级来显示,这时候我们会用SubMenu.下面的Demo,是创建两个菜单选项,当点击Menu3的时候 会弹出menu1和menu2的菜单

创建一个SubMenu的基本步骤如下

①: 先去覆盖Activity中的onCreateOptionsMenu()

②:调用addSubMenu()来添加子菜单项,然后调用add()来添加子菜单

③:覆盖onCreateOptionsMenu(Menu menu)menu.getItemId()来获取选项的Id,去响应单击事件

下面是源代码: 

  1. package com.jiangqq.menu;  
  2.   
  3. import Android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuItem;  
  7. import android.view.SubMenu;  
  8. import android.widget.Toast;  
  9.   
  10. public class Sub_Menu_Activity extends Activity {  
  11.     private static final int menu3 = 3;  
  12.     private static final int menu4 = 4;  
  13.     private static final int menu1 = 1;  
  14.     private static final int menu2 = 2;  
  15.   
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         // TODO Auto-generated method stub   
  19.         super.onCreate(savedInstanceState);  
  20.   
  21.         setContentView(R.layout.sub);  
  22.     }  
  23.   
  24.     @Override  
  25.     public boolean onCreateOptionsMenu(Menu menu) {  
  26.         SubMenu M3 = menu.addSubMenu("Menu3");  
  27.         SubMenu M4 = menu.addSubMenu("Menu4");  
  28.         M3.add(0, menu1, 0"Menu1");  
  29.         M3.add(0, menu2, 0"Menu2");  
  30.         return true;  
  31.     }  
  32.   
  33.     @Override  
  34.     public boolean onOptionsItemSelected(MenuItem item) {  
  35.         switch (item.getItemId()) {  
  36.         case menu1:  
  37.             Toast.makeText(this"你点击的是Menu1", Toast.LENGTH_LONG).show();  
  38.             break;  
  39.         case menu2:  
  40.             Toast.makeText(this"你点击的是Menu2", Toast.LENGTH_LONG).show();  
  41.             break;  
  42.   
  43.         }  
  44.         return true;  
  45.     }  
  46.   
  47. }  

截图显示:

 


猜你喜欢

转载自blog.csdn.net/qq_22118507/article/details/51674303