Android Menu 之 optionsMenu 詳解

來源:互聯網
上載者:User

 

optionsMenu就是使用者在按下手機鍵盤上的Menu鍵時,Activity下方彈出的菜單。借個圖展示一下:

接下來,本文的主要內容有:

1、 
如何建立菜單

2、 
如何響應菜單上的點擊動作

3、 
講解Menu的各種屬性及Group分組

 

首先,如何建立菜單。

其實每個Activity都有處理菜單的能力,我們只需要重寫onCreateOptionsMenu(Menu
menu)這個方法就可以建立菜單了。具體操作起來有兩種方法。

方法一,直接用代碼構建Menu。

@Override<br />public boolean onCreateOptionsMenu(Menu menu){<br /> // 方法一,用代碼構建<br /> menu.add(Menu.NONE, Menu.NONE, 1, "菜單1");<br /> menu.add(Menu.NONE, Menu.NONE, 2, "菜單2");<br /> menu.add(Menu.NONE, Menu.NONE, 3, "菜單3");<br /> menu.add(Menu.NONE, Menu.NONE, 4, "菜單4");<br /> menu.add(Menu.NONE, Menu.NONE, 5, "菜單5");<br /> menu.add(Menu.NONE, Menu.NONE, 6, "菜單6");<br /> return true;<br /> } 

方法二,先用xml檔案構建好Menu,再到代碼裡載入。

例如,res/menu/option_menu_1.xml內容如下:

 

<?xml version="1.0" encoding="utf-8"?><br /><menu<br /> xmlns:android="http://schemas.android.com/apk/res/android"><br /> <group android:id="@+id/logined" android:menuCategory="alternative"><br /> <item android:id="@+id/item1" android:title="菜單1" android:orderInCategory="2" android:icon="@drawable/menu_serach_user"></item><br /> <item android:id="@+id/item2" android:title="菜單2" android:orderInCategory="6" android:icon="@drawable/menu_backhome"></item></group><br /> <group android:id="@+id/unlogin" android:menuCategory="container"></p><p> <item android:id="@+id/item3" android:title="菜單3" android:orderInCategory="5" android:icon="@drawable/menu_quit"></item><br /> <item android:id="@+id/item4" android:orderInCategory="4" android:title="菜單4" android:icon="@drawable/menu_setting_center"></item><br /> </group><br /></menu> 

則在Activity裡這樣寫:

@Override<br /> public boolean onCreateOptionsMenu(Menu menu){<br /> MenuInflater inflater = getMenuInflater();<br /> inflater.inflate(R.menu.option_menu_1, menu);<br /> return true;<br /> } 

 

 

其次,如何響應菜單上的點擊動作

我們只需要重寫onOptionsItemSelected(MenuItem item)這個方法就可以做響應的操作了。代碼如下:

  @Override<br /> public boolean onOptionsItemSelected(MenuItem item){<br /> Toast.makeText(this, item.getOrder()+","+item.getTitle(), Toast.LENGTH_LONG).show();<br /> return true;<br /> } 

最後,在設定Menu的時候,有些屬性值得一說。

第一個,Item的屬性:menuCategory,它的取值一共有四個。我們可以在xml檔案中寫上android:menuCategory="container",也可以在用代碼構建Menu時這樣寫:menu.add(groupid,itemid,Menu.CATEGORY_CONTAINER,title);四個取值的具體內容可以參見API中Menu的靜態屬性部分。那這四個分類是有什麼用的呢?根據API資料,這個分類應該是跟菜單展示時各項的排序有關係的。但是我試過不同的功能表項目設不同的MenuCategory值,但結果並不是預期的那樣,預期是:數值越小的越靠上,靠左。但有一點可以確認,MenuCategory不設值(預設為0)時,功能表項目是排在最左上方的。

第二個,Item的屬性:orderInCategory,它的取值是0-0xffff之間的整數。也是設定排序次序的。它跟第一個屬性有啥關係呢?就是一個功能表項目最終的Order值是MenuCategory值與orderInCategory值相加的結果。

 

還有Group分組,在xml建立Menu時,已經示範了Group的使用。我們使用Group是為了方便處理那些擁有相同特徵的功能表項目。比如有幾個菜單是要登入了才可以使用,或者部分功能表項目前面要加選擇框,那我們就可以將它們放到一組,後面對這一個組進行操作就行了。

 

最後再補充一個對Menu進行樣式設定的問題。API中沒有提供設定背景等的方法。有朋友已經解決了些問題。在此貼上連結。

http://blog.csdn.net/sodino/archive/2011/01/26/6165132.aspx

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.