你的位置:首页 > 操作系统

[操作系统]安卓菜单的实现,各种添加菜单的方法。


(一)选项菜单

1、简单的创建菜单:

复制代码
 1 @Override 2   public boolean onCreateOptionsMenu(Menu menu) { 3     super.onCreateOptionsMenu(menu); 4  5     // 添加菜单 6     menu.add("菜单选项1"); 7     /* 8      * pram1:组号 pram2:唯一的ID号 pram3:排序号 pram4:标题 9     */10     menu.add(1, Menu.FIRST, Menu.FIRST, "菜单选项2");11 12     // 希望显示菜单就返回true13     return true;14   }
复制代码

2、菜单的分组以及简单属性:

复制代码
 1 @Override 2   public boolean onCreateOptionsMenu(Menu menu) { 3     super.onCreateOptionsMenu(menu); 4  5     int group1 = 1; 6     int group2 = 2; 7     menu.add(group1, 1, 1, "item1"); 8     menu.add(group1, 2, 2, "item2"); 9     menu.add(group2, 3, 3, "item3");10     menu.add(group2, 4, 4, "item4");11 12     // menu.removeGroup(group1);//删除一个组13     // menu.setGroupVisible(group1, false);//设置可见性14     // menu.setGroupEnabled(group2, false);//设置是否可点15     // menu.setGroupCheckable(group2, true, t);//设置一组菜单的勾选情况16     return true;17   }
复制代码

3、响应菜单

一、通过onOptionsItemSelected方法

复制代码
 1 @Override 2   public boolean onOptionsItemSelected(MenuItem item) { 3     // 响应每个菜单项(通过菜单项的ID) 4     switch (item.getItemId()) { 5     case 1: 6       // do something here 7       break; 8     case 2: 9       // do something here10       break;11     case 3:12       // do something here13       break;14     case 4:15       Toast.makeText(this, "hello", 0).show();16       break;17     default:18       // 对没有处理的事件,交给父类来处理19       return super.onOptionsItemSelected(item);20     }21     //返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了22     return true;23   }
复制代码

二、通过监听

复制代码
 1 //第一步:创建监听器类 2 class MyMenuItemClickListener implements OnMenuItemClickListener { 3   @Override 4   publicboolean onMenuItemClick(MenuItem item) { 5     // do something here... 6     return  true;  //finish handling 7   } 8 } 9 //第二步:为菜单项注册监听器10 menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());
复制代码

 三、通过Intent

 

(二)子菜单subMenu

注意:Menu可以包含多个SubMenu及menuItem,SubMenu可以包含多个MenuItem,,但是SubMenu不能包含SubMenu。

复制代码
 1 @Override 2   public boolean onCreateOptionsMenu(Menu menu) { 3     //一个menu中可以添加多个子菜单 4     SubMenu subMenu=menu.addSubMenu(1,1, 0, "子菜单"); 5      6     //在子菜单中添加多个菜单选项 7     MenuItem menuItem1=subMenu.add(1, 1, 0, "菜单选项1"); 8     subMenu.add(1, 2, 1,"菜单选项2"); 9     subMenu.add(1, 3, 2,"菜单选项3");10     subMenu.add(1, 4, 3,"菜单选项4");11     12     //子菜单不支持显示图标,尽管这样设置不会报错13     subMenu.setIcon(R.drawable.ic_launcher);14     15     //设置菜单选项的图标16     menuItem1.setIcon(R.drawable.ic_launcher);17     return true;18   }
复制代码

 

(三)上下文菜单ContextMenu

复制代码
 1 package com.zzw.contextMenu; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.util.Log; 6 import android.view.ContextMenu; 7 import android.view.ContextMenu.ContextMenuInfo; 8 import android.view.MenuItem; 9 import android.view.View;10 import android.widget.ArrayAdapter;11 import android.widget.ListView;12 import android.widget.Toast;13 14 public class MainActivity extends Activity {15   private static final String TAG = "MainActivity";16   ListView listView;17 18   @Override19   protected void onCreate(Bundle savedInstanceState) {20     Log.d(TAG, "onCreate");21 22     super.onCreate(savedInstanceState);23     setContentView(R.layout.activity_main);24     listView = (ListView) findViewById(R.id.listView);25 26     simpleShowList();27     //1.在activity的onCreate方法中为一个view注册上下文菜单28     this.registerForContextMenu(listView);29 30   }31   32   //2.在onCreateContextMenu中生成上下文菜单。33   @Override34   public void onCreateContextMenu(ContextMenu menu, View v,35       ContextMenuInfo menuInfo) {36     Log.d(TAG, "onCreateContextMenu_start");37 38     menu.setHeaderTitle("上下文菜单标题");39     menu.add(0, 1, 0, "选项1");40     menu.add(0, 2, 0, "选项2");41     menu.add(0, 3, 0, "选项3");42     43     Log.d(TAG, "onCreateContextMenu_stop");44   }45   46   //3.在onContextItemSelected中响应上下文菜单项。47   @Override48   public boolean onContextItemSelected(MenuItem item) {49     Log.d(TAG, "onContextItemSelected_start");50     int item_id = item.getItemId();51     switch (item_id) {52     case 1:53       Toast.makeText(this, "我是上下文菜单选项1", 0).show();54       break;55     case 2:56 57       break;58     case 3:59 60       break;61 62     default:63       return super.onContextItemSelected(item);64     }65     Log.d(TAG, "onContextItemSelected_stop");66     return true;67   }68 69   private void simpleShowList() {70     Log.d(TAG, "simpleShowList_start");71     String[] showList = { "显示1", "显示2", "显示3", "显示4" };72 73     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,74         android.R.layout.simple_expandable_list_item_1, showList);75 76     listView.setAdapter(adapter);77     Log.d(TAG, "simpleShowList_stop");78   }79 80 }
复制代码

 

 

(四)通过

1.在res文件下创建menu文件夹,一般默认有的,在里面new出一个Android

2.编辑自己的复制代码

 1 <??> 2 <menu ="http://schemas.android.com/apk/res/android" > 3  4   <!-- group是分组 --> 5   <group android:id="@+id/group1" > 6  7     <!-- item是一个菜单选项 --> 8     <item 9       android:id="@+id/item1"10       android:title="菜单选项1(子菜单)">11       <!-- 在一个item中添加一个menu就是子菜单 -->12       <menu>13         <!-- 子菜单中的菜单选项 -->14         <item15           android:icon="@drawable/ic_launcher"16           android:id="@+id/item1_1"17           android:title="子菜单内选项1"/>18         <item19           android:id="@+id/item1_2"20           android:title="子菜单内选项2"/>21       </menu>22     </item>23     <item24       android:id="@+id/item2"25       android:title="菜单选项2">26     </item>27   </group>28   <group android:id="@+id/group2" >29     <item30       android:id="@+id/item3"31       android:title="菜单选项4">32     </item>33     <item34       android:id="@+id/item4"35       android:title="菜单选项5">36     </item>37   </group>38 39 </menu>
复制代码

3.在activity中获取:

复制代码
 1 @Override 2   public boolean onCreateOptionsMenu(Menu menu) { 3     MenuInflater in = getMenuInflater(); 4     in.inflate(R.menu.main, menu); 5     return true; 6   } 7  8   @Override 9   public boolean onOptionsItemSelected(MenuItem item) {10     switch (item.getItemId()) {11     case R.id.item1:12      13       break;14     case R.id.item2:15 16       break;17     18     default:19       return super.onOptionsItemSelected(item);20     }21 22     return true;23   }
复制代码

 

 

一些基本的属性:

设置菜单icon

1 <item 2     android:id="@+id/item1"3     android:title="菜单选项1"4     android:icon="@drawable/ic_launcher"5     />

设置菜单选项的可选,android:checkableBehavior,chencked

复制代码
 1 <!-- checkableBehavior设置可选 --> 2   <group android:id="@+id/group1" 3     android:checkableBehavior="all" > 4     <!-- checked设置特定菜单项(被勾中) --> 5     <item 6       android:id="@+id/item1" 7       android:title="菜单选项1" 8       > 9     </item>10     <item11       android:id="@+id/item2"12       android:checked="true"13       android:title="菜单选项2">14     </item>15   </group>
复制代码

 

设置菜单可用不可用android:enable

复制代码
 1 <group android:id="@+id/group1"> 2     <item 3       android:id="@+id/item1" 4       android:title="菜单选项1" 5       android:enabled="true" 6       > 7     </item> 8     <item 9       android:id="@+id/item2"10       android:title="菜单选项2"11        android:enabled="false">12     </item>13   </group>
复制代码

 

设置菜单选项是否可见android:visible

复制代码
 1 <group android:id="@+id/group1"> 2     <item 3       android:id="@+id/item1" 4       android:title="菜单选项1" 5       android:visible="true" 6       > 7     </item> 8     <item 9       android:id="@+id/item2"10       android:title="菜单选项2"11        android:visible="false">12     </item>13   </group>14   
复制代码