Android V7支持库弹出菜单

Android V7支持库弹出菜单,android,android-support-library,Android,Android Support Library,我正试图实现一个支持V7库的弹出菜单。所有编译都很好,但当我尝试调用: PopupMenu popup = new PopupMenu(this, v); popup.getMenu().add(Menu.NONE,MENU_SHARE_A,1,R.string.A); popup.getMenu().add(Menu.NONE,MENU_SHARE_B,2,R.string.B); popup.show(); 调用时发生错误: 07-31 17:23:53.3

我正试图实现一个支持V7库的弹出菜单。所有编译都很好,但当我尝试调用:

    PopupMenu popup = new PopupMenu(this, v);
    popup.getMenu().add(Menu.NONE,MENU_SHARE_A,1,R.string.A);
    popup.getMenu().add(Menu.NONE,MENU_SHARE_B,2,R.string.B);
    popup.show();
调用时发生错误:

07-31 17:23:53.365:E/AndroidRuntime(14128): java.lang.RuntimeException:二进制XML文件行#17:必须提供 布局的高度属性

我认为它指的是带有以下元素的“abc\u popup\u menu\u item\u layout.xml”:

<android.support.v7.internal.view.menu.ListMenuItemView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="?attr/dropdownListPreferredItemHeight"
        android:minWidth="196dip"
        android:paddingRight="16dip">


这是错误还是我做错了什么?

您可能需要检查清单文件中是否指定了适当的主题:

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

您的布局文件“abc\u弹出菜单\u菜单项\u layout.xml”已显示定义的高度

“attr/dropdownlistpreferItemHeight”是来自不同主题或库(如ActionBarSherlock)的内容,或者错误来自不同的布局文件

此外,如果您将“?attr/dropdownlistpreferItemHeight”替换为类似“60dp”的值,错误是否会消失

PopupMenu popup = new PopupMenu(this, v);

“这个”指的是什么?第一个参数必须是类似于上下文的活动,而不是ApplicationContext

@style/Theme.AppCompat.Light为我解决了这个问题@style/Theme.AppCompat是一个黑色主题,它似乎不适合我的应用程序

将这一行添加到您的manifest.xml中的活动中

android:theme="@style/Theme.AppCompat"

还要检查manifest.xml中的每个活动中是否应用了其他样式。这将覆盖应用程序标记中的Theme.AppCompat

对我来说,这就是主题。我在试图打开菜单的单元测试中遇到了问题。不知何故,测试期间没有设置主题,我不得不使用context.setTheme(…)手动设置主题;正是我想要的。这是必须匹配的上下文!我传递的是应用程序上下文,而不是活动上下文。这个答案是个救命稻草。我从一个适配器创建了
PopupMenu
,该适配器填充了
片段
列表视图
,并意外地将应用程序上下文传递给该适配器,从而将其传递给
PopupMenu
构造函数……记住你的
上下文
很重要!!