4

我想創建一個自定義的彈出式菜單,我想定位在操作欄的溢出菜單按鈕上(如果它很重要,我正在使用ToolbarsetSupportActionBar())。我發現這可以通過setAnchorView()(閱讀Custom Menu item in Overflow menu)完成。在溢出按鈕上的彈出式菜單浮標

但是我似乎無法弄清楚如何檢索溢出菜單作爲視圖(我可以用來設置錨點)。

而且我也嘗試錨固這活動本身的父佈局,但它顯示了在左上角,菜單的高度是等於動作條的高度(這是不是非常有用)。

有沒有人知道這是如何實現的?

回答

4

而不是有一個實際的溢出菜單,你可以「欺騙」一點點。在您的操作欄中有一個看起來像溢出圖標的圖標。您應該設置showAsAction始終在此MenuItem。點擊溢出圖標,您將顯示一個ListPopupWindow,該圖掛接到MenuItem視圖。如果ListPopupWindow顯示不出來,你想要它,你可以打電話ListPopupWindow.setHorizontalOffset()ListPopupWindow.setVerticalOffset()

+0

感謝。會給這個鏡頭並儘快回覆。 :) – 2015-03-10 11:24:40

4

我的,因爲它是最有可能會需要與安德魯Orobator同意「僞造」,但我會建議增加一個實際視圖工具欄,而不是試圖處理菜單項:

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="@dimen/elevation_med"> 

<ImageView 
    android:id="@+id/overflow" 
    android:layout_width="2dp" 
    android:layout_height="2dp" 
    android:background="@drawable/overflow_icon" 
    android:layout_gravity="right"/> 

</android.support.v7.widget.Toolbar> 

通過這種方式,可以直接得到通過toolbar.findViewById(R.id.overflow)工具欄視圖。或類似的東西,然後將視圖設置爲您的錨點。這意味着你還必須設置自己的onClick監聽器,因爲它不會再獲得onOptionsMenu()回調,但我認爲這將是處理場景的最佳方式。

1

我學會了如何從這裏菜單項獲得一個觀點:你onOptionsItemSelected方法中Android : Get view Reference to a Menu Item

  1. 呼叫View v = findViewById(R.id.overflow)

  2. 使用,在您的彈出菜單查看爲您的主播:PopupMenu popupMenu = new PopupMenu(this, v);