锚定弹出菜单在溢出按钮上方

7
我正在尝试创建一个自定义弹出菜单,并将其定位在操作栏的溢出菜单按钮上(如果有必要,我使用ToolbarsetSupportActionBar())。我从Custom Menu item in Overflow menu了解到可以使用setAnchorView()实现。但是,我似乎无法找到如何将溢出菜单作为视图检索出来(以便将其用作锚点)。另外,我试图将其锚定到活动本身的父布局,但它显示在左上角,而且菜单的高度等于操作栏的高度(这不是很有用)。有人知道如何实现吗?
3个回答

6

如果你没有一个实际的溢出菜单,你可以“欺骗”一下。在你的操作栏中有一个看起来像溢出图标的图标。你应该将showAsAction设置为始终显示在这个MenuItem上。点击溢出图标时,会显示一个ListPopupWindow,它锚定到MenuItem视图。如果ListPopupWindow没有出现在你想要的位置,你可以调用ListPopupWindow.setHorizontalOffset()ListPopupWindow.setVerticalOffset()


谢谢。我会尝试并很快回复。 :) - source.rar
非常好的想法。但是,当面临这个问题时,我最终使用了一个PopupMenu,它比ListPopupWindow简单得多,而ListPopupWindow除了复杂性之外,还存在将其尺寸指定为物理像素的缺点。 - Papa Smurf

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


1
我在这里学会了如何从菜单项获取视图:Android: 获取菜单项的视图引用
  1. 在你的 onOptionsItemSelected 方法中调用 View v = findViewById(R.id.overflow)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接