2013-02-06 41 views
37

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

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

我在做类似的事情! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

回答

94

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

DISPLAYING跳出:

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; 
} 

MENU:

<?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,因此您必须检查这种情况并将其锚定到另一个视图。

+8

findViewById(R.id.menu_overflow)给了我一个空视图 – ingsaurabh

+5

findViewById(R.id.menu_overflow)给出null如果你发现在没有活动的根视图。使用Activity.findViewById(R.id.menu_overflow)和一切ok =)) – maXp

+0

是否可以在popupMenu中的特定项目之间添加分隔符? –

-2
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

+0

对不起,我确实想找到ActionItem点击时创建的PopupMenu的正确用法。没有解决方法。 – pcu

+0

问题是关于PopupMenu而不是AlertDialog。 – JaydeepW

相关问题