android菜單詳解五:菜單的其它特性

來源:互聯網
上載者:User

這裡是一些其它特性,你可以把它們應用於大多數菜單條目.

菜單組

一個菜單組是由共用某些特性的一系列功能表項目組成的.對於組,你可以:

  • 顯示或隱藏所有的功能表項目 ,使用方法 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儲存資料.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.