android中菜單(menu)的基本知識,androidmenu
(一)選項菜單
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 }
(四)通過XML檔案添加菜單
1.在res檔案下建立menu檔案夾,一般預設有的,在裡面new出一個Android xml File來編輯自己的菜單
2.編輯自己的xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="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
詳解請見:http://www.cnblogs.com/codingmyworld/archive/2011/08/21/2147829.html