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模拟器中运行我的应用程序时,第二个菜单项不显示为“可检查”。 应该有一个关于该项目的绿色勾号,对吧? 为了表明它的可检查性。
难道我做错了什么?
布局看起来不错。 但是您必须在代码中检查并取消选中菜单项。
从文档 :
当select一个可检查的项目时,系统会调用相应的项目select的callback方法(例如
onOptionsItemSelected()
)。 在这里,您必须设置checkbox的状态,因为checkbox或单选button不会自动更改其状态。 您可以使用isChecked()
查询项目的当前状态(因为它在用户select之前isChecked()
,然后使用setChecked()
设置选中的状态。
将item
包装在一个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属性接受:
单 – 只能从组中select一个项目(单选button)
全部 – 所有项目都可以选中(checkbox)
无 – 没有项目是可检查的
您可以通过将actionViewClass
设置为像android.widget.CheckBox
这样的可检查小部件来创build可检查的菜单项
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();
这可能是主题依赖,但我的菜单没有显示checkbox。 我发现这个 :
注意:图标菜单中的菜单项不能显示checkbox或单选button。 如果select使图标菜单中的项目可检查,则每次状态在打开和closures之间切换时,都必须通过交换图标和/或文本来亲自指示状态。