Элемент меню Android Checkable

У меня есть следующее меню в приложении для 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. Должен быть зеленый галоч об изделии, не так ли? Чтобы указать, что его можно проверить.

Я делаю что-то неправильно?

Solutions Collecting From Web of "Элемент меню Android Checkable"

Макет выглядит правильно. Но вы должны проверить и снять отметку с пункта меню в коде.

Из документации :

Когда выбирается проверяемый элемент, система вызывает ваш выбранный вами метод обратного вызова (например, onOptionsItemSelected() ). Именно здесь вы должны установить состояние флажка, потому что флажок или переключатель не меняют свое состояние автоматически. Вы можете запросить текущее состояние элемента (как это было до того, как пользователь его выбрал) с помощью isChecked() а затем установить установленное состояние с помощью setChecked() .

Оберните item s в элемент 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 :

Атрибут android: checkableBehavior принимает либо:

Single – Можно проверить только один элемент из группы (переключатели)

All – все элементы могут быть проверены (флажки)

None – Нет элементов, которые можно проверить

Вы можете создать проверяемый элемент меню, установив actionViewClass на видимый виджет, такой как android.widget.CheckBox

Res / menu / 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 / layout / 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 / 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() 

Вставить MenuItem в CheckBox

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

Это может быть зависит от темы, но в моем меню не отображается флажок. Я нашел это :

Примечание. Элементы меню в меню значков не могут отображать флажок или переключатель. Если вы решите сделать элементы в меню «Значки» заметными, то вы должны лично указать состояние путем замены значка и / или текста каждый раз, когда состояние изменяется между включенным и выключенным.