Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当弹出菜单可见时检测按键_Android_Popupmenu - Fatal编程技术网

Android 当弹出菜单可见时检测按键

Android 当弹出菜单可见时检测按键,android,popupmenu,Android,Popupmenu,我希望能够使用键(即数字1-4)从弹出菜单中选择一个选项。我正在为其编写应用程序的设备有一个内置数字键盘,使其始终可以访问(不使用软键盘) 其目的是让用户能够按一个数字/按钮,并在此处显示正在工作的菜单(这在我的活动中): 我希望能够使用键盘从菜单中选择一个选项,但是当菜单可见时,只要按下一个键,onKeyUp事件就不会触发 以下是菜单代码: public void showPopupMenu(View v){ PopupMenu popupMenu = new PopupMenu(th

我希望能够使用键(即数字1-4)从弹出菜单中选择一个选项。我正在为其编写应用程序的设备有一个内置数字键盘,使其始终可以访问(不使用软键盘)

其目的是让用户能够按一个数字/按钮,并在此处显示正在工作的菜单(这在我的活动中):

我希望能够使用键盘从菜单中选择一个选项,但是当菜单可见时,只要按下一个键,onKeyUp事件就不会触发

以下是菜单代码:

public void showPopupMenu(View v){
    PopupMenu popupMenu = new PopupMenu(this, v);
    final MenuInflater menuInflator = popupMenu.getMenuInflater();

    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            //Do something
            return true;
        }
    });

    menuInflator.inflate(R.menu.current_screen_menu, popupMenu.getMenu());
    popupMenu.show();
}

这是使用安卓4.1(API 16)。谢谢你的帮助!乐意提供更多需要的代码。

您需要在popupwindow对象中设置keyevent listener,如下所示

public void showPopupMenu(View v){
    PopupMenu popupMenu = new PopupMenu(this, v);
    final MenuInflater menuInflator = popupMenu.getMenuInflater();

    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            //Do something
            return true;
        }
    });

    menuInflator.inflate(R.menu.current_screen_menu, popupMenu.getMenu());
    popupMenu.show();

    // You have to implement following listner
    popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {        
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode ==  KeyEvent.KEYCODE_MENU && 
                    event.getRepeatCount() == 0 && 
                    event.getAction() == KeyEvent.ACTION_DOWN) {
                // ... payload action here. e.g. popupMenu.dismiss();
                return true;
            }                
            return false;
        }
    });
}

你能想个办法吗?我也面临着类似的问题!嘿,对不起,我不能说我能让它工作。最后,我使用了一个简单明了的“对话”,你可以找到它
public void showPopupMenu(View v){
    PopupMenu popupMenu = new PopupMenu(this, v);
    final MenuInflater menuInflator = popupMenu.getMenuInflater();

    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            //Do something
            return true;
        }
    });

    menuInflator.inflate(R.menu.current_screen_menu, popupMenu.getMenu());
    popupMenu.show();

    // You have to implement following listner
    popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {        
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode ==  KeyEvent.KEYCODE_MENU && 
                    event.getRepeatCount() == 0 && 
                    event.getAction() == KeyEvent.ACTION_DOWN) {
                // ... payload action here. e.g. popupMenu.dismiss();
                return true;
            }                
            return false;
        }
    });
}