在溢出按钮上锚定弹出菜单
anchor popup menu over overflow button
我正在尝试创建一个自定义弹出菜单,我想将其放置在操作栏的溢出菜单按钮上(如果重要的话,我正在使用 Toolbar
和 setSupportActionBar()
) .我发现这可以用 setAnchorView()
来完成(来自阅读 )。
但是我似乎无法弄清楚如何将溢出菜单检索为视图(我可以用来设置锚点)。
我也试过将它锚定到 activity 本身的父布局,但它出现在左上角,菜单的高度等于操作栏的高度(这不是很有用)。
有人知道如何实现吗?
您可以 "cheat" 一点而不是实际的溢出菜单。在您的操作栏中有一个看起来像溢出图标的图标。您应该将 showAsAction
设置为始终在此 MenuItem
上。单击溢出图标时,您会显示锚定到 MenuItem
视图的 ListPopupWindow
。如果 ListPopupWindow
没有出现在您想要的位置,您可以调用 ListPopupWindow.setHorizontalOffset()
和 ListPopupWindow.setVerticalOffset()
我同意 Andrew Orobator 的观点,因为它很可能需要 "faked" 但我建议向您的工具栏添加一个实际视图,而不是尝试处理菜单项:
<?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() 回调,但我认为这将是处理您的场景的最佳方式。
我在这里学习了如何从菜单项中获取视图:Android : Get view Reference to a Menu Item
在您的 onOptionsItemSelected
方法中调用 View v = findViewById(R.id.overflow)
。
将该视图用作弹出菜单中的锚点:PopupMenu popupMenu = new PopupMenu(this, v);
我正在尝试创建一个自定义弹出菜单,我想将其放置在操作栏的溢出菜单按钮上(如果重要的话,我正在使用 Toolbar
和 setSupportActionBar()
) .我发现这可以用 setAnchorView()
来完成(来自阅读
但是我似乎无法弄清楚如何将溢出菜单检索为视图(我可以用来设置锚点)。
我也试过将它锚定到 activity 本身的父布局,但它出现在左上角,菜单的高度等于操作栏的高度(这不是很有用)。
有人知道如何实现吗?
您可以 "cheat" 一点而不是实际的溢出菜单。在您的操作栏中有一个看起来像溢出图标的图标。您应该将 showAsAction
设置为始终在此 MenuItem
上。单击溢出图标时,您会显示锚定到 MenuItem
视图的 ListPopupWindow
。如果 ListPopupWindow
没有出现在您想要的位置,您可以调用 ListPopupWindow.setHorizontalOffset()
和 ListPopupWindow.setVerticalOffset()
我同意 Andrew Orobator 的观点,因为它很可能需要 "faked" 但我建议向您的工具栏添加一个实际视图,而不是尝试处理菜单项:
<?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() 回调,但我认为这将是处理您的场景的最佳方式。
我在这里学习了如何从菜单项中获取视图:Android : Get view Reference to a Menu Item
在您的
onOptionsItemSelected
方法中调用View v = findViewById(R.id.overflow)
。将该视图用作弹出菜单中的锚点:
PopupMenu popupMenu = new PopupMenu(this, v);