在“ActionBar”项目点击显示popup菜单

我有一个ActionBar上的一个行动项目。 点击行动项目后,我想显示一个popup式菜单。 我实现了这个方法,但我想将它锚定到操作项或ActionBar ,而不是布局的任何视图。 如何获得某种视图从MenuItem锚定它?

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

所以最后我find解决scheme。 当你想在ActionBar中将popup菜单定位到ActionItem时,你需要find呈现ActionItem的视图。 使用findViewById()简单查找视图,其中id与xml中菜单项的id相同。

展示popup窗口:

 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,所以你必须检查这种情况,并锚定到另一个视图。

 public boolean onOptionsItemSelected(MenuItem item) { final View addView = getLayoutInflater().inflate(R.layout.add, null); new AlertDialog.Builder(this).setTitle("Add a Word").setView(addView) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { addWord((TextView) addView.findViewById(R.id.title)); } }).setNegativeButton("Cancel", null).show(); return (super.onOptionsItemSelected(item)); } 

在这里获取完整的源代码

http://vimaltuts.com/android-tutorial-for-beginners/android-action-bar-tab-menu-example