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 模拟器中运行我的应用程序时,第二个菜单项似乎不是“可检查的”。该项目应该有一个绿色的勾号,对吗?表明其可检查。
我做错了什么吗?
I have the following menu layout in my Android app:
<?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>
My problem is that the second menu item doesn't appear to be "checkable" when I run my app in the Android emulator. There should be a green tick about the item, right? To indicate that its checkable.
Am I doing something wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
布局看起来不错。但您必须在代码中选中和取消选中菜单项。
来自文档:
Layout looks right. But you must check and uncheck menu item in code.
From the documentation:
将
item
包裹在group
元素中,如下所示:来自 Android 文档:
Wrap the
item
s in agroup
element, like this:From the Android docs:
您可以通过将
actionViewClass
设置为可检查的小部件(如android.widget.CheckBox
res/menu/menu_with_checkable_menu_item.xml
)来创建可检查的菜单项,并且 布局,您甚至可以将其设置为可检查的星形
如果您将
actionLayout
设置为具有样式android.widget.CheckBox
res/layout 的/action_layout_styled_checkbox.xml
res/menu/menu_with_checkable_star_menu_item.xml
设置值
获取值
将 MenuItem 投射到 CheckBox
You can create a checkable menu item by setting the
actionViewClass
to a checkable widget likeandroid.widget.CheckBox
res/menu/menu_with_checkable_menu_item.xml
And you can can even style it to be a checkable star if you set
actionLayout
to a layout with a styledandroid.widget.CheckBox
res/layout
/action_layout_styled_checkbox.xml
res/menu/menu_with_checkable_star_menu_item.xml
To set the value
To get the value
Cast MenuItem to CheckBox
我发现最好的解决方案是仅使用我当前 API 的 onOptionsItemSelected() 方法 (27-28)。
我花了很长时间在这里寻找这个答案。无论出于何种原因,上面的答案都没有帮助(我是一个回归的新手,我确信我可能搞砸了一些东西)。
可能有更好的方法来做到这一点,因此欢迎有帮助的批评。
I've found that the best solution was to just use the onOptionsItemSelected() method as of my current API (27-28).
I spent way to long on here for this answer. and for whatever reason, the answers above didn't help (I'm a returning newbie I probably mucked something up I'm sure).
There could be a better way of doing this so helpful criticism is welcomed.
阅读本文
正如所说,“手动检查”只是冰山一角。它闪现菜单的速度如此之快,用户看不到任何事情发生,而且非常违反直觉,令人沮丧,而且实际上是一派胡言。
REAL TASK
(因此)允许用户头脑消化复选框事件。好消息:这可以做到并且确实有效,这就是您的做法。 @TouchBoarder 做得最好,所以我会复制他的代码。然后开发它。
这个想法是检测复选框是否被单击,然后(并且仅当选中该复选框时)稍微抑制菜单删除,添加一个 500 毫秒的计时器,然后关闭菜单,这给了复选框的“滴答”动画运行时间并创建正确的“感觉”,
然后您像往常一样使用此方法,但您确保添加所有这些额外的凹凸,
其他菜单事件都在这里
READ THIS
As has been said the "manual checking" is only the tip of the iceberg. It flashes the menu away so fast the users don't see anything happen and it is very counter intuitive, frustrating, and effectively utter crap. The
REAL TASK
(therefore) is allowing the check box event to be digested by the users mind.Good news: this can be done and it does work and this is how you do it. @TouchBoarder had it best so I will copy his code. then develop it.
the idea is to detect if the checkbox is clicked, then (and only if that one is picked) slightly suppress the menu removal, add a timer for 500ms then close the menu, this give the "tick" animation of the checkbox time to run and creates the right "feel"
then you make this method as usual, but you make sure you add all this extra bumpf
the other menu events are here
回答是因为这里的答案看起来又长又复杂。我在这里有一些确切的 Kotlin 代码
覆盖顶部的活动并覆盖 onMenuItemClick 函数,有一个函数来处理按钮单击以打开菜单。
有一个数组或列表来保存选中的值并在重新创建菜单时设置检查
注意:此代码不会使菜单保持打开状态,它仅确保选中的项目保持选中状态。
我注意到有很多关于堆栈溢出的解决方案,所以如果这是您想要的,请看一下它们,
当然在 XML 中您应该设置按钮和菜单。菜单示例在这里
Answering because the answers here seem long and convoluted.. I have some exact Kotlin code here
Override your activity at the top and override the function onMenuItemClick, Have a function to handle the button click to open the menu.
Have an array or list which holds the checked value and sets the check when the menu is re-created
Note: This code does not keep the menu open, It only ensures that checked items remain checked.
I noted there are lots of solutions to that on stack overflow, so have a look at them if that's what you desire
of course in XML you should have your Button and Menu setup. An example menu is here
这可能取决于主题,但我的菜单没有显示复选框。我发现这个:
This may be theme dependant but my menu didn't show a checkbox. I found this :
对于以编程方式添加菜单项,
res/layout /action_layout_checkbox.xml
For Adding Menu items Programmatically,
res/layout /action_layout_checkbox.xml
我在菜单中有两个项目,并在
menu.xml
文件中设置为可检查,如下所示,菜单复选框的逻辑如下。
I have two items in the menu and set to checkable in
menu.xml
file like belowand logic for the menu checkboxes is below.