Android PopupMenu 分割线样式设计

11

我在我的应用程序中使用了几个 PopupMenu,它们都按预期工作

Menu image

但我希望在各个项目之间有白线分隔,但我找不到应该设置这个的地方。我希望能够访问底层的ListView,但似乎不可能。我也找不到与分隔线相关的样式项。这可行吗?我应该在哪里/如何设置?

这对@flexicoder有帮助吗? https://dev59.com/ZGcs5IYBdhLWcg3wtmOf - garfbradaz
@garfbradaz 不是分隔线,而是文本。 - Flexicoder
2个回答

13

我已经能够使用以下技巧更新弹出菜单的分隔线颜色(基于这个答案的提示https://dev59.com/I2Eh5IYBdhLWcg3whTwR#40017199

创建如下样式...

<style name="popupMenuStyle" >
    <item name="android:textColor">#ffffff</item>
    <item name="android:itemBackground">#000000</item>
    <item name="android:divider">#eaeaea</item>
    <item name="android:dividerHeight">1dp</item>
</style>

然后在创建菜单时创建一个上下文包装器。

Context wrapper = new ContextThemeWrapper(mContext, R.style.popupMenuStyle);
PopupMenu popup = new PopupMenu(wrapper, sourceView);

这确实显示了一条分割线,但是菜单的高度似乎没有正确计算包括新的分隔符,并且会显示一个垂直滚动条。

如果有人知道原因,请添加评论。


4
嗨@Flexicoder,你能试着添加以下内容的divider和dividerHeight吗: 这样可以摆脱垂直滚动条。 - pablogeorge
1
为什么在我的Android 6.0上无法正常工作?唯一有效的是设置textColor和background,但分隔线不显示... - Vincy
根据我们的用户体验设计,我必须使用白色作为背景颜色,但很不幸,分隔线也使用了白色背景。当我将菜单背景更改为其他任何颜色时,我可以看到分隔线,但是当背景为白色时却看不到……那么,我该如何更改分隔线的颜色呢?<item name="android:divider">@android:color/holo_red_dark</item>并不能起作用…… - Vincy
@Vincy - 听起来你需要提出一个新问题。 - Flexicoder
@pablogeorge的回答解决了我的问题。非常感谢你们两个! - Jorn Rigter

2
这是我实现它的方法。colorBackground是用于更改线条分隔符颜色的。
    <style name="PopupMenu">
    <item name="android:itemBackground">@color/background_medium_gray</item>
    <item name="android:background">@android:color/transparent</item>
    <item name="android:textColor">@android:color/black</item>
    <item name="android:colorBackground">@color/BackgroundGray</item>
    <item name="android:dividerHeight">1dp</item>
</style>

    Context context = new ContextThemeWrapper(getActivity(), R.style.PopupMenu);
    final PopupMenu popupMenu = new PopupMenu(context, view);

    final MenuInflater menuInflater = popupMenu.getMenuInflater();

我想知道您是否知道如何设置分隔符宽度,例如总菜单宽度的80%; - juztcode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接