我有一个 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/