显示上`ActionBar`项目点击弹出菜单(Show popup menu on `ActionB

2019-07-19 09:56发布

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

Answer 1:

所以,我终于找到解决办法。 当你想锚弹出菜单中动作条到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;
}

菜单:

<?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。



Answer 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



文章来源: Show popup menu on `ActionBar` item click