anchor popup menu over overflow button

孤人 提交于 2019-11-27 19:23:37

问题


I'm trying to create a custom popup menu that I would like to position on the overflow menu button of the actionbar (am using a Toolbar with setSupportActionBar() for this if it matters). I found out that this can be done with the setAnchorView() (from reading Custom Menu item in Overflow menu).

However I cant seem to figure out how to retrieve the overflow menu as a view (that I could use to set the anchor with).

Also I did try anchoring this to the parent layout of the activity itself but it showed up on the left top, and the height of the menu was equal to the height of the actionbar (which is not very useful).

Does anyone know how this can be achieved?


回答1:


Instead of having an actual overflow menu you could "cheat" a little bit. Have an icon in your actionbar that looks like the overflow icon. You should set showAsAction to always on this MenuItem. OnClick of the overflow icon, you show a ListPopupWindow that's anchored to the MenuItem view. If the ListPopupWindow doesn't show up where you want it to, you can call ListPopupWindow.setHorizontalOffset() and ListPopupWindow.setVerticalOffset()




回答2:


I agree with Andrew Orobator in that it is most likely going to need to be "faked" but I would recommend adding an actual view to your Toolbar, instead of trying to deal with Menu items:

<?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>

In this way, you can directly get the view from the toolbar via toolbar.findViewById(R.id.overflow); or something similar, then set the view as your anchor. It means you would also have to set your own onClick listeners to it as it would no longer get onOptionsMenu() callbacks, but I think this would be the best way to handle your scenario.




回答3:


I learnt how to get a view from a menuitem here: Android : Get view Reference to a Menu Item

  1. Call View v = findViewById(R.id.overflow) within your onOptionsItemSelected method.

  2. Use that view as your anchor in your popupmenu: PopupMenu popupMenu = new PopupMenu(this, v);



来源:https://stackoverflow.com/questions/28834089/anchor-popup-menu-over-overflow-button

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!