为什么我的PopupMenu没有被设计?

时间:2014-03-11 13:13:50

标签: android popup android-theme android-styles

在我的应用中,我创建了一个PopupMenu,如下所示:

public void openPopup(View v) {
    PopupMenu menu = new PopupMenu(MainActivity.this, v);
    menu.inflate(R.menu.menu_popup);
    menu.show();
}

我设计了这样的弹出窗口:

<style name="Theme.MyTheme" parent="@style/Theme.AppCompat.Light">
    <item name="popupMenuStyle">@style/PopupMenu.MyTheme</item>
    <item name="android:popupMenuStyle">@style/PopupMenu.MyTheme</item>    
</style>

<style name="PopupMenu.MyTheme" parent="@style/Widget.AppCompat.Light.PopupMenu">
    <item name="android:popupBackground">@color/black</item>
    <item name="android:textColor">@color/white</item>
</style>

我也适用其他正常的主题

<application
    android:theme="@style/Theme.MyTheme"
    ... >

然而弹出窗口显示白色背景和黑色文字。什么可能是错的?

2 个答案:

答案 0 :(得分:1)

需要一些挖掘,但我最终想到了这一点。只需要覆盖popupMenuStylepopupWindowStyle。我现在不记得是哪一个。

我不确定这适用于AppCompat库,尤其是使用listChoiceBackgroundIndicator。我还没有对任何针对14岁以下的东西进行测试。

<style name="Theme.MyAppTheme" parent="android:Theme.Holo.Light">
<item name="android:popupMenuStyle">@style/MyAwesomeBackground.PopupStyle</item>
<item name="android:popupWindowStyle">@style/MyAwesomeBackground.PopupStyle</item>
<item name="android:textAppearanceLargePopupMenu">@style/CustomTextStyle</item>
<item name="android:textAppearanceSmallPopupMenu">@style/CustomTextStyle</item>
<item name="android:listChoiceBackgroundIndicator">@drawable/custom_list_selector</item>
</style>
<style name="AwesomeBackground.PopupStyle" parent="Widget.PopupMenu">
   <item name="android:popupBackground">@drawable/custom_background</item>
</style>
<style name="CustomTextStyle">
<!-- some custom text stylings -->
</style>

答案 1 :(得分:0)

在菜单上,将项目设置为:onClick =“ showPopUp”,确保存在这种方法。

public void showPopUp(View v)
{
  Context context = new ContextThemeWrapper(this,R.style.MyMaterialTheme);

  PopupMenu popupMenu=new PopupMenu(context,v);

  MenuInflater inflater=popupMenu.getMenuInflater();
  inflater.inflate(R.menu.button_menu,popupMenu.getMenu());
}

在您的styles.xml中,添加以下内容:

   <style name="MyMaterialTheme"  parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="android:textColorPrimary">@color/black</item>
    <item name="android:textStyle">bold</item>
    <item name="android:iconifiedByDefault">true</item>
    <item name="android:backgroundTint">@color/orange</item></style>