2013-07-31 145 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。