背景
我在操作栏(实际上是工具栏)中有一个菜单项,当单击它时,会显示一个可供选择的项目列表,类似于单选按钮:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:icon="@drawable/..."
android:title="@string/..."
app:showAsAction="always">
<menu>
<group
android:id="@+id/..."
android:checkableBehavior="single">
<item .../>
<item .../>
<item .../>
</group>
</menu>
</item>
</menu>
我需要在这个项目列表下面放一个项目,在它和列表之间有一个分隔线。类似于材料设计指南所显示的内容(摘自此处):
编辑:下面是我想做的事情的草图:
问题是
我找不到办法。
我所尝试的
我找到的唯一可能的解决办法是:
1.更改Activity的主题(here),但这也会影响Activity的其他菜单项
1.方法,当菜单项出现在操作栏上时,在菜单项之间放置分隔符,但这里它们不出现在工具栏本身上。它们出现在选定项的弹出菜单上。
1.我试着在列表和额外项之间放假项,我还试着放一个组,一个空组,甚至尝试了各种属性。
可惜什么都没起作用。
这个问题
如何在操作项弹出菜单的特定项之间添加分隔符?
也许我需要创建一个自定义的弹出菜单,当点击操作项(如here)?如果是这样,我如何放置一个分隔符之间的具体项目?也许使用微调作为一个操作项?
8条答案
按热度按时间7vhp5slm1#
您应该使用操作布局
然后动作布局可具有带分隔符的文本视图。
然后可以在代码中添加单击侦听器
vaj7vani2#
从SDK版本28开始,您可以使用
menu.setGroupDividerEnabled(boolean)
。如果您使用的是ContextMenu
,则仅在SDK 28+上支持,但MenuCompat
在onCreateOptionsMenu()
中使用时提供向后兼容性。这将在每个不同
groupId
的操作之间添加一个分隔符,如下所示为0和1:文档位于:https://developer.android.com/reference/android/view/Menu#setGroupDividerEnabled(boolean)
这是我目前在应用中使用的代码,位于RecyclerView适配器中。它应该也可以用于菜单实现。因为您是通过XML定义菜单,所以只要您引用菜单资源,下面的代码也可以为您工作。结果如下所示:
重写
onCreateContextMenu
或菜单的相关onCreate..
方法,如下所示:gmol16393#
好吧,我已经找到了一个不错的解决方法,但是我不确定造型应该是这样的。这就是我所缺少的:
1.项目的背景位于微调器弹出窗口的背景之上,我不确定这是否是正确的放置方式。
1.我用支持库的白色背景来弹出spinner,我想应该有更好的方法让它变白。
1.我需要知道什么是正确的风格分隔。现在我用了一个简单的
1.缺少操作栏项样式。我只是使用了一个简单的ImageView,我认为它应该有所不同。
1.出于某种原因,在一些Android版本上(可能是棒棒糖及以下),物品的背景看起来是黑色而不是白色。
1.微调器有时可能会出现setOnItemSelectedListener问题,但不确定何时出现。
主要活动
res/菜单/菜单主文件.xml
res/布局/微调项.xml
res/布局/微调器.xml
res/值/样式.xml
res/可绘制/分隔符.xml
huwehgph4#
这可以通过使用弹出窗口和列表视图来完成。在列表视图中,您可以有不同的视图类型,如菜单项和分隔符。
我列出了弹出窗口部分的代码:
然后,您可以使用以下方法显示弹出窗口:
在列表视图适配器中,您可以覆盖getViewTypeCount()和getItemViewType()以支持菜单项布局和分隔符布局,还可以添加所需的任何视图类型。
下面是我的应用程序中的快照:
qyzbxkaa5#
在MDC-Android的Material 3 Design中,制作每组菜单项,调用
setGroupDividerEnabled(Boolean)
。分隔符将插入到组或菜单项之间。
MyActivity.kt
menu.xml
uubf1zoe6#
我是这么做的:
参考屏幕截图:
样式.xml文件:
Java代码:
希望这对你有帮助。
uyhoqukh7#
超级简单的解决方案,为我工作:
定义背景的可绘制对象:
然后在样式中使用背景:
z4iuyo4d8#
现在:
变更为:
基团具有
divider
;它喜欢在item
之间加一个divder
;如果
divider
不可用,请尝试background
;我从不使用menu
;这是我猜测;