锚点弹出菜单溢出按钮

sou*_*rar 6 android popupmenu android-menu android-actionbar overflow-menu

我正在尝试创建一个自定义弹出菜单,我想在操作栏的溢出菜单按钮上定位(如果重要的话,我正在使用Toolbarwith setSupportActionBar()for this).我发现这可以通过setAnchorView()(从" 溢出"菜单中读取" 自定义菜单"项)来完成.

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

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

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

And*_*tor 5

不用实际的溢出菜单,您可以“作弊”一点。在操作栏中有一个看起来像溢出图标的图标。您应该设置showAsAction为此MenuItem。在溢出图标的OnClick上,您将显示一个ListPopupWindow锚定到MenuItem视图的视图。如果ListPopupWindow没有显示出来,你想要它,你可以打电话ListPopupWindow.setHorizontalOffset()ListPopupWindow.setVerticalOffset()


Jaw*_*poo 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>
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以通过toolbar.findViewById(R.id.overflow)直接从工具栏中获取视图; 或类似的东西,然后将视图设置为您的锚点.这意味着您还必须设置自己的onClick侦听器,因为它不再获取onOptionsMenu()回调,但我认为这将是处理场景的最佳方法.