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);