Search code examples
androidkeyeventpopupmenu

Show Popup Menu on menu key event


I have problem in creating pop-up menu on menu key event. I don’t understand how to pass required parameter to popmenu constructor. If any know what is the problem in my code then please suggest.

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) 
    {
        View v=getCurrentFocus();
        PopupMenu popupMenu = new PopupMenu(this,v);
        popupMenu.inflate(R.menu.poupup_menu);
        popupMenu.setOnMenuItemClickListener(
            new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.menu_red:
                            Toast.makeText(context,"red",2000).show();
                            break;
                        case R.id.menu_blue:
                            Toast.makeText(context,"red",2000).show();
                            break;
                        case R.id.menu_green:
                            Toast.makeText(context,"red",2000).show();
                            break;
                    }
                    return true;
                }
            });
            popupMenu.show();

            // ...
            return true;
        } else {
            return super.onKeyUp(keyCode, event);
        }
    }
}

Solution

  • thanks guys for answering...I got perferct solution to handle android menus..Override onCreateoption menu method,in that get menu instance and inflate our customize menu..and handle menu click event.

         /* Initiating Menu XML file (menu.xml) */
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.layout.menu, menu);
        return true;
    }
    
    /**
     * Event Handling for Individual menu item selected
     * Identify single menu item by it's id
     * */
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
    
        switch (item.getItemId())
        {
        case R.id.menu_bookmark:
            // Single menu item is selected do something
            // Ex: launching new activity/screen or show alert message
            Toast.makeText(AndroidMenusActivity.this, "Bookmark is Selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.menu_save:
            Toast.makeText(AndroidMenusActivity.this, "Save is Selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.menu_search:
            Toast.makeText(AndroidMenusActivity.this, "Search is Selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.menu_share:
            Toast.makeText(AndroidMenusActivity.this, "Share is Selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.menu_delete:
            Toast.makeText(AndroidMenusActivity.this, "Delete is Selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.menu_preferences:
            Toast.makeText(AndroidMenusActivity.this, "Preferences is Selected", Toast.LENGTH_SHORT).show();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }