2011-06-04 68 views
47

我有以下的菜單佈局在我的Android應用:的Android勾選的菜單項目

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/item1" 
      android:titleCondensed="Options" 
      android:title="Highlight Options" 
      android:icon="@android:drawable/ic_menu_preferences" /> 

    <item android:id="@+id/item2" 
     android:titleCondensed="Persist" 
     android:title="Persist" 
     android:icon="@android:drawable/ic_menu_preferences" 
     android:checkable="true" /> 
</menu> 

我的問題是,第二個菜單項不會出現被「可選中」當我在Android上運行我的應用程序模擬器。應該有一個關於該項目的綠色勾號,對吧?表明它的可檢查。

我做錯了什麼?

+2

你只需要設置爲不機器人:可檢查的 「真」,但是Android :檢查! – 2015-05-24 09:35:53

回答

70

佈局看起來正確。但是你必須檢查並取消選中代碼中的菜單項。

documentation

當選擇了一個可檢查的項目時,系統調用的各個選擇的項目 - 回調方法(如onOptionsItemSelected())。在這裏,您必須設置複選框的狀態,因爲複選框或單選按鈕不會自動更改其狀態。您可以用isChecked()查詢該項目的當前狀態(因爲它在用戶選擇之前),然後使用setChecked()設置已檢查的狀態。

+0

在這個引用的正上方,它說'你可以在元素中使用android:checked屬性對項目應用默認選中狀態,並使用setChecked()方法在代碼中進行更改。「哪一個是正確的? – 2011-06-04 20:36:21

+1

我看不出有什麼問題。在此引用中表示可能會應用默認檢查狀態並且可以更改檢查狀態。在我的報價中說,檢查狀態需要通過代碼手動更改。 – 2011-06-04 20:41:05

+1

我的不好在這..我很困惑的菜單項的初始狀態,如果有必要從代碼設置或不。它看起來像最初的檢查狀態可以從xml中設置,之後可以從代碼中隨意修改,它是正確的嗎? – 2011-06-04 20:49:21

26

包裹item S IN一個group元件,這樣:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group android:checkableBehavior="all"> 
     <item android:id="@+id/item1" 
       android:titleCondensed="Options" 
       android:title="Highlight Options" 
       android:icon="@android:drawable/ic_menu_preferences"> 
     </item> 
     <item android:id="@+id/item2" 
       android:titleCondensed="Persist" 
       android:title="Persist" 
       android:icon="@android:drawable/ic_menu_preferences" 
       android:checkable="true"> 
     </item> 
    </group> 
</menu> 

Android docs

的機器人:checkableBehavior屬性可以接受:

單 - 只有一個項目從組中可以檢查(單選按鈕)

所有 - 所有項目進行檢查(複選框)

無 - 無項目可檢查

0

這可能是主題依賴,但我的菜單沒有顯示覆選框。我發現this

注意:圖標菜單的菜單項不能顯示覆選框或單選按鈕 。如果您選擇使圖標菜單中的項目可檢查,則 必須通過在每次打開和關閉狀態之間切換狀態時通過交換圖標和/或文本來親自指示狀態。

9

您可以通過actionViewClass設置爲可檢查的部件像android.widget.CheckBox

RES /菜單/ menu_with_checkable_menu_item創建一個可檢查的菜單項。XML

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_favorite" 
     android:checkable="true" 
     android:title="@string/action_favorite" 
     app:actionViewClass="android.widget.CheckBox" 
     app:showAsAction="ifRoom|withText" /> 
</menu> 

你甚至可以可以風格它是一個可檢查的明星,如果你設置actionLayout的佈局與風格android.widget.CheckBox

RES /佈局 /action_layout_styled_checkbox.xml

<CheckBox xmlns:android="http://schemas.android.com/apk/res/android" 
    style="?android:attr/starStyle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

RES /菜單/ menu_with_checkable_star_menu_item.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_favorites" 
     android:checkable="true" 
     android:title="@string/action_favorites" 
     app:actionLayout="@layout/action_layout_styled_checkbox" 
     app:showAsAction="ifRoom|withText" /> 
</menu> 

要設置值

menuItem.setChecked(true/false); 

來獲取值

menuItem.isChecked() 

演員菜單項到C heckBox

CheckBox checkBox= (CheckBox) menuItem.getActionView(); 
0

菜單項都加入編程,

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    menu.add("Item1").setActionView(R.layout.action_layout_checkbox).setCheckable(true); 
    return super.onCreateOptionsMenu(menu); 
} 

RES /佈局/action_layout_checkbox.xml

<CheckBox xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" />