1. 程式人生 > 其它 >Android學習之選單

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         }