java - 弹出菜单出现在左下角

标签 java android xml menu

我正在尝试在我的 fragment 中实现弹出菜单,但结果远远超出了我的愿望。我的操作栏上有一个按钮,其中一个按钮调用弹出菜单,直到这里才出现问题。它成功调用,我可以看到弹出菜单。这是我的做法。

在 fragment 类中

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.x) {           
    } else showPopup(view /* or getView() */);

    return super.onOptionsItemSelected(item);
}

public void showPopup(View v) {
    PopupMenu popupMenu = new PopupMenu(getContext(), v);
    MenuInflater menuInflater = popupMenu.getMenuInflater();
    menuInflater.inflate(R.menu.event_popup, popupMenu.getMenu());
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            return false;
        }
    });
    popupMenu.show();
}

popup_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/a"
    android:icon="@drawable/ic_action_back"
    android:title="a" />

<item android:id="@+id/b"
    android:icon="@drawable/ic_action_back"
    android:title="b" />

Fragment 的操作菜单(包括打开弹出菜单的按钮)

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/x"
    android:icon="@drawable/ic_action_back"
    yourapp:showAsAction="ifRoom"
    android:title="" />

<item android:id="@+id/y"
    android:icon="@drawable/ic_action_menu_dot"
    yourapp:showAsAction="ifRoom"
    android:title="" />

</menu>

结果如下。我希望它位于右上角。我该如何处理这个问题。据我所知,它的默认位置已经是右上角了。

enter image description here

最佳答案

您需要为弹出菜单提供适当的 anchor View (在本例中为溢出菜单)。

尝试改变

showPopup(view);

View menuItemView = MyActivity.this.findViewById(R.id.overflow_menu); // replace with your id
showPopup(menuItemView);

这应该将弹出菜单带到顶部。如果它仍然在左侧使用

popupMenu.setGravity(Gravity.END);

关于java - 弹出菜单出现在左下角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53337344/

相关文章:

java - 想要使用共享的 @BeforeClass/@AfterClass 和 Spring App Context 运行许多 jUnit 测试类

java - AES vs AESWrap,它们有什么关系?

java - 从 multimap 列表中删除元素的最佳方法

java - 实现迭代回退机制的设计模式

ruby - 如何在 Ubuntu 上修复 Nokogiri?

java - 解码 JAVA Web 服务中的嵌套或复杂数据元素

java - HashMap 中的链接

java - 我希望我的 Android fragment 覆盖 MainActivity 屏幕(我不想看到任何 MainActivity 文本、按钮等)

android - react-native react-navigation-drawer 在 App 启动时默认保持打开状态

java - 使用 Camel 调用 REST URL