這裡是一些其它特性,你可以把它們應用於大多數菜單條目.
菜單組
一個菜單組是由共用某些特性的一系列功能表項目組成的.對於組,你可以:
- 顯示或隱藏所有的功能表項目 ,使用方法
setGroupVisible()
- Enable 或 disable 所有的功能表項目,使用方法
setGroupEnabled()
- 指定所有的功能表項目是否是 checkable ,使用方法
setGroupCheckable()
要建立組,你可以在資源檔中通過把 <item>
元素嵌套到一個 <group>
元素實現,或在調用add()方法時指定一個組 ID.
下面是菜單資源中使用組的例子:
<?xml version="1.0" encoding="utf-8"?><br /><menu xmlns:android="http://schemas.android.com/apk/res/android"><br /> <item android:id="@+id/item1"<br /> android:icon="@drawable/item1"<br /> android:title="@string/item1" /><br /> <!-- menu group --><br /> <group android:id="@+id/group1"><br /> <item android:id="@+id/groupItem1"<br /> android:title="@string/groupItem1" /><br /> <item android:id="@+id/groupItem2"<br /> android:title="@string/groupItem2" /><br /> </group><br /></menu>
在組中的功能表項目其實質與不在組中的功能表項目是一樣的----所有的三個功能表項目都依舊兄弟.然而,你可以你可以使用上面列出的方法們根據組ID修改組中的兩個功能表項目的一些屬性.
Checkable 功能表項目
Figure 3. Screenshot of a submenu with checkableitems.
一個菜單可以作為開啟或關閉某個選項的使用者介面,此時使用一個checkbox用於獨立選項,或使用一列radio按鈕用於多選一的一組選項.示範了帶有radio按鈕的checkable功能表項目的子功能表的樣子.
注:表徵圖功能表項目 (來自選項菜單)不能顯示一個checkbox或radio 按鈕.如果你想使用表徵圖功能表項目能夠 checkable,你必須手動指明 checked狀態,在其每次狀態變化時交換其表徵圖或文本.
通過在 <item>
元素中使用 android:checkable
屬性,你可以為不同的功能表項目分別定義其checkable行為 ,或者通過為<group>
元素指定android:checkableBehavior
屬性來定義組中所有功能表項目的checkable行為.例如, 所有在這個組中所有的功能表項目都是具有radio checkable 屬性:
<?xml version="1.0" encoding="utf-8"?><br /><menu xmlns:android="http://schemas.android.com/apk/res/android"><br /> <group android:checkableBehavior="single"><br /> <item android:id="@+id/red"<br /> android:title="@string/red" /><br /> <item android:id="@+id/blue"<br /> android:title="@string/blue" /><br /> </group><br /></menu>
屬性 android:checkableBehavior
可接受以下值:
-
single
-
組中只有一個功能表項目可以checked (radio 按鈕)
-
all
-
組中所有功能表項目可checked (checkboxes)
-
none
-
組中所有功能表項目都不可checked
你可以在 <item>
元素中使用 android:checked
屬性為功能表項目指定一個預設的checked狀態並且可以在代碼中使用setChecked()
方法改變其checked狀態.
當一個 checkable 功能表項目被選擇時,系統調用相應的回調方法(比如 onOptionsItemSelected()
). 在這個方法中你必須指定checkbox的狀態.因為一個checkbox 或 radio
按鈕不會自動改變其狀態.你可以使用 isChecked()
查詢功能表項目的目前狀態,可使用setChecked()
設定checked狀態.比如:
@Override<br />public boolean onOptionsItemSelected(MenuItem item) {<br /> switch (item.getItemId()) {<br /> case R.id.vibrate:<br /> case R.id.dont_vibrate:<br /> if (item.isChecked()) item.setChecked(false);<br /> else item.setChecked(true);<br /> return true;<br /> default:<br /> return super.onOptionsItemSelected(item);<br /> }<br />}
如果你按上述方法設定狀態,那麼功能表項目的可視狀態是不會發生改變的.但當你做了的話, activity 會儲存功能表項目的checked 狀態,於是當使用者後面再開啟菜單時,你設定的checked 狀態就被看到了.
註:Checkable 功能表項目被打算只用於單會話中,程式關閉後不會儲存其狀態.如果你有程式設定需要儲存,你必須使用Shared Preferences儲存資料.