将 PopupMenu 锚定到 ImageView

Anchoring a PopupMenu to an ImageView

我有一个 ImageView,可以在单击时打开 PopupMenu。如何设置 PopupMenu 在某个位置显示? PopupMenu 将用作下拉菜单,我希望 PopupMenu 的右上角位于用户单击的位置。见下图说明:

我目前拥有的:

我想要的:

相关代码:

mNavViewDropDown= navViewHeader.findViewById(R.id.navview_header_expand);
mNavViewDropDown.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        PopupMenu popup = new PopupMenu(getContext(), mNavViewDropDown);
        //Inflating the Popup using xml file
        popup.getMenuInflater()
                .inflate(R.menu.menu_navview_header_, popup.getMenu());
        //registering popup with OnMenuItemClickListener
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                Toast.makeText(
                        getContext(),
                        "You Clicked : " + item.getTitle(),
                        Toast.LENGTH_SHORT
                ).show();
                return true;
            }
        });
        popup.show(); //showing popup menu
    }
});

您可以设置弹出菜单的重力。

popup.setGravity(Gravity.LEFT);

话虽这么说,但您所做的更像是黑客攻击。不能保证它会出现在左侧。您应该使用 expandableListView 或制作您自己的可扩展视图。试试这个库:https://github.com/AAkira/ExpandableLayout。它提供了一种显示可扩展视图的简单方法。

所以我没有使用那个老掉牙的下拉式弹出菜单,而是意识到已经有更好的工具来解决这个问题:

https://developer.android.com/guide/topics/ui/controls/spinner#java