2014-04-05 4 views
0

Я хочу, чтобы у вас была возможность выбрать опцию с помощью PopupMenu с помощью клавиш (например, цифр 1-4). Устройство, для которого я пишу приложение, имеет встроенную цифровую клавиатуру, что делает их всегда доступными (не используя мягкую клавиатуру).Detect keyup, когда отображается PopupMenu

Цель состоит в том, чтобы пользователь смог нажать кнопку/номер и меню будет показано, что работает, здесь (это в моей деятельности):

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event){ 
    Log.d("onKeyUp", KeyEvent.keyCodeToString(keyCode)); 
    if (event.getKeyCode() == KeyEvent.KEYCODE_5) { 
     showPopupMenu((Button) findViewById(R.id.btnMenu)); 
    } 
    return true; 
} 

Я хотел бы можно затем выбрать одну из опций из меню с помощью клавиатуры, однако, когда меню видно, событие 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(); 
} 

Это используется Android 4.1 (API 16). Спасибо за любую помощь! Рад предоставить дополнительный код там, где это необходимо.

+0

Не могли бы вы найти способ сделать это? У меня такая же проблема! –

+0

Эй, извините, не могу сказать, что я смог добиться этого. Я закончил тем, что обошел его, используя простой и понятный «Диалог», который вы можете найти http://developer.android.com/guide/topics/ui/dialogs.html – djston

ответ

0

Вы должны установить KeyEvent слушателя popupwindow объекта, как этот

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; 
     } 
    }); 
} 
Смежные вопросы