Android學習之選單
android中包含多種選單,本例帶來的是選項選單和上下文選單。
1.選項選單
在android中,開發者可以在xml文件中部署所要新增的選單,在後臺呼叫即可。
1 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 2 3 <item 4 android:id="@+id/action_add" 5 android:title="新增" 6 android:showAsAction="always|withText"/> 7 <item 8 android:id="@+id/action_save" 9 android:title="儲存" 10 android:showAsAction="ifRoom"/> 11 <item 12 android:id="@+id/action_discard" 13 android:title="刪除" 14 android:showAsAction="ifRoom"/> 15 <item 16 android:id="@+id/action_delete" 17 android:title="刪除" 18 android:showAsAction="ifRoom"/> 19 <item 20 android:id="@+id/action_undo" 21 android:title="撤銷" 22 android:showAsAction="ifRoom"/> 23 </menu>
在xml中我們定義了幾個常用的選單,新增、刪除、儲存等。在xml中定義選單式通過在<menu/>中定義的。<item/>即為選單項。android最多可以有六個選單,超出之後android系統會自動將超出的選單放在更多的選單項。
1 public boolean onCreateOptionsMenu(Menu menu) { 2 Inflate the menu; this adds items to the action bar if it is present. 3 MenuInflater inflater = getMenuInflater(); 4 inflater.inflate(R.menu.main, menu); 5 mOptionsMenu = menu; 6 7 return super.onCreateOptionsMenu(menu); 8 }
重寫onCreateOptionsMenu方法,這裡呼叫已經定義好的menu.xml,可以顯示我們剛剛定義的選單項。
在開發中,選單也是與事件分不開的。通過onoptionsitemclick,來監聽選單的選中事件。
1 public boolean onOptionsItemSelected(MenuItem menu) 2 { 3 4 switch(menu.getItemId()) 5 { 6 case R.id.action_add: 7 Toast.makeText(this, "您點選了新增", Toast.LENGTH_LONG).show(); 8 return true; 9 case R.id.action_delete: 10 Toast.makeText(this, "您點選了刪除", Toast.LENGTH_LONG).show(); 11 return true; 12 case R.id.action_save: 13 Toast.makeText(this, "您點選了儲存", Toast.LENGTH_LONG).show(); 14 return true; 15 case R.id.action_undo: 16 Toast.makeText(this, "你點選了撤銷", Toast.LENGTH_LONG).show(); 17 return true; 18 default: 19 return super.onOptionsItemSelected(menu); 20 } 21 22 23 24 }
當然,開發人員也可以動態的新增選單,不需要在xml中預先寫好每一個選單項。
mOptionsMenu.add(1, 1, 1, "新增");第一個引數:選單項的分組id;第二個引數:選單項的id;第三個引數:選單顯示順序的id,android會根據id進行從左到右,從上到下的排序;第四個引數:選單項的標題
2.子選單和上下文選單
在android中,子選單和選單是同一級的,可以通過submenu.add新增子選單。新增一個帶複選框的子選單
1 public boolean onCreateOptionsMenu(Menu menu) {
2 // Inflate the menu; this adds items to the action bar if it is present.
3 // MenuInflater inflater = getMenuInflater();
4 //inflater.inflate(R.menu.main, menu);
5 // mOptionsMenu = menu;
6 SubMenu filesubmenu=menu.addSubMenu(1,1,2,"檔案");
7 MenuItem newMenu=filesubmenu.add(1,2,2,"新建");
8 newMenu.setCheckable(true);
9 MenuItem openMenu=filesubmenu.add(2,3,3,"開啟");
10 filesubmenu.setGroupCheckable(2, true, true);
11 return super.onCreateOptionsMenu(menu);
12 }
上下文選單可以和任意的view關聯,而且它必須關聯一個view,例如button、textview等。
1 public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInof)
2
3 {
4 super.onCreateContextMenu(menu, view, menuInof);
5 menu.add("上下文選單");
6 menu.add(0,ITEM1,Menu.NONE,"放大").setCheckable(true).setChecked(true);
7 menu.add(20,ITEM2,Menu.NONE,"縮小");
8 menu.add(20,ITEM3,Menu.NONE,"平移");
9 menu.setGroupCheckable(20, true, true);
10 SubMenu sub=menu.addSubMenu(0,4,Menu.NONE,"子選單");
11 sub.add("子選單1");
12 sub.add("子選單2");
13 }
上下文選單中可以新增子選單的。上下文選單在新增中,需要註冊。
Button button9=(Button)findViewById(R.id.button9); registerForContextMenu(button9);
這裡將定義的上下文選單註冊到button9中。
如果想實現對上下文選單選擇時間的監聽,oncontextitemselected方法實現。
1 public boolean onContextItemSelected(MenuItem item){
2 switch(item.getItemId()){
3 case ITEM1:
4 //在這裡新增處理程式碼
5 Toast.makeText(this, "點選了放大", 5000).show();
6 return true;
7 case ITEM2:
8 //在這裡新增處理程式碼
9 Toast.makeText(this, "點選了縮小", 5000).show();
10 break;
11 case ITEM3:
12 //在這裡新增處理程式碼
13
14 break;
15 }
16 return true;
17 }