6

我正在尝试创建一个自定义弹出菜单,我想将其放置在操作栏的溢出菜单按钮上(如果重要的话,我会使用Toolbarwith )。setSupportActionBar()我发现这可以通过setAnchorView()(通过阅读溢出菜单中的自定义菜单项)来完成。

但是我似乎无法弄清楚如何将溢出菜单作为视图检索(我可以用来设置锚点)。

我也尝试将它锚定到活动本身的父布局,但它显示在左上角,并且菜单的高度等于操作栏的高度(这不是很有用)。

有谁知道如何做到这一点?

4

3 回答 3

5

我同意 Andrew 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() 回调,但我认为这将是处理您的场景的最佳方式。

于 2015-03-10T18:48:16.673 回答
5

您可以“欺骗”一点,而不是拥有一个实际的溢出菜单。在您的操作栏中有一个看起来像溢出图标的图标。您应该设置showAsAction为 always on this MenuItem。OnClick 溢出图标,您将显示一个ListPopupWindow锚定到MenuItem视图的图标。如果ListPopupWindow没有显示在您想要的位置,您可以致电ListPopupWindow.setHorizontalOffset()ListPopupWindow.setVerticalOffset()

于 2015-03-10T03:33:21.887 回答
1

我在这里学习了如何从菜单项中获取视图:Android : Get view Reference to a Menu Item

  1. View v = findViewById(R.id.overflow)在你的方法内调用onOptionsItemSelected

  2. 使用该视图作为弹出菜单中的锚点:PopupMenu popupMenu = new PopupMenu(this, v);

于 2015-11-13T17:13:43.310 回答