android - 在 `ActionBar` 项目单击时显示弹出菜单

标签 android android-actionbar popupmenu

我有一个 ActionBar 上面有一个操作项。单击操作项后,我想显示一个弹出菜单。 我实现了这个方法,但我想将它锚定到操作项或 ActionBar,而不是布局中的任何 View 。如何从 MenuItem 获得某种 View 来锚定它?

public boolean onOptionsItemSelected(MenuItem item) {
    PopupMenu popupMenu = new PopupMenu(this, ??????); // What view goes here?
    popupMenu.inflate(R.menu.counters_overflow);
    popupMenu.show();
    // ...
    return true;
}

最佳答案

所以我终于找到了解决方案。当您想将弹出菜单锚定到 ActionBar 中的 ActionItem 时,您需要找到呈现 ActionItem 的 View 。 使用 findViewById() 的简单查找 View ,其中 id 与 xml 中菜单项的 id 相同。

显示弹出窗口:

public boolean onOptionsItemSelected(MenuItem item) {
    // ...

    View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID
    PopupMenu popupMenu = new PopupMenu(this, menuItemView); 
    popupMenu.inflate(R.menu.counters_overflow);
    // ...
    popupMenu.show();
    // ...
    return true;
}

菜单:

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

     ....

     <item
    android:id="@+id/menu_overflow"
    android:icon="@drawable/ic_overflow"
    android:showAsAction="ifRoom"
    android:title="@string/menu_overflow"/>

     ....

</menu>

如果菜单项不可见(溢出),则它不起作用。 findViewById 返回 null,因此您必须检查这种情况并锚定到另一个 View 。

关于android - 在 `ActionBar` 项目单击时显示弹出菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729592/

相关文章:

android - 将预览帧转换为位图

Android:如何触摸 ScrollView 并显示其滚动条 2 秒?

java - 更改操作栏的大小

flutter - 使用 showMenu() 时如何处理 PopupMeniItem 按下

list - 如何使用弹出菜单删除项目列表 - flutter

android - 不工作我的模拟器得到这个错误

android - 溢出菜单行自定义

java - getSupportActionBar().setDisplayHomeAsUpEnabled(true);抛出空指针异常

c++ - 我想从我的上下文弹出菜单中获取一个矩形

Android Espresso 2.0 卡在点击 gridview 项目上