2013-07-31 96 views
13

我正在尝试使用支持V7库实现PopupMenu。所有编译罚款,但是当我尝试调用:在调用发生Android 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:您必须提供 layout_height属性。

其中提到我认为“abc_popup_menu_item_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"> 

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

回答

14

您可能要检查,如果你在你的清单文件中指定一个合适的主题:

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

对我而言,这是主题。我在试图打开菜单的单元测试中遇到问题。不知何故主题没有在测试期间设置,我不得不使用context.setTheme(...)手动设置它; –

0

您的布局文件“abc_popup_menu_item_layout.xml”已经具备了规定的高度。

“?attr/dropdownListPreferredItemHeight”是来自不同主题或库(如ActionBarSherlock)的东西,或者错误来自不同的布局文件。另外,如果换掉“?attr/dropdownListPreferredItemHeight”之类的东西像“60dp”,错误会消失吗?

18
PopupMenu popup = new PopupMenu(this, v); 

“this”是指什么?第一个参数必须是像Activity一样的上下文,而不是ApplicationContext!

+1

正是我在找的东西。这是必须匹配的上下文! – alopix

+0

这就是答案 – Aiapaec

+0

谢谢!这解决了我的问题! – cn123h

0

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

1

此行添加到您的活动您的manifest.xml

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

里面还要检查是否有是在各manifest.xml中活动范围内应用另一种风格。这将覆盖应用程序标记中的Theme.AppCompat。