在“ ActionBar”项上显示弹出菜单,单击

问题描述 投票:48回答:3

我有一个ActionBar,上面有一个动作项目。单击操作项后,我要显示一个弹出菜单。我实现了此方法,但我想将其锚定到操作项或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;
}
android android-actionbar popupmenu
3个回答
117
投票

所以最后我找到了解决方案。当您想将弹出菜单锚定到ActionBar中的ActionItem时,需要找到呈现ActionItem的视图。具有findViewById()的简单查找视图,其中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,因此您必须检查这种情况并定位到另一个视图。


0
投票

请尝试这个..

  @Override
public boolean onOptionsItemSelected(MenuItem item){
    String str=item.getTitle().toString(); 
    Toast.makeText(getBaseContext(), str,Toast.LENGTH_LONG). show();

    View view=findViewById(item.getItemId()); 
    switch(view.getId()){
        case Menu.FIRST:
            showPopup(view); // calling method
    }

    return super.onOptionsItemSelected(item);
}   

// custom method
private void showPopup(final View view) {
    PopupMenu popupMenu = new PopupMenu(view.getContext(), view);
    popupMenu.getMenu().add(0, 0, Menu.NONE, "Item 1");
    popupMenu.getMenu().add(0, 1, Menu.NONE, "Item 2");
    popupMenu.getMenu().add(0, 2, Menu.NONE, "Item 3");
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Toast.makeText(view.getContext(), item.getTitle() + "clicked", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
    popupMenu.show();
}

-4
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.