为PopupMenu提供API 21+的影子

时间:2016-05-17 08:15:05

标签: android android-layout

这已经多次发布,但现有的解决方案似乎都不适用于API 21+。默认弹出窗口的背景颜色与布局的默认背景颜色完全相同。

This就是它的样子(弹出窗口在网格视图上但没有明显的“边界”看起来有点偏离)

this这样的东西是理想的,即具有适当的材料设计阴影。使用工具栏弹出菜单可以实现solution。没有'普通'的PopupMenu。

This旧问题试图完成同样的事情,但现在给定的解决方案不再有效:

<style name="AppTheme" parent="android:Theme.Holo.Light">
<item name="android:popupMenuStyle">@style/popupMenuStyle</item>
</style>
<style name="popupMenuStyle" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">@color/bgPopumMenu</item>
</style>

既没有设置自定义上下文包装器:

 Context wrapper = new ContextThemeWrapper(getContext(), R.style.PopupMenu);
 PopupMenu popup = new PopupMenu(wrapper, anchorView);

所以,我甚至无法改变弹出菜单的背景颜色,更不用说有适当的材质设计阴影了。

如何给PopupMenu一个影子?或者我如何至少使用自定义背景drawable(使用我可以放入9补丁阴影)

2 个答案:

答案 0 :(得分:1)

将popupMenu样式添加到您的AppTheme:              @风格/ PopupMenu的     

<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
    <item name="android:popupBackground">@android:color/white</item>
</style>

的manifest.xml:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
.............
</application>

PS:回答from here

答案 1 :(得分:0)

你需要一个单独的Lollipop +风格 创建另一个资源:res/values-v21/styles.xml
添加你的弹出式样并指定所需的高程:

<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
    <item name="android:popupBackground">@android:color/white</item>
    <item name="android:popupElevation">20dp</item>
</style>

就是这样。