锚点弹出菜单溢出按钮

时间:2015-03-03 14:18:42

标签: android android-actionbar android-menu popupmenu overflow-menu

我正在尝试创建一个自定义弹出菜单,我想在操作栏的溢出菜单按钮上定位(如果重要的话,我使用ToolbarsetSupportActionBar()。我发现可以使用setAnchorView()(来自阅读Custom Menu item in Overflow menu)来完成此操作。

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

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

有谁知道如何实现这一目标?

3 个答案:

答案 0 :(得分:5)

而不是实际的溢出菜单,你可以“欺骗”一点点。操作栏中有一个看起来像溢出图标的图标。您应该将showAsAction始终设置为MenuItem。单击溢出图标,您将显示ListPopupWindow锚定到MenuItem视图的{{3}}。如果ListPopupWindow未显示在您希望的位置,您可以致电ListPopupWindow.setHorizontalOffset()ListPopupWindow.setVerticalOffset()

答案 1 :(得分:5)

我同意Andrew Orobator的意见,因为它很可能需要被伪造成#34;但我建议您在工具栏中添加实际视图,而不是尝试处理菜单项:

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

答案 2 :(得分:1)

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

  1. View v = findViewById(R.id.overflow)方法中致电onOptionsItemSelected

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