是否可以将弹出式菜单样式从白色背景上的默认黑色文本更改为黑暗背景,而无需将样式应用于整个活动(这打破了我的UI)?如何设计PopupMenu?
回答
是的,你可以
<style name="YOURSTYLE" parent="Widget.AppCompat.PopupMenu">
<item name="android:textColor">@android:color/white</item>
<item name="android:itemBackground">@android:color/holo_red_light</item>
</style>
而且
Context wrapper = new ContextThemeWrapper(this, R.style.YOURSTYLE);
PopupMenu popup = new PopupMenu(wrapper, view);
结果
您不能直接设置PopupMenu
样式,但还有其他方法。
PopupMenu
创建方式如下:
PopupMenu popupMenu=new PopupMenu(context, anchorView);
菜单的样式由上下文传递的风格决定的。所以你所要做的就是传递你的Activity
参考作为上下文,菜单将被相应地设置。
如果要定义自己的风格,从默认的一个继承你的活动方式和覆盖以下项目:
<style name="style" parent="android:Theme.Holo.Light">
<item name="android:popupMenuStyle">...</item>
<item name="android:popupAnimationStyle">...</item>
<item name="android:popupBackground">...</item>
<!-- etc etc -->
</style>
什么值代替“....”。 我试过------------------------
@Santosh checkout http://stackoverflow.com/questions/22320663/change-background-popupmenu-in-android –
添加到什么Deville建议,你也可以添加以下属性你的主题风格。
在我的XML样式定义在上面的样式定义<style name="myPopupMenuStyle" parent="@style/Widget.AppCompat.Light.PopupMenu">
</style>
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
<item name="android:textColor">#000000</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
<item name="android:textColor">#000000</item>
</style>
引用你会发现程序兼容性
<style name="style" parent="android:Theme.Holo.Light">
<!-- other attributes -->
<item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="popupMenuStyle">@style/myPopupMenuStyle</item>
<item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>
</style>
其他风格,那是因为我使用的是Android的支持库目标下的Android API级别。
使用ActionBar
的同样情况下创建PopupMenu
actionBar.getThemedContext()
所以,
ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
PopupMenu popMenu = new PopupMenu(actionBar.getThemedContext(), someView);
你假设使用Actionbar。弹出窗口可以在没有操作栏的情况下使用。 – AndroidDev
即使使用工具栏,如果它设置为支持Actionbar,它也可以很好地工作。谢谢。 – buggydroid
可以很明显的定制的弹出菜单中你自己办法。它非常简单。但首先你需要照顾一件非常重要的事情。
的弹出菜单是这样的创建,
PopupMenu popupMenu = new PopupMenu(context, anchorView);
现在的“语境”在这里扮演的造型非常重要的作用。 PopupMenu的风格取决于您传递的上下文的样式。所以要非常小心。我几乎花了半小时才弄清楚这一点。
如果你在一个片段只是通过“getActivity()”,你就完成了。
造型的弹出菜单项
只是覆盖在你的风格以下项目,
<item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
和定制你想要的文本外观,
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
<item name="android:textColor">@color/text_hint_color</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
<item name="android:textColor">@color/text_hint_color</item>
</style>
如果你想改变PopupMenu的背景,这样做
<item name="popupMenuStyle">@style/myPopupMenuStyle</item>
<item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>
高级造型
的弹出菜单项不支持默认显示的图标。但显示图标可以使它看起来好多了。我建议尝试一下。
为了实现这个刚刚把下面的代码在你的活动,你是好去,
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (NoSuchMethodException e) {
Log.e("tag", "onMenuOpened", e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
return super.onMenuOpened(featureId, menu);
}
希望它可以帮助大家。谢谢。
启用图标的这种实现方式并不适用于我,所以请参阅本文后面的dgtale的回答:http://stackoverflow.com/questions/6805756/is-it-possible-to-display-icons-in-a-popupmenu – Ivan
- 1. JComboBox的设置大小PopupMenu
- 2. PopupMenu RuntimeException
- 3. 如何将Android PopupMenu的背景设置为白色
- 4. 如何使用theme.xml和style.xml设置PopupMenu和AlertDialog的样式
- 5. 设置PopupMenu的菜单项编程
- 6. 如何更改PopupMenu背景的颜色
- 7. 如何关闭WinRT中的PopupMenu
- 8. 如何更改PopupMenu中RadioButton的颜色?
- 9. 如何去做一个颠倒的PopupMenu
- 10. 如何调用AsyncTask中的PopupMenu项目
- 11. Gtk.StatusIcon PopupMenu python
- 12. Dialog vs. PopupMenu
- 13. 的PopupMenu从supportlibrary
- 14. ActionSherlockBar造型 - PopupMenu
- 15. 更新JComboBox popupMenu
- 16. AppCompat v21 PopupMenu风格
- 17. 的PopupMenu在Gtk#的
- 18. 如何升级设计2.1.2设计3.2.2
- 19. 如何设计UISegmentedControll?
- 20. 如何设计QWidget?
- 21. 如何设计它?
- 22. 如何从设计
- 23. 如何设计ViewModel
- 24. 如何设计类
- 25. XML设计 - 如何?
- 26. 如何设计UILabel?
- 27. 如何设计与
- 28. 如何设计Bootstrap?
- 29. 我使用ShareActionProvider在PopupMenu的,但显示两个PopupMenu的?
- 30. POPUPMENU造型在WinRT中
我做的东西simil在这里! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42